MongoDB Sharding: tutorial passo passo con esempio

โšก Riepilogo intelligente

MongoDB Lo sharding suddivide grandi insiemi di dati in sottoinsiemi piรน piccoli distribuiti su piรน MongoDB istanze, riducendo il carico della CPU su ogni singolo server. Un cluster sharded combina shard, un server di configurazione e un router per scalare orizzontalmente lo storage e la velocitร  di elaborazione delle query.

  • ๐Ÿงฉ Concetto principale: Lo sharding suddivide una collezione logica in piรน parti, ma le query continuano a trattare i dati come un'unica collezione.
  • ???? ๏ธ Cluster Componenti: Un cluster sharded necessita di shard per i dati, un server di configurazione per i metadati e un router per instradare i comandi dei client.
  • โš™๏ธ Flusso di implementazione: Avvia il server di configurazione, avvia il router di MongoDB, aggiungi gli shard e abilita lo sharding sul database e sulla collection.
  • ๐Ÿ”‘ Chiave di frammentazione: La chiave di partizione determina la modalitร  di distribuzione dei documenti, pertanto un'elevata cardinalitร  e modelli di accesso uniformi sono essenziali.
  • ๐Ÿ“ˆ Vantaggio principale: Lo sharding offre scalabilitร  orizzontale, distribuendo lo storage e il carico di lavoro anzichรฉ aggiornare un singolo server.

MongoDB Sharding: tutorial passo passo con esempio

In cosa consiste lo Sharding MongoDB?

Lo sharding รจ un concetto in MongoDB, che suddivide set di dati di grandi dimensioni in set di dati piccoli su piรน file MongoDB le istanze.

A volte i dati all'interno MongoDB saranno cosรฌ enormi che le query su set di dati cosรฌ grandi possono causare un elevato utilizzo della CPU sul server. Per affrontare questa situazione, MongoDB ha un concetto di Sharding, che รจ fondamentalmente la suddivisione di set di dati su piรน set MongoDB le istanze.

La collezione, che puรฒ essere di grandi dimensioni, รจ in realtร  suddivisa in piรน collezioni, o Frammenti come vengono chiamati. Logicamente, tutti i frammenti funzionano come un'unica collezione.

Vantaggi dello sharding in MongoDB

Prima di implementare un cluster sharded, รจ utile capire perchรฉ i team adottano lo sharding. I principali vantaggi sono:

  • Scalabilitร  orizzontale: I dati vengono distribuiti su numerosi server standard anzichรฉ costringere una singola macchina a diventare sempre piรน grande.
  • Maggiore produttivitร : Le operazioni di lettura e scrittura vengono eseguite in parallelo tra gli shard, consentendo al cluster di gestire un maggior numero di richieste al secondo.
  • Maggiore capacitร  di stoccaggio: Il disco combinato di tutti gli shard puรฒ contenere set di dati di dimensioni di gran lunga superiori a quelle che un singolo server potrebbe archiviare.
  • Alta disponibilitร : Quando ogni shard viene distribuito come set di repliche, il guasto di un singolo nodo non provoca l'arresto dell'intero cluster.
  • Carico bilanciato: Migliori MongoDB Il bilanciatore ridistribuisce automaticamente i blocchi di dati per impedire che un singolo shard diventi un hotspot.

Insieme, questi vantaggi rendono lo sharding l'approccio standard per la scalabilitร  MongoDB oltre i limiti di un singolo server.

Come implementare lo sharding

Gli shard vengono implementati utilizzando i cluster, che non sono altro che un gruppo di MongoDB le istanze.

I componenti di uno Shard includono:

  1. Un frammento โ€“ Questa รจ la cosa fondamentale, e questo non รจ altro che a MongoDB istanza che contiene il sottoinsieme dei dati. Negli ambienti di produzione, tutti i frammenti devono far parte di set di repliche.
  2. Server di configurazione - Questo รจ un MongoDB istanza che contiene metadati sul cluster, in pratica informazioni sui vari MongoDB istanze che conterranno i dati dello shard.
  3. Un router - Questo รจ un MongoDB istanza che รจ fondamentalmente responsabile del reindirizzamento dei comandi inviati dal client ai server corretti.

Sharding passo dopo passo Cluster Esempio

Passo 1) Crea un database separato per il server di configurazione.

mkdir /data/configdb

Passo 2) Avvia la MongoDB Esempio in modalitร  di configurazione. Supponiamo di avere un server chiamato Server D, che fungerร  da server di configurazione. Dovremo eseguire il comando seguente per configurare il server come server di configurazione.

mongod --configdb ServerD:27019

Passo 3) Avvia l'istanza di mongos specificando il server di configurazione.

mongos --configdb ServerD:27019

