Mi sono tuffato anche in questo e sebbene sia di gran lunga il riferimento sulla questione, ci sono alcuni fatti chiave che ho raccolto e punti che vorrei condividere:
Una partizione è una divisione di un database logico o dei suoi elementi costitutivi in parti indipendenti distinte. Il partizionamento del database viene normalmente eseguito per motivi di gestibilità, prestazioni o disponibilità, come per il bilanciamento del carico.
https://en.wikipedia.org/wiki/Partition_(database)
Il coccio è un tipo di partizionamento, come il partizionamento orizzontale (HP)
C'è anche il partizionamento verticale (VP) in base al quale dividi una tabella in parti distinte più piccole. La normalizzazione comporta anche questa suddivisione delle colonne tra le tabelle, ma il partizionamento verticale va oltre e divide le colonne anche se già normalizzate.
https://en.wikipedia.org/wiki/Shard_(database_architecture)
Mi piace molto la risposta di Tony Baco su Quora in cui ti fa pensare in termini di schema (piuttosto che di colonne e righe). Lui afferma che ...
Il " partizionamento orizzontale ", o sharding, sta replicando [copiando] lo schema e quindi dividendo i dati in base a una chiave di shard.
Il " partizionamento verticale " implica la divisione dello schema (e i dati vanno avanti per la corsa).
https://www.quora.com/Whats-the-difference-between-sharding-DB-tables-and-partitioning-them
La Guida al partizionamento del database Oracle ha alcune belle figure. Ho copiato alcuni estratti dall'articolo.
https://docs.oracle.com/cd/B28359_01/server.111/b32024/partition.htm
Quando partizionare una tabella
Ecco alcuni suggerimenti su quando partizionare una tabella:
- Le tabelle superiori a 2 GB devono sempre essere considerate come candidate per il partizionamento.
- Tabelle contenenti dati storici, in cui vengono aggiunti nuovi dati nella partizione più recente. Un tipico esempio è una tabella storica in cui solo i dati del mese corrente sono aggiornabili e gli altri 11 mesi sono di sola lettura.
- Quando il contenuto di una tabella deve essere distribuito su diversi tipi di dispositivi di archiviazione.
Potatura da partizione
La potatura delle partizioni è il mezzo più semplice e anche sostanziale per migliorare le prestazioni usando il partizionamento. La potatura delle partizioni può spesso migliorare le prestazioni della query di diversi ordini di grandezza. Ad esempio, supponiamo che un'applicazione contenga una tabella Ordini contenente un record storico di ordini e che questa tabella sia stata partizionata per settimana. Una query che richiede ordini per una sola settimana accederà a una singola partizione della tabella Ordini. Se la tabella degli ordini avesse 2 anni di dati storici, questa query avrebbe accesso a una partizione anziché a 104 partizioni. Questa query potrebbe potenzialmente essere eseguita 100 volte più velocemente semplicemente a causa della potatura della partizione.
Strategie di partizionamento
Puoi leggere il loro testo e visualizzare le loro immagini che spiegano tutto abbastanza bene.
E, infine, è importante capire che i database sono estremamente dispendiosi in termini di risorse:
- processore
- Disco
- I / O
- Memoria
Molti DBA partiranno sulla stessa macchina, dove le partizioni condivideranno tutte le risorse ma forniranno un miglioramento del disco e dell'I / O suddividendo i dati e / o l'indice.
Mentre altre strategie impiegheranno un'architettura di "nulla condiviso" in cui i frammenti risiederanno su unità di elaborazione (nodi) distinte e distinte, con il 100% di CPU, disco, I / O e memoria su se stesso. Fornire il proprio set di vantaggi e complessità.
https://en.wikipedia.org/wiki/Shared_nothing_architecture