MongoDB - Sharding
Lo sharding è il processo di archiviazione dei record di dati su più macchine ed è l'approccio di MongoDB per soddisfare le esigenze di crescita dei dati. Con l'aumentare della dimensione dei dati, una singola macchina potrebbe non essere sufficiente per archiviare i dati né fornire una velocità di lettura e scrittura accettabile. Lo sharding risolve il problema con il ridimensionamento orizzontale. Con lo sharding, aggiungi più macchine per supportare la crescita dei dati e le richieste di operazioni di lettura e scrittura.
Perché lo sharding?
Nella replica, tutte le scritture vanno al nodo master
Le query sensibili alla latenza vanno ancora al master
Il set di repliche singolo ha una limitazione di 12 nodi
La memoria non può essere abbastanza grande quando il set di dati attivo è grande
Il disco locale non è abbastanza grande
Il ridimensionamento verticale è troppo costoso
Sharding in MongoDB
Il diagramma seguente mostra lo sharding in MongoDB usando il cluster sharded.
![](https://assets.edu.lat/mongodb/images/sharding.png)
Nel diagramma seguente, ci sono tre componenti principali:
Shards- I frammenti vengono utilizzati per memorizzare i dati. Forniscono elevata disponibilità e coerenza dei dati. Nell'ambiente di produzione, ogni frammento è un set di repliche separato.
Config Servers- I server di configurazione memorizzano i metadati del cluster. Questi dati contengono una mappatura del set di dati del cluster sui frammenti. Il router di query utilizza questi metadati per indirizzare le operazioni a frammenti specifici. Nell'ambiente di produzione, i cluster frammentati hanno esattamente 3 server di configurazione.
Query Routers- I router di query sono fondamentalmente istanze di mongo, si interfacciano con le applicazioni client e dirigono le operazioni allo shard appropriato. Il router di query elabora e indirizza le operazioni a frammenti, quindi restituisce i risultati ai client. Un cluster frammentato può contenere più di un router di query per suddividere il carico di richieste del client. Un client invia richieste a un router di query. In genere, un cluster partizionato dispone di molti router di query.