Passo 4) Dalla shell di mongo, connettiti all'istanza di mongos.

mongo --host ServerD --port 27017

Passo 5) Se si dispone di Server A e Server B che devono essere aggiunti al cluster, eseguire i comandi seguenti.

sh.addShard("ServerA:27017")
sh.addShard("ServerB:27017")

Passo 6) Abilita lo sharding per il database. Quindi, se รจ necessario suddividere in shard il database Employeedb, eseguire il comando seguente.

sh.enableSharding("Employeedb")

Passo 7) Abilita lo sharding per la raccolta. Quindi, se devi suddividere la raccolta Employee, esegui il comando seguente.

sh.shardCollection("Employeedb.Employee", { "Employeeid": 1, "EmployeeName": 1 })

Come scegliere una chiave Shard in MongoDB

La chiave di partizione รจ il campo indicizzato, o insieme di campi, che MongoDB La chiave viene utilizzata per decidere in quale shard memorizzare ciascun documento. Poichรฉ la chiave determina la distribuzione dei dati, sceglierla correttamente รจ la decisione piรน importante in un'implementazione con sharding. Una chiave inadeguata concentra dati e traffico su un unico shard, vanificando i vantaggi dello sharding.

Una chiave di shard robusta generalmente presenta le seguenti caratteristiche:

  • Cardinalitร  elevata: Il campo dovrebbe avere molti valori possibili in modo che i dati possano essere suddivisi in molti blocchi piรน dettagliati.
  • Bassa frequenza: Nessun singolo valore dovrebbe prevalere, altrimenti i documenti che condividono quel valore si accumuleranno su un unico frammento.
  • Variazione non monotona: Le chiavi che aumentano sempre, come i timestamp, inviano ogni nuova scrittura allo stesso shard, creando un hotspot.

MongoDB Supporta due strategie di sharding basate sulla chiave. Lo sharding per intervalli divide i dati in intervalli contigui ed รจ adatto alle query di intervallo, mentre lo sharding con hash applica una funzione hash per distribuire uniformemente le scritture tra gli shard. I team spesso iniziano con lo sharding con hash quando le scritture sono intense e passano allo sharding per intervalli quando predominano le letture basate su intervalli. Indipendentemente dalla strategia scelta, testa la chiave con modelli di query realistici prima di confermarla, perchรฉ la chiave di sharding non puรฒ essere modificata facilmente una volta caricati i dati.

Sharding vs Replicazione in MongoDB

Sharding e replica sono funzionalitร  complementari ma distinte. La tabella seguente evidenzia le differenze, in modo da poterle applicare correttamente; in pratica, i cluster di produzione le utilizzano entrambe.

Aspetto sharding replicazione
Missione Scalare orizzontalmente suddividendo i dati Proteggi i dati e mantienili disponibili
Dati su ciascun nodo Un sottoinsieme (una porzione) dei dati Una copia completa dei dati
Beneficio primario Maggiore capacitร  di archiviazione e velocitร  di elaborazione. Tolleranza ai guasti e scalatura di lettura
Componenti chiave Shard, server di configurazione, router mongos membri primari e secondari

In sintesi, lo sharding risponde all'esigenza di scalabilitร , mentre la replica risponde all'esigenza di disponibilitร , e un'implementazione robusta combina entrambe.

DOMANDE FREQUENTI

Sรฌ. Gli strumenti di intelligenza artificiale possono analizzare i modelli di query e la cardinalitร  dei campi per suggerire chiavi di partizionamento candidate e segnalare la presenza di campi monotoni. Poichรฉ รจ difficile modificare la chiave in seguito, รจ necessario convalidare qualsiasi suggerimento con carichi di lavoro reali prima di applicarlo.

Sรฌ. Il monitoraggio basato sull'IA puรฒ tracIl sistema analizza la crescita dei dati, il carico della CPU e la latenza delle query per prevedere quando un singolo server rischia di essere sovraccaricato. Segnala il momento opportuno per implementare lo sharding, sebbene gli ingegneri debbano confermare i piani di capacitร  prima di agire.

Lo sharding per intervalli divide i dati in intervalli di valori contigui, il che รจ adatto alle query di intervallo ma comporta il rischio di blocchi non uniformi. Lo sharding con hash utilizza l'hashing sulla chiave per distribuire le scritture in modo uniforme tra gli shard, migliorando la distribuzione delle scritture a scapito di un'efficienza inferiore nelle scansioni di intervallo.

Sรฌ. Abilita lo sharding sul database, assicurati che esista un indice sulla chiave di sharding scelta, quindi esegui sh.shardCollection() sullo spazio dei nomi. MongoDB Inizia a distribuire automaticamente i documenti esistenti in blocchi tra gli shard disponibili.

Riassumi questo post con: