Cos'è il partizionamento del database?
Il partizionamento del database è il processo di archiviazione di un database di grandi dimensioni su più macchine. Una singola macchina, o server di database, può archiviare ed elaborare solo una quantità limitata di dati. Il partizionamento del database supera questa limitazione suddividendo i dati in blocchi più piccoli, chiamati partizioni, e archiviandoli su diversi server di database. Tutti i server di database di solito dispongono delle stesse tecnologie di base e lavorano insieme per archiviare ed elaborare grandi volumi di dati.
Perché lo sharding del database è importante?
Man mano che un'applicazione cresce, il numero di utenti dell'applicazione e la quantità di dati archiviati aumentano nel tempo. Se il volume di dati diventa troppo grande e troppi utenti tentano di utilizzare l'applicazione per leggere o salvare informazioni contemporaneamente, il database diventa un collo di bottiglia. L'applicazione rallenta e influisce sull'esperienza del cliente. Lo sharding del database è uno dei metodi per risolvere questo problema perché consente l'elaborazione parallela di set di dati più piccoli tra partizioni.
Quali sono i vantaggi dello sharding del database?
Le organizzazioni utilizzano lo sharding del database per ottenere i seguenti vantaggi:
Migliorare i tempi di risposta
Il recupero dei dati richiede più tempo su un singolo database di grandi dimensioni. Il sistema di gestione del database deve effettuare la ricerca in molte righe per recuperare i dati corretti. Al contrario, le partizioni di dati hanno meno righe dell'intero database. Pertanto, è necessario meno tempo per recuperare informazioni specifiche o eseguire una query da un database partizionato.
Evitare l'interruzione totale del servizio
Se il computer che ospita il database riporta un errore, anche l'applicazione che dipende dal database avrà un problema. Lo sharding del database impedisce questo problema distribuendo parti diverse del database in computer diversi. Il guasto di uno dei computer non arresta l'applicazione perché può funzionare con altre partizioni funzionanti. Lo sharding viene spesso eseguito anche in combinazione con la replica dei dati su più shard. Quindi, se una partizione non è disponibile, è comunque possibile accedere ai dati e ripristinarli da una partizione alternativa.
Scalabilità efficiente
Un database in crescita consuma più risorse di elaborazione e alla fine raggiunge la capacità di archiviazione. Le organizzazioni possono utilizzare lo sharding del database per aggiungere più risorse di elaborazione per supportare il dimensionamento del database. Possono aggiungere nuovi frammenti in fase di esecuzione senza chiudere l'applicazione per la manutenzione.
Come funziona lo sharding del database?
Un database memorizza le informazioni in più set di dati costituiti da colonne e righe. Lo sharding del database divide un singolo set di dati in partizioni o frammenti. Ogni partizione contiene righe univoche di informazioni che è possibile archiviare separatamente su più computer, denominati nodi. Tutte le partizioni vengono eseguite su nodi separati ma condividono lo schema o il progetto del database originale.
Ad esempio, un database non partizionato contenente un set di dati per i record dei clienti potrebbe essere simile a questo.
ID cliente |
Nome |
Stato |
1 |
John |
California |
2 |
Jane |
Washington |
3 |
Paulo |
Arizona |
4 |
Wang |
Georgia |
Lo sharding comporta la separazione di diverse righe di informazioni dalla tabella e la loro memorizzazione su macchine diverse, come mostrato di seguito.
Computer A
ID cliente |
Nome |
Stato |
1 |
John |
California |
2 |
Jane |
Washington |
Computer B
ID cliente |
Nome |
Stato |
3 |
Paulo |
Arizona |
4 |
Wang |
Georgia |
Shard
I blocchi di dati partizionati sono chiamati frammenti logici. La macchina che memorizza il frammento logico è chiamata partizione fisica o nodo di database. Un frammento fisico può contenere più frammenti logici.
Chiave di partizione
Gli sviluppatori di software utilizzano una chiave shard per determinare come partizionare il set di dati. Una colonna nel set di dati determina quali righe del gruppo di dati insieme formano una partizione. I progettisti di database scelgono una chiave di partizione da una colonna esistente o ne creano una nuova.
Architettura shared-nothing
Lo sharding del database opera su un'architettura shared-nothing. Ogni frammento fisico opera in modo indipendente e non è a conoscenza di altri frammenti. Solo i frammenti fisici che contengono i dati richiesti elaboreranno i dati in parallelo per te.
Un livello software coordina l'archiviazione dei dati e l'accesso da questi frammenti multipli. Ad esempio, alcuni tipi di tecnologia di database dispongono di funzionalità di sharding automatico integrate. Gli sviluppatori di software possono anche scrivere codice di sharding nella loro applicazione per archiviare o recuperare informazioni dal frammento o dai frammenti corretti.
Quali sono i metodi di sharding del database?
I metodi di sharding del database applicano regole diverse alla chiave di partizione per determinare il nodo corretto per una determinata riga di dati. Le seguenti sono architetture di sharding comuni.
Sharding basato su intervalli
Lo sharding basato su intervalli, o sharding dinamico, divide le righe del database in base a un intervallo di valori. Quindi il progettista del database assegna una chiave di partizione al rispettivo intervallo. Ad esempio, il progettista del database partiziona i dati in base alla prima lettera dell'alfabeto nel nome del cliente come segue.
Nome |
Chiave di partizione |
Inizia con dalla A alla I |
A |
Inizia con J - S |
B |
Inizia con T - Z |
C |
Quando scrive un record del cliente nel database, l'applicazione determina la chiave di partizione corretta controllando il nome del cliente. Quindi l'applicazione abbina la chiave al suo nodo fisico e memorizza la riga su quella macchina. Analogamente, l'applicazione esegue una corrispondenza inversa durante la ricerca di un determinato record.
Pro e contro
A seconda dei valori dei dati, lo sharding basato su intervalli può causare il sovraccarico dei dati su un singolo nodo fisico. Nel nostro esempio, la partizione A (contenente nomi che iniziano con A - I) potrebbe contenere un numero molto maggiore di righe di dati rispetto alla partizione C (contenente nomi che iniziano con T - Z). Tuttavia, è più facile da implementare.
Sharding con hash
Lo sharding con hash assegna la chiave di partizione a ciascuna riga del database utilizzando una formula matematica chiamata funzione hash. La funzione hash prende le informazioni dalla riga e produce un valore hash. L'applicazione utilizza il valore hash come chiave di partizione e memorizza le informazioni nel frammento fisico corrispondente.
Gli sviluppatori di software utilizzano lo sharding con hash per distribuire uniformemente le informazioni in un database tra più partizioni. Ad esempio, il software separa i record dei clienti in due partizioni con valori hash alternativi 1 e 2.
Nome |
Valore hash |
John |
1 |
Jane |
2 |
Paulo |
1 |
Wang |
2 |
Pro e contro
Sebbene lo sharding con hash determini una distribuzione uniforme dei dati tra i frammenti fisici, non separa il database in base al significato delle informazioni. Pertanto, gli sviluppatori di software potrebbero incontrare difficoltà a riassegnare il valore hash quando si aggiungono più frammenti fisici all'ambiente informatico.
Sharding di directory
Lo sharding di directory utilizza una tabella di ricerca per abbinare le informazioni del database al frammento fisico corrispondente. Una tabella di ricerca è come una tabella su un foglio di calcolo che collega una colonna di database a una chiave di partizione. Ad esempio, il diagramma seguente mostra una tabella di ricerca per i colori dei vestiti.
Colore |
Chiave di partizione |
Blu |
A |
Rosso |
B |
Giallo |
C |
Nero |
D |
Quando un'applicazione memorizza informazioni sull'abbigliamento nel database, fa riferimento alla tabella di ricerca. Se un abito è blu, l'applicazione memorizza le informazioni nel frammento corrispondente.
Pro e contro
Gli sviluppatori di software utilizzano lo sharding delle directory perché è flessibile. Ogni partizione è una rappresentazione significativa del database e non è limitata da intervalli. Tuttavia, lo sharding delle directory non riesce se la tabella di ricerca contiene informazioni errate.
Sharding geografico
Il geosharding divide e memorizza le informazioni del database in base alla posizione geografica. Per esempio, un sito Web di servizi di incontri utilizza un database per archiviare le informazioni sui clienti di varie città come segue.
Nome |
Chiave di partizione |
John |
California |
Jane |
Washington |
Paulo |
Arizona |
Gli sviluppatori di software utilizzano le città come chiavi di partizione. Memorizzano le informazioni di ogni cliente in frammenti fisici che si trovano geograficamente nelle rispettive città.
Pro e contro
Il geosharding consente alle applicazioni di recuperare le informazioni più velocemente grazie alla distanza più breve tra la partizione e il cliente che effettua la richiesta. Se i modelli di accesso ai dati si basano prevalentemente sulla geografia, allora funziona bene. Tuttavia, il geosharding può anche causare una distribuzione non uniforme dei dati.
Come ottimizzare lo sharding del database per una distribuzione uniforme dei dati
Quando si verifica un sovraccarico di dati su specifici frammenti fisici sebbene altri rimangano sottocaricati, si ottengono hotspot del database. Gli hotspot rallentano il processo di recupero sul database, vanificando lo scopo dello sharding dei dati.
Una buona selezione di chiavi di partizione può distribuire uniformemente i dati su più partizioni. Quando si sceglie una chiave di partizione, i progettisti di database devono considerare i seguenti fattori.
Cardinalità
La cardinalità descrive i possibili valori della chiave di partizione. Determina il numero massimo di partizioni possibili su database orientati su colonne separati. Ad esempio, se il progettista del database sceglie un campo dati sì/no come chiave di partizione, il numero di frammenti è limitato a due.
Frequenza
La frequenza è la probabilità di memorizzazione di informazioni specifiche in una determinata partizione. Ad esempio, consideriamo un progettista di database che sceglie l'età come chiave di partizione per un sito Web di fitness. La maggior parte dei record potrebbe andare a finire su nodi per gli abbonati di età compresa tra 30 e 45 anni e generare hotspot del database.
Cambiamento monotono
Il cambiamento monotono è il tasso di cambiamento della chiave di partizione. Una chiave di partizione monotona che aumenta o diminuisce si traduce in partizioni sbilanciate. Ad esempio, un database di feedback è suddiviso in tre diversi frammenti fisici come segue:
- La partizione A memorizza i feedback dei clienti che hanno effettuato da 0 a 10 acquisti.
- La partizione B memorizza i feedback dei clienti che hanno effettuato 11-20 acquisti.
- La partizione C memorizza i feedback dei clienti che hanno effettuato 21 o più acquisti.
Man mano che l'attività cresce, i clienti effettueranno più di 21 o più acquisti. L'applicazione memorizza il loro feedback nella partizione C. Ciò si traduce in una partizione sbilanciata perché la partizione C contiene più record di feedback rispetto alle altre partizioni.
Quali sono le alternative allo sharding del database?
Lo sharding del database è una strategia di dimensionamento orizzontale che alloca nodi o computer aggiuntivi per condividere il carico di lavoro di un'applicazione. Le organizzazioni traggono vantaggio dalla scalabilità orizzontale grazie alla sua architettura con tolleranza ai guasti. Quando un computer si guasta, gli altri continuano a funzionare senza interruzioni. I progettisti di database riducono i tempi di inattività distribuendo frammenti logici su più server.
Tuttavia, il lo sharding è una delle tante altre strategie di dimensionamento del database. Esplora alcune altre tecniche e comprendi come si confrontano.
Dimensionamento verticale
Il dimensionamento verticale aumenta la potenza di elaborazione di una singola macchina. Ad esempio, il team IT aggiunge una CPU, una RAM e un disco rigido a un server di database per gestire l'aumento del traffico.
Confronto tra sharding del database e dimensionamento verticale
Il dimensionamento verticale è meno costoso, ma esiste un limite alle risorse di elaborazione che è possibile dimensionare verticalmente. Per contro, lo sharding, una strategia di dimensionamento orizzontale, è più facile da implementare. Ad esempio, il team IT installa più computer invece di aggiornare il vecchio hardware del computer.
Replica
La replica è una tecnica che crea copie esatte del database e le archivia su computer diversi. I progettisti di database utilizzano la replica per progettare un sistema di gestione di database relazionali con tolleranza agli errori Quando per uno dei computer che ospitano il database si verifica un guasto, le altre repliche rimangono operative. La replica è una pratica comune nei sistemi informatici distribuiti.
Confronto tra sharding e replica del database
Lo sharding del database non crea copie delle stesse informazioni. Invece, divide un database in più parti che vengono memorizzate su computer diversi. A differenza della replica, lo sharding del database non comporta un'elevata disponibilità. Lo sharding può essere utilizzato in combinazione con la replica per ottenere scalabilità e alta disponibilità.
In alcuni casi, lo sharding del database potrebbe consistere in repliche di set di dati specifici. Ad esempio, un negozio al dettaglio che vende prodotti a clienti statunitensi ed europei potrebbe archiviare repliche di tabelle di conversione delle dimensioni su frammenti diversi per entrambe le regioni. L'applicazione può utilizzare le copie duplicate della tabella di conversione per convertire le dimensioni di misurazione senza accedere ad altri server di database.
Partizionamento
Per partizionamento si può intendere anche il processo di suddivisione di una tabella di database in più gruppi. Il partizionamento è classificato in due tipi:
- Il partizionamento orizzontale divide il database per righe.
- Il partizionamento verticale crea diverse partizioni delle colonne del database.
Confronto tra sharding e partizionamento del database
Lo sharding del database è come il partizionamento orizzontale. Entrambi i processi suddividono il database in più gruppi di righe univoche. Il partizionamento memorizza tutti i gruppi di dati nello stesso computer, mentre lo sharding del database li divide su computer diversi.
Quali sono le difficoltà che si incontrano durante lo sharding dei database?
Quando implementano lo sharding del database le organizzazioni potrebbero incorrere nelle seguenti difficoltà.
Hotspot di dati
Alcune partizioni diventano sbilanciate a causa della distribuzione non uniforme dei dati. Ad esempio, un singolo frammento fisico che contiene nomi di clienti che iniziano con A riceve più dati di altri. Questo frammento fisico utilizzerà più risorse di calcolo rispetto ad altri.
Soluzione
Puoi distribuire i dati in modo uniforme utilizzando le chiavi di partizione ottimali. Alcuni set di dati sono più adatti per lo sharding rispetto ad altri.
Complessità operativa
Lo sharding del database crea una complessità operativa. Invece di gestire un singolo database, gli sviluppatori devono gestire più nodi di database. Quando recuperano informazioni, gli sviluppatori devono interrogare diverse partizioni e combinare insieme le informazioni. Queste operazioni di recupero possono complicare l'analisi.
Soluzione
Nel portafoglio di database AWS, la configurazione e le operazioni del database sono state ampiamente automatizzate. Ciò rende l'utilizzo di un'architettura di database frammentata un'attività semplificata.
Costi di infrastruttura
I costi di infrastruttura delle organizzazioni aumentano quando si aggiungono più computer come frammenti fisici. I costi di manutenzione possono sommarsi se si aumenta il numero di macchine nel data center on-premise.
Soluzione
Gli sviluppatori utilizzano Amazon Elastic Compute Cloud (Amazon EC2) per ospitare e scalare le partizioni nel cloud. Puoi risparmiare utilizzando l'infrastruttura virtuale completamente gestita da AWS.
Complessità delle applicazioni
La maggior parte dei sistemi di gestione dei database non dispone di funzionalità di sharding integrate. Ciò significa che i progettisti di database e gli sviluppatori di software devono dividere, distribuire e gestire manualmente il database.
Soluzione
Puoi migrare i tuoi dati nei database AWS dedicati appropriati, che dispongono di diverse funzionalità integrate che supportano la scalabilità orizzontale.
In che modo AWS può aiutare con lo sharding del database?
AWS è una piattaforma di gestione dei dati globale che può essere utilizzata per creare una strategia di dati moderna. Con AWS, puoi scegliere il giusto database dedicato, ottenere prestazioni su larga scala, eseguire database completamente gestiti e fare affidamento su disponibilità e sicurezza elevate.
Inizia a utilizzare oggi stesso la gestione dei dati su AWS creando un account AWS.