{"id":72076,"date":"2023-08-08T10:56:18","date_gmt":"2023-08-08T09:56:18","guid":{"rendered":"https:\/\/kinsta.com\/it\/?p=72076&#038;preview=true&#038;preview_id=72076"},"modified":"2023-08-17T09:43:57","modified_gmt":"2023-08-17T08:43:57","slug":"mongodb-sharding","status":"publish","type":"post","link":"https:\/\/kinsta.com\/it\/blog\/mongodb-sharding\/","title":{"rendered":"Guida completa alla comprensione di MongoDB Sharding"},"content":{"rendered":"<p>Nel mondo di oggi incentrato sui dati, in cui il volume e la complessit\u00e0 dei dati stessi continuano a crescere a un ritmo senza precedenti, la necessit\u00e0 di soluzioni di database robuste e scalabili \u00e8 diventata fondamentale. Si stima che entro il 2025 verranno creati <a href=\"https:\/\/www.statista.com\/statistics\/871513\/worldwide-data-created\/\" target=\"_blank\" rel=\"noopener noreferrer\">180 zettabyte di dati<\/a>. Si tratta di numeri importanti su cui riflettere.<\/p>\n<p>Con l&#8217;aumento dei dati e della domanda degli utenti, affidarsi a un unico database diventa impraticabile. Rallenta il sistema e mette in difficolt\u00e0 gli <a href=\"https:\/\/kinsta.com\/it\/blog\/sviluppatore-full-stack\/\">sviluppatori<\/a>. Fortunatamente, si possono adottare diverse soluzioni per <a href=\"https:\/\/kinsta.com\/it\/mykinsta\/\">ottimizzare il proprio database<\/a>, come ad esempio lo <a href=\"https:\/\/kinsta.com\/it\/blog\/database-sharding\/\">sharding del database<\/a>.<\/p>\n<p>In questa guida, ci addentreremo nelle profondit\u00e0 dello sharding di MongoDB, analizzandone i vantaggi, i componenti, le best practice, gli errori pi\u00f9 comuni e le modalit\u00e0 per iniziare a usarlo.<\/p>\n<div><\/div><kinsta-auto-toc heading=\"Table of Contents\" exclude=\"last\" list-style=\"arrow\" selector=\"h2\" count-number=\"-1\"><\/kinsta-auto-toc>\n<h2>Cos&#8217;\u00e8 lo sharding dei database?<\/h2>\n<p>Lo sharding dei database \u00e8 una tecnica di gestione dei database che prevede la suddivisione orizzontale di un database in crescita in unit\u00e0 pi\u00f9 piccole e gestibili, note come <b>shard<\/b>.<\/p>\n<p>Quando un database si espande, diventa pratico dividerlo in diverse parti pi\u00f9 piccole e memorizzare ciascuna parte separatamente su macchine diverse. Queste parti pi\u00f9 piccole sono sottoinsiemi indipendenti del database complessivo. Questo processo di divisione e distribuzione dei dati costituisce lo sharding del database.<\/p>\n<figure id=\"attachment_157232\" aria-describedby=\"caption-attachment-157232\" style=\"width: 512px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/06\/Database-Sharding-Illustration.png\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-157232\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/06\/Database-Sharding-Illustration.png\" alt=\"Questa immagine mostra il processo di sharding del database, in cui un database viene suddiviso in tre shard.\" width=\"512\" height=\"185\"><\/a><figcaption id=\"caption-attachment-157232\" class=\"wp-caption-text\">Illustrazione dello sharding di un database (Fonte: <a href=\"https:\/\/www.linkedin.com\/pulse\/intro-database-sharding-can-bad-idea-saurav-prateek\/\" target=\"_blank\" rel=\"noopener noreferrer\">LinkedIn<\/a>)<\/figcaption><\/figure>\n<p>Quando si implementa un database shardato, esistono due approcci principali: sviluppare una soluzione di sharding personalizzata o pagarne una esistente. Questo porta a domandarsi se sia pi\u00f9 opportuno creare una soluzione di sharding o pagarne una.<\/p>\n<figure id=\"attachment_157234\" aria-describedby=\"caption-attachment-157234\" style=\"width: 512px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/06\/Build-vs-Buy-for-a-Sharding-Solution.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-157234\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/06\/Build-vs-Buy-for-a-Sharding-Solution.jpg\" alt=\"Questa \u00e8 un'immagine meme - la lotta quotidiana, che mostra un uomo che ha difficolt\u00e0 a decidere quale dei due pulsanti deve premere.\" width=\"512\" height=\"205\"><\/a><figcaption id=\"caption-attachment-157234\" class=\"wp-caption-text\">Meme &#8220;Costruire o acquistare una soluzione di sharding&#8221; (Fonte: <a href=\"https:\/\/www.linkedin.com\/pulse\/build-vs-buy-what-do-you-expect-see-new-normal-naidu\/\" target=\"_blank\" rel=\"noopener noreferrer\">LinkedIn<\/a>)<\/figcaption><\/figure>\n<p>Per fare questa scelta, \u00e8 necessario considerare il costo dell&#8217;integrazione di terze parti, tenendo presente i seguenti fattori:<\/p>\n<ul>\n<li><b>Capacit\u00e0 degli sviluppatori e apprendimento<\/b>: la curva di apprendimento associata al prodotto e il suo grado di allineamento con le competenze dei propri sviluppatori.<\/li>\n<li><b>Il modello di dati e le API offerte dal sistema<\/b>: ogni sistema di dati ha un proprio modo di rappresentare i dati. La convenienza e la facilit\u00e0 con cui si possono integrare le applicazioni con il prodotto \u00e8 un fattore chiave da considerare.<\/li>\n<li><b>Assistenza clienti e documentazione online<\/b>: nei casi in cui si incontrassero delle difficolt\u00e0 o si dovesse richiedere assistenza durante l&#8217;integrazione, la qualit\u00e0 e la disponibilit\u00e0 del supporto clienti e di una documentazione online completa diventano fondamentali.<\/li>\n<li><b>Disponibilit\u00e0 di implementazione nel cloud<\/b>: dato che sempre pi\u00f9 aziende passano al cloud, \u00e8 importante stabilire se il prodotto di terze parti pu\u00f2 essere implementato in un ambiente cloud.<\/li>\n<\/ul>\n<p>In base a questi fattori, si pu\u00f2 decidere di creare una soluzione di sharding o di pagare una soluzione che faccia il lavoro pesante al posto vostro.<\/p>\n<p>Oggi la maggior parte dei database presenti sul mercato supporta lo sharding dei database. Ad esempio, i database relazionali come MariaDB (parte dello stack di server ad alte prestazioni di <a href=\"https:\/\/kinsta.com\/it\/blog\/database-sharding\/\">Kinsta<\/a>) e i <a href=\"https:\/\/kinsta.com\/it\/blog\/mongodb-vs-mysql\/\">database NoSQL<\/a> come MongoDB.<\/p>\n<h2>Cos&#8217;\u00e8 lo sharding in MongoDB?<\/h2>\n<p>Lo scopo principale dell&#8217;utilizzo di un database NoSQL \u00e8 la sua capacit\u00e0 di gestire le richieste di calcolo e di archiviazione di volumi enormi di dati.<\/p>\n<p>In genere, un database MongoDB contiene un gran numero di raccolte. Ogni raccolta \u00e8 composta da vari documenti che contengono dati sotto forma di coppie chiave-valore. \u00c8 possibile suddividere questa grande raccolta in diverse raccolte pi\u00f9 piccole utilizzando lo sharding di MongoDB. Questo permette a MongoDB di eseguire le query senza gravare troppo sul server.<\/p>\n<p>Ad esempio, Telef\u00f3nica Tech gestisce oltre <a href=\"https:\/\/www.mongodb.com\/customers\/telefonica\" target=\"_blank\" rel=\"noopener noreferrer\">30 milioni di dispositivi IoT<\/a> in tutto il mondo. Per stare al passo con l&#8217;utilizzo sempre crescente dei dispositivi, avevano bisogno di una piattaforma in grado di scalare in modo elastico e di gestire un ambiente di dati in rapida crescita. La tecnologia di sharding di MongoDB \u00e8 stata la scelta giusta per l&#8217;azienda, poich\u00e9 era la pi\u00f9 adatta alle sue esigenze di costo e capacit\u00e0.<\/p>\n<p>Con lo sharding di MongoDB, Telef\u00f3nica Tech esegue oltre 115.000 query al secondo. Si tratta di 30.000 inserimenti nel database al secondo, con meno di un millisecondo di latenza!<\/p>\n<h2>Vantaggi dello sharding di MongoDB<\/h2>\n<p>Ecco alcuni vantaggi dello sharding di MongoDB per i dati su larga scala di cui poter usufruire:<\/p>\n<h3>Capacit\u00e0 di archiviazione<\/h3>\n<p>Abbiamo gi\u00e0 visto che lo sharding distribuisce i dati tra gli shard del cluster. Questa distribuzione permette a ogni shard di contenere un frammento dei dati totali del cluster. Gli shard in pi\u00f9 aumentano la capacit\u00e0 di archiviazione del cluster quando i dati crescono di dimensioni.<\/p>\n<h3>Letture\/Scritture<\/h3>\n<p>MongoDB distribuisce il carico di lavoro in lettura e scrittura tra gli shard di un cluster sharded, o soggetto a sharding, consentendo a ogni shard di elaborare un sottoinsieme di operazioni del cluster. Entrambi i carichi di lavoro possono essere scalati orizzontalmente nel cluster aggiungendo altri shard.<\/p>\n<h3>Alta disponibilit\u00e0<\/h3>\n<p>L&#8217;implementazione di shard e server di configurazione come set di replica offre una maggiore disponibilit\u00e0. Ora, anche se uno o pi\u00f9 set di replica shard diventano completamente non disponibili, il cluster sharded pu\u00f2 eseguire letture e scritture parziali.<\/p>\n<h3>Protezione dalle interruzioni<\/h3>\n<p>Gli utenti colpiti quando una macchina si rompe a causa di un&#8217;interruzione non pianificata possono essere davvero molti. In un sistema non soggetto a sharding l&#8217;impatto sarebbe enorme, dato che l&#8217;intero database andrebbe fuori uso. Il raggio d&#8217;azione di una cattiva esperienza\/impatto sugli utenti pu\u00f2 essere contenuto grazie allo sharding di MongoDB.<\/p>\n<h3>Distribuzione geografica e prestazioni<\/h3>\n<p>Gli shard replicati possono essere collocati in regioni diverse. Ci\u00f2 significa che i clienti possono accedere ai loro dati a bassa latenza, ovvero reindirizzare le richieste dei consumatori allo shard pi\u00f9 vicino a loro. In base alla politica di governance dei dati di una regione, \u00e8 possibile configurare shard specifici da collocare in una regione specifica.<\/p>\n<h2>Componenti dei cluster soggetti a sharding di MongoDB<\/h2>\n<p>Dopo aver spiegato il concetto di cluster shardati di MongoDB, analizziamone i componenti.<\/p>\n<div><\/div><kinsta-auto-toc list-style=\"decimal\" selector=\"h3\" count-number=\"3\" sub-toc=\"true\"><\/kinsta-auto-toc>\n<h3>1. Shard<\/h3>\n<p>Ogni shard ha un sottoinsieme di dati shardati. A partire da MongoDB 3.6, gli shard devono essere distribuiti come set di repliche per garantire alta disponibilit\u00e0 e ridondanza.<\/p>\n<p>Ogni database nel cluster soggetto a sharding ha uno shard primario che conterr\u00e0 tutte le raccolte non shardate di quel database. Lo shard primario non \u00e8 collegato al primario in un set di replica.<\/p>\n<p>Per cambiare lo shard primario di un database, si pu\u00f2 usare il comando <code>movePrimary<\/code>. Il processo di migrazione dello shard primario potrebbe richiedere molto tempo per essere completato.<\/p>\n<p>Durante questo periodo, sarebbe meglio non tentare di accedere alle raccolte associate al database fino al completamento del processo di migrazione. Questo processo potrebbe avere un impatto sulle operazioni complessive del cluster in base alla quantit\u00e0 di dati da migrare.<\/p>\n<p>\u00c8 possibile usare il metodo <code>sh.status()<\/code> di <strong>mongosh<\/strong> per vedere la panoramica del cluster. Questo metodo restituisce lo shard primario del database e la distribuzione dei pezzi tra gli shard.<\/p>\n<h3>2. Server di configurazione<\/h3>\n<p>Distribuire i server di configurazione per i cluster sharded come set di repliche migliorerebbe la coerenza del server di configurazione. Questo perch\u00e9 MongoDB pu\u00f2 sfruttare i protocolli standard di lettura e scrittura dei set di replica per i dati di configurazione.<\/p>\n<p>Per distribuire i server di configurazione come set di replica, sar\u00e0 necessario eseguire il motore di archiviazione WiredTiger. WiredTiger utilizza il controllo della concorrenza a livello di documento per le sue operazioni di scrittura. Pertanto, pi\u00f9 client possono modificare contemporaneamente documenti diversi di una raccolta.<\/p>\n<p>I server di configurazione memorizzano i metadati di un cluster sharded nel database di configurazione. Per accedere al database di configurazione, si pu\u00f2 utilizzare il seguente comando nella shell di mongo:<\/p>\n<pre><code class=\"language-bash\"><code>use config<\/code><\/code><\/pre>\n<p>Ci sono alcune restrizioni da tenere a mente:<\/p>\n<ul>\n<li>La configurazione di un set di replica utilizzato per i server di configurazione deve avere zero arbitri. Un arbitro partecipa alle elezioni per il primario, ma non ha una copia del dataset e non pu\u00f2 diventare primario.<\/li>\n<li>Questo set di replica non pu\u00f2 avere membri delayed. I membri delayed hanno copie del set di dati della replica. Ma il set di dati di un membro delayed contiene uno stato precedente o delayed del set di dati.<\/li>\n<li>\u00c8 necessario creare degli indici per i server di configurazione. In poche parole, nessun membro dovrebbe avere l&#8217;impostazione <code>members[n].buildIndexes<\/code> impostata su <code>false<\/code>.<\/li>\n<\/ul>\n<p>Se il set di replica del server di configurazione perde il suo membro primario e non pu\u00f2 eleggerne uno, i metadati del cluster diventano di sola lettura. Sarete ancora in grado di leggere e scrivere dagli shard, ma non si verificheranno suddivisioni o migrazioni di chunk fino a quando il replica set non sar\u00e0 in grado di eleggere un membro primario.<\/p>\n<h3>3. Router di query<\/h3>\n<p>Le istanze MongoDB mongos possono fungere da router di query, consentendo alle applicazioni client e ai cluster sharded di connettersi facilmente.<\/p>\n<p>A partire da MongoDB 4.4, mongos pu\u00f2 supportare le letture con copertura per ridurre le latenze. Con la lettura con copertura, le istanze mongos invieranno le operazioni di lettura a due membri del set di replica per ogni shard interrogato. I risultati verranno quindi restituiti dal primo rispondente per ogni shard.<\/p>\n<p>Ecco come interagiscono i tre componenti in un cluster shardato:<\/p>\n<figure id=\"attachment_157236\" aria-describedby=\"caption-attachment-157236\" style=\"width: 1132px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/06\/Interaction-of-Sharded-Cluster-Components.png\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-157236\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/06\/Interaction-of-Sharded-Cluster-Components.png\" alt=\"Questa immagine descrive come interagiscono tra loro i diversi componenti di un cluster shardato: shard, server di configurazione e router di query.\" width=\"1132\" height=\"655\"><\/a><figcaption id=\"caption-attachment-157236\" class=\"wp-caption-text\">Interazione dei componenti di un cluster sharded (Fonte immagine: <a href=\"https:\/\/www.mongodb.com\/docs\/manual\/sharding\/\" target=\"_blank\" rel=\"noopener noreferrer\">MongoDB Sharding<\/a>)<\/figcaption><\/figure>\n<p>Un&#8217;istanza di MongoDB indirizza una query a un cluster:<\/p>\n<ol>\n<li>Controllando l&#8217;elenco degli shard che devono ricevere la query.<\/li>\n<li>Stabilendo un cursore su tutti gli shard interessati.<\/li>\n<\/ol>\n<p>Il mongos unir\u00e0 quindi i dati provenienti da ogni shard e restituir\u00e0 il documento risultato. Alcuni modificatori della query, come l&#8217;ordinamento, vengono eseguiti su ogni shard prima che i mongos recuperino i risultati.<\/p>\n<p>In alcuni casi, quando la chiave dello shard o un prefisso della chiave dello shard fa parte della query, mongos eseguir\u00e0 un&#8217;operazione pre-pianificata, indirizzando le query a una sottoclasse di shard nel cluster.<\/p>\n<p>Per un <b>cluster di produzione<\/b>, assicuratevi che i dati siano ridondanti e che i sistemi siano altamente disponibili. Potete scegliere la seguente configurazione per l&#8217;implementazione di un cluster con shard in produzione:<\/p>\n<ul>\n<li>Distribuzione di ogni shard come set di replica a 3 membri<\/li>\n<li>Distribuzione dei server di configurazione come set di replica a 3 membri<\/li>\n<li>Distribuzione di uno o pi\u00f9 router mongos<\/li>\n<\/ul>\n<p>Per un <b>cluster non di produzione<\/b>, \u00e8 possibile distribuire un cluster sharded con i seguenti componenti:<\/p>\n<ul>\n<li>Un singolo set di replica shard<\/li>\n<li>Un server di configurazione del set di repliche<\/li>\n<li>Un&#8217;istanza di mongos<\/li>\n<\/ul>\n<h2>Come funziona lo sharding di MongoDB?<\/h2>\n<p>Ora che abbiamo parlato dei diversi componenti di un cluster sharded, \u00e8 il momento di immergerci nel processo.<\/p>\n<p>Per suddividere i dati su pi\u00f9 server, utilizzeremo mongos. Quando ci connetteremo per inviare le query a MongoDB, mongos cercher\u00e0 e trover\u00e0 dove risiedono i dati. Quindi li prender\u00e0 dal server giusto e unir\u00e0 tutto insieme se sono stati suddivisi su pi\u00f9 server.<\/p>\n<p>Dato che il <a href=\"https:\/\/kinsta.com\/it\/blog\/sviluppatore-backend\/\">backend<\/a> si occuper\u00e0 di questo, non dovremo fare nulla dal lato dell&#8217;applicazione. MongoDB si comporter\u00e0 come una normale connessione di interrogazione. Il client si connetter\u00e0 a MongoDB e il server di configurazione si occuper\u00e0 del resto.<\/p>\n<h2>Quali sono i passaggi per impostare lo sharding di MongoDB?<\/h2>\n<p>L&#8217;impostazione dello sharding di MongoDB \u00e8 un processo che prevede diversi passaggi per garantire un cluster di database stabile ed efficiente. Ecco le istruzioni dettagliate su come impostare lo sharding di MongoDB.<\/p>\n<p>Prima di iniziare, \u00e8 importante notare che per configurare lo sharding in MongoDB \u00e8 necessario disporre di almeno tre server: uno per il server di configurazione, uno per l&#8217;istanza mongos e uno o pi\u00f9 per gli shard.<\/p>\n<div><\/div><kinsta-auto-toc list-style=\"decimal\" selector=\"h3\" count-number=\"6\" sub-toc=\"true\"><\/kinsta-auto-toc>\n<h3>1. Creare una directory dal server di configurazione<\/h3>\n<p>Per iniziare, creeremo una directory per i dati del server di configurazione. Questo pu\u00f2 essere fatto con il seguente comando sul primo server:<\/p>\n<pre><code class=\"language-bash\"> mkdir \/data\/configdb<\/code><\/pre>\n<h3>2. Avviare MongoDB in modalit\u00e0 Config<\/h3>\n<p>Successivamente, avvieremo MongoDB in modalit\u00e0 di configurazione sul primo server utilizzando il seguente comando:<\/p>\n<pre><code class=\"language-bash\">mongod --configsvr --dbpath \/data\/configdb --port 27019<\/code><\/pre>\n<p>Questo avvier\u00e0 il server di configurazione su <code>port 27019 <\/code> e memorizzer\u00e0 i suoi dati nella directory <strong>\/data\/configdb<\/strong>. Notate che stiamo utilizzando il flag <code>--configsvr<\/code> per indicare che questo server sar\u00e0 utilizzato come server di configurazione.<\/p>\n<h3>3. Avviare l&#8217;istanza Mongos<\/h3>\n<p>Il passo successivo consiste nell&#8217;avviare l&#8217;istanza mongos. Questo processo instrader\u00e0 le query verso gli shard corretti in base alla chiave di sharding. Per avviare l&#8217;istanza mongos, usiamo il seguente comando:<\/p>\n<pre><code class=\"language-bash\">mongos --configdb &lt;config server&gt;:27019<\/code><\/pre>\n<p>Sostituite <code>&lt;config server&gt;<\/code> con l&#8217;indirizzo IP o l&#8217;hostname del computer su cui \u00e8 in esecuzione il server di configurazione.<\/p>\n<h3>4. Connettersi all&#8217;istanza Mongos<\/h3>\n<p>Una volta che l&#8217;istanza di Mongos \u00e8 in esecuzione, possiamo collegarci ad essa utilizzando la shell di MongoDB. Questo pu\u00f2 essere fatto con il seguente comando:<\/p>\n<pre><code class=\"language-markdown\">mongo --host &lt;mongos-server&gt; --port 27017<\/code><\/pre>\n<p>In questo comando, <code>&lt;mongos-server&gt;<\/code> deve essere sostituito con il nome dell&#8217;host o l&#8217;indirizzo IP del server che esegue l&#8217;istanza mongos. In questo modo si aprir\u00e0 la shell di MongoDB, che ci permetter\u00e0 di interagire con l&#8217;istanza di mongos e di aggiungere server al cluster.<\/p>\n<p>Sostituite <code>&lt;mongos-server&gt;<\/code> con l&#8217;indirizzo IP o l&#8217;hostname della macchina su cui \u00e8 in esecuzione l&#8217;istanza di mongos.<\/p>\n<h3>5. Aggiungere server ai cluster<\/h3>\n<p>Ora che siamo connessi all&#8217;istanza mongos, possiamo aggiungere i server al cluster con il seguente comando:<\/p>\n<pre><code class=\"language-markdown\">sh.addShard(\"&lt;shard-server&gt;:27017\")<\/code><\/pre>\n<p>In questo comando, <code>&lt;shard-server&gt;<\/code> deve essere sostituito dal nome dell&#8217;host o dall&#8217;indirizzo IP del server che gestisce lo shard. Questo comando aggiunger\u00e0 lo shard al cluster e lo render\u00e0 disponibile all&#8217;uso.<\/p>\n<p>Ripetiamo questo passaggio per ogni shard che vogliamo aggiungere al cluster.<\/p>\n<h3>6. Abilitare lo sharding per il database<\/h3>\n<p>Infine, abilitiamo lo sharding per un database con il seguente comando:<\/p>\n<pre><code class=\"language-markdown\">sh.enableSharding(\"&lt;database&gt;\")<\/code><\/pre>\n<p>In questo comando, <code>&lt;database&gt;<\/code> deve essere sostituito dal nome del database che volete shardare. In questo modo si abilita lo sharding per il database specificato, permettendoci di distribuire i suoi dati su pi\u00f9 shard.<\/p>\n<p>E questo \u00e8 tutto! Seguendo questi passaggi, dovreste avere un cluster MongoDB shardato perfettamente funzionante e pronto a scalare orizzontalmente e a gestire carichi di traffico elevati.<\/p>\n<h2>Le best practice per lo sharding di MongoDB<\/h2>\n<p>Dopo aver creato il nostro cluster sharded, il monitoraggio e la manutenzione regolare del cluster sono essenziali per garantire <a href=\"https:\/\/kinsta.com\/it\/blog\/strumenti-apm\/\">prestazioni<\/a> ottimali. Alcune best practice per lo sharding di MongoDB includono:<\/p>\n<div><\/div><kinsta-auto-toc list-style=\"decimal\" selector=\"h3\" count-number=\"7\" sub-toc=\"true\"><\/kinsta-auto-toc>\n<h3>1. Determinare la giusta chiave shard<\/h3>\n<p>La chiave di shard \u00e8 un fattore critico dello sharding di MongoDB che determina la distribuzione dei dati tra gli shard. \u00c8 importante scegliere una chiave di shard che distribuisca uniformemente i dati tra gli shard e che supporti le query pi\u00f9 comuni. Dovreste evitare di scegliere una chiave di shard che provochi hotspot o una distribuzione non uniforme dei dati, in quanto ci\u00f2 pu\u00f2 causare problemi di prestazioni.<\/p>\n<p>Per scegliere la chiave shard giusta, analizzate i dati e i tipi di query che eseguirete e selezionate una chiave che soddisfi questi requisiti.<\/p>\n<h3>2. Pianificare la crescita dei dati<\/h3>\n<p>Quando configurate il vostro cluster sharded, pianificate la crescita futura iniziando con un numero di shard sufficiente a gestire il carico di lavoro attuale e aggiungendone altri se necessario. Assicuratevi che l&#8217;infrastruttura hardware e di rete sia in grado di supportare il numero di shard e la quantit\u00e0 di dati che prevedete di avere in futuro.<\/p>\n<h3>3. Usare un hardware dedicato per gli shard<\/h3>\n<p>Utilizzate un hardware dedicato per ogni shard per ottenere prestazioni e affidabilit\u00e0 ottimali. Ogni shard dovrebbe avere il proprio server o macchina virtuale, in modo da poter utilizzare tutte le risorse senza alcuna interferenza.<\/p>\n<p>L&#8217;utilizzo di hardware condivisi pu\u00f2 portare alla contesa delle risorse e al degrado delle prestazioni, con un impatto sull&#8217;affidabilit\u00e0 complessiva del sistema.<\/p>\n<h3>4. Usare i set di replica per i server shard<\/h3>\n<p>L&#8217;utilizzo di set di repliche per i server shard offre un&#8217;elevata disponibilit\u00e0 e tolleranza agli errori per il cluster sharded di MongoDB. Ogni set di replica dovrebbe avere tre o pi\u00f9 membri e ogni membro dovrebbe risiedere su una macchina fisica separata. Questa configurazione garantisce che il cluster shardato possa sopravvivere al guasto di un singolo server o di un membro del replica set.<\/p>\n<h3>5. Monitorare le prestazioni degli shard<\/h3>\n<p>Il monitoraggio delle prestazioni degli shard \u00e8 fondamentale per identificare i problemi prima che diventino gravi. Dovreste monitorare la CPU, la memoria, l&#8217;I\/O del disco e l&#8217;I\/O di rete di ogni server shard per assicurarvi che lo shard sia in grado di gestire il carico di lavoro.<\/p>\n<p>Per monitorare le prestazioni degli shard si possono utilizzare gli strumenti di monitoraggio integrati di MongoDB, come <a href=\"https:\/\/www.mongodb.com\/docs\/database-tools\/mongostat\/\" target=\"_blank\" rel=\"noopener noreferrer\">mongostat<\/a> e <a href=\"https:\/\/www.mongodb.com\/docs\/database-tools\/mongotop\/\" target=\"_blank\" rel=\"noopener noreferrer\">mongotop<\/a>, oppure strumenti di monitoraggio di terze parti, come Datadog, Dynatrace e Zabbix.<\/p>\n<h3>6. Pianificare il disaster recovery<\/h3>\n<p>La pianificazione del disaster recovery \u00e8 essenziale per mantenere l&#8217;affidabilit\u00e0 del proprio cluster sharded MongoDB. Dovreste avere un piano di disaster recovery che includa backup regolari, test dei backup per verificarne la validit\u00e0 e un piano per il ripristino dei backup in caso di guasto.<\/p>\n<h3>7. Usare lo sharding basato su hashed quando \u00e8 opportuno<\/h3>\n<p>Quando le applicazioni eseguono query basate su intervalli, lo sharding a intervalli \u00e8 vantaggioso perch\u00e9 le operazioni possono essere limitate a un numero minore di shard, per lo pi\u00f9 a un singolo shard. Per implementare questa soluzione \u00e8 necessario conoscere i dati e i modelli di query.<\/p>\n<p>L&#8217;hashed sharding garantisce una distribuzione uniforme delle letture e delle scritture. Tuttavia, non fornisce operazioni efficienti basate sul range.<\/p>\n<h2>Quali sono gli errori pi\u00f9 comuni da evitare durante lo sharding del database MongoDB?<\/h2>\n<p>Lo sharding di MongoDB \u00e8 una tecnica potente che pu\u00f2 aiutarvi a scalare il database in orizzontale e a distribuire i dati su pi\u00f9 server. Tuttavia, ci sono diversi errori comuni da evitare quando si esegue lo sharding del proprio database MongoDB. Di seguito elenchiamo alcuni degli errori pi\u00f9 comuni e come evitarli.<\/p>\n<div><\/div><kinsta-auto-toc list-style=\"decimal\" selector=\"h3\" count-number=\"7\" sub-toc=\"true\"><\/kinsta-auto-toc>\n<h3>1. Scegliere la chiave di sharding sbagliata<\/h3>\n<p>Una delle decisioni pi\u00f9 cruciali che prenderete al momento dello sharding del database MongoDB \u00e8 la scelta della chiave di sharding. La chiave di sharding determina il modo in cui i dati vengono distribuiti tra gli shard e la scelta di una chiave sbagliata pu\u00f2 causare una distribuzione dei dati non uniforme, hotspot e scarse prestazioni.<\/p>\n<p>Un errore comune \u00e8 quello di scegliere un valore di chiave di shard che aumenti solo per i nuovi documenti quando si utilizza uno sharding basato su un intervallo rispetto a uno sharding con hash. Ad esempio, un timestamp (naturalmente) o qualsiasi cosa che abbia un componente temporale come componente principale, come ObjectID (i primi quattro byte sono un timestamp).<\/p>\n<p>Se selezionate una chiave di shard, tutti gli inserimenti andranno al chunk con l&#8217;intervallo maggiore. Anche se continuate ad aggiungere nuovi shard, la capacit\u00e0 massima di scrittura non aumenter\u00e0 mai.<\/p>\n<p>Se intendete scalare la capacit\u00e0 di scrittura, provate a utilizzare una chiave shard basata su hash, che vi permetter\u00e0 di utilizzare lo stesso campo e di avere una buona scalabilit\u00e0 in scrittura.<\/p>\n<h3>2. Cercare di cambiare il valore della chiave shard<\/h3>\n<p>Le chiavi shard sono immutabili per un documento esistente, il che significa che non \u00e8 possibile cambiare la chiave. \u00c8 possibile effettuare alcuni aggiornamenti prima dello sharding, ma non dopo. Se provate a modificare la chiave shard per un documento esistente, l&#8217;errore sar\u00e0 il seguente:<\/p>\n<pre><code class=\"language-markdown\">cannot modify shard key's value fieldid for collection: collectionname<\/code><\/pre>\n<p>Potete rimuovere e reinserire il documento per rinnovare la chiave shard invece di provare a modificarla.<\/p>\n<h3>3. Mancato monitoraggio del cluster<\/h3>\n<p>Lo sharding introduce un&#8217;ulteriore complessit\u00e0 nell&#8217;ambiente del database, rendendo essenziale un attento monitoraggio del cluster. Il mancato monitoraggio del cluster pu\u00f2 causare problemi di prestazioni, perdita di dati e altri problemi.<\/p>\n<p>Per evitare questo errore, \u00e8 bene impostare degli strumenti di monitoraggio per tenere traccia delle metriche chiave come l&#8217;utilizzo della CPU, della memoria, dello spazio su disco e del traffico di rete. Dovreste anche impostare degli avvisi quando vengono superate determinate soglie.<\/p>\n<h3>4. Aspettare troppo a lungo per aggiungere un nuovo shard (sovraccarico)<\/h3>\n<p>Un errore comune da evitare quando si esegue lo sharding del database MongoDB \u00e8 aspettare troppo a lungo per aggiungere un nuovo shard. Quando uno shard si sovraccarica di dati o di query, pu\u00f2 causare problemi di prestazioni e rallentare l&#8217;intero cluster.<\/p>\n<p>Supponiamo di avere un cluster immaginario composto da 2 shard, con 20000 chunk (5000 considerati &#8220;attivi&#8221;), e di dover aggiungere un terzo shard. Questo terzo shard memorizzer\u00e0 un terzo dei chunk attivi (e dei chunk totali).<\/p>\n<p>La sfida consiste nel capire quando lo shard smette di aggiungere spese generali e diventa una risorsa. Dovremmo calcolare il carico che il sistema produrrebbe durante la migrazione dei chunk attivi al nuovo shard e quando sarebbe trascurabile rispetto al guadagno complessivo del sistema.<\/p>\n<p>Nella maggior parte degli scenari, \u00e8 relativamente facile immaginare che questa serie di migrazioni richieda ancora pi\u00f9 tempo su un insieme di shard sovraccarichi e che ci voglia molto pi\u00f9 tempo perch\u00e9 il nostro shard appena aggiunto superi la soglia e diventi un guadagno netto. Per questo motivo, \u00e8 meglio essere proattivi e aggiungere capacit\u00e0 prima che sia necessario.<\/p>\n<p>Le possibili strategie di mitigazione includono il monitoraggio regolare del cluster e l&#8217;aggiunta proattiva di nuovi shard in momenti di basso traffico, in modo da ridurre la competizione per le risorse. Si suggerisce di bilanciare manualmente i chunk &#8220;caldi&#8221; (a cui si accede pi\u00f9 spesso di altri) per spostare l&#8217;attivit\u00e0 sul nuovo shard pi\u00f9 rapidamente.<\/p>\n<h3>5. Risorse dei server di configurazione insufficienti<\/h3>\n<p>Se i server di configurazione non sono alimentati a dovere, possono verificarsi problemi di prestazioni e instabilit\u00e0. L&#8217;under-provisioning pu\u00f2 verificarsi a causa dell&#8217;insufficiente allocazione di risorse come CPU, memoria o storage.<\/p>\n<p>Questo pu\u00f2 causare prestazioni lente delle query, timeout e persino crash. Per evitare questo problema, \u00e8 essenziale allocare risorse sufficienti ai server di configurazione, soprattutto nei cluster pi\u00f9 grandi. Monitorare regolarmente l&#8217;utilizzo delle risorse dei server di configurazione pu\u00f2 aiutare a identificare i problemi di sottoprovvigionamento.<\/p>\n<p>Un altro modo per evitare questo problema \u00e8 utilizzare un hardware dedicato per i server di configurazione, piuttosto che condividere le risorse con altri componenti del cluster. Questo pu\u00f2 aiutare a garantire che i server di configurazione abbiano risorse sufficienti per gestire il loro carico di lavoro.<\/p>\n<h3>6. Mancato backup e ripristino dei dati<\/h3>\n<p>I backup sono essenziali per garantire che i dati non vadano persi in caso di guasto. La perdita di dati pu\u00f2 avvenire per vari motivi, tra cui guasti hardware, errori umani e attacchi malevoli.<\/p>\n<p>Se non si esegue il backup e il ripristino dei dati, questi possono andare persi e subire un&#8217;interruzione. Per evitare questo errore, \u00e8 necessario impostare una strategia di <a href=\"https:\/\/kinsta.com\/it\/blog\/come-effettuare-il-backup-del-database-mysql\/\">backup<\/a> e ripristino che includa backup regolari, backup di test e ripristino dei dati in un ambiente di test.<\/p>\n<h3>7. Mancato test del cluster shardati<\/h3>\n<p>Prima di distribuire il cluster shardato in produzione, \u00e8 necessario testarlo a fondo per assicurarsi che sia in grado di gestire il carico e le query previste. Il mancato collaudo del cluster sharded pu\u00f2 causare scarse prestazioni e crash.<\/p>\n<h2>MongoDB Sharding vs indici clusterizzati: qual \u00e8 il pi\u00f9 efficace per i dataset di grandi dimensioni?<\/h2>\n<p>Sia lo sharding che gli indici clusterizzati di MongoDB sono strategie efficaci per gestire grandi insiemi di dati. Ma hanno scopi diversi. La scelta dell&#8217;approccio giusto dipende dai requisiti specifici dell&#8217;applicazione.<\/p>\n<p>Lo sharding \u00e8 una tecnica di scalatura orizzontale che distribuisce i dati su molti nodi, rendendola una soluzione efficace per la gestione di grandi insiemi di dati con tassi di scrittura elevati. \u00c8 trasparente per le applicazioni e consente loro di interagire con MongoDB come se fosse un unico server.<\/p>\n<p>D&#8217;altra parte, gli indici clusterizzati migliorano le prestazioni delle query che recuperano i dati da grandi insiemi di dati, consentendo a MongoDB di individuare i dati in modo pi\u00f9 efficiente quando una query corrisponde al campo indicizzato.<\/p>\n<p>Quindi, quale dei due \u00e8 pi\u00f9 efficace per i dataset di grandi dimensioni? La risposta dipende dallo specifico caso d&#8217;uso e dai requisiti del carico di lavoro.<\/p>\n<p>Se l&#8217;applicazione richiede un&#8217;elevata velocit\u00e0 di scrittura e di interrogazione e deve scalare orizzontalmente, allora lo sharding di MongoDB \u00e8 probabilmente l&#8217;opzione migliore. Tuttavia, gli indici clusterizzati possono essere pi\u00f9 efficaci se l&#8217;applicazione ha un carico di lavoro pesante in lettura e richiede che i dati interrogati di frequente siano organizzati in un ordine specifico.<\/p>\n<p>Sia lo sharding che gli indici clusterizzati sono strumenti molto efficaci per <a href=\"https:\/\/kinsta.com\/it\/blog\/adminer\/\">gestire<\/a> grandi insiemi di dati in MongoDB. La chiave \u00e8 valutare attentamente i requisiti dell&#8217;applicazione e le caratteristiche del carico di lavoro per determinare l&#8217;approccio migliore per il caso d&#8217;uso specifico.<\/p>\n<h2>Riepilogo<\/h2>\n<p>Un cluster shardato \u00e8 una potente architettura in grado di gestire grandi quantit\u00e0 di dati e di scalare orizzontalmente per soddisfare le esigenze di applicazioni in crescita. Il cluster \u00e8 composto da shard, server di configurazione, processi mongos e applicazioni client e i dati sono partizionati in base a una chiave shard scelta con cura per garantire una distribuzione e un&#8217;interrogazione efficienti.<\/p>\n<p>Sfruttando la potenza dello sharding, le applicazioni possono ottenere un&#8217;elevata disponibilit\u00e0, migliori prestazioni e un uso efficiente delle risorse hardware. La scelta della giusta chiave di sharding \u00e8 fondamentale per una distribuzione uniforme dei dati.<\/p>\n<p><em>Cosa pensate di MongoDB e della pratica dello sharding dei database? C&#8217;\u00e8 qualche aspetto dello sharding che ritienete avremmo dovuto trattare? Fatecelo sapere nei commenti!<\/em><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Nel mondo di oggi incentrato sui dati, in cui il volume e la complessit\u00e0 dei dati stessi continuano a crescere a un ritmo senza precedenti, la &#8230;<\/p>\n","protected":false},"author":199,"featured_media":72077,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kinsta_gated_content":false,"_kinsta_gated_content_redirect":"","footnotes":""},"tags":[],"topic":[25883],"class_list":["post-72076","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","topic-strumenti-di-sviluppo-web"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v24.6 (Yoast SEO v24.6) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>MongoDB Sharding: la guida completa<\/title>\n<meta name=\"description\" content=\"MongoDB Sharding consente a MongoDB di eseguire query senza gravare sul server e suddividendo le raccolte.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/kinsta.com\/it\/blog\/mongodb-sharding\/\" \/>\n<meta property=\"og:locale\" content=\"it_IT\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Guida completa alla comprensione di MongoDB Sharding\" \/>\n<meta property=\"og:description\" content=\"MongoDB Sharding consente a MongoDB di eseguire query senza gravare sul server e suddividendo le raccolte.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/kinsta.com\/it\/blog\/mongodb-sharding\/\" \/>\n<meta property=\"og:site_name\" content=\"Kinsta\u00ae\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/kinstaitalia\/\" \/>\n<meta property=\"article:published_time\" content=\"2023-08-08T09:56:18+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-08-17T08:43:57+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/08\/mongodb-sharding.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1460\" \/>\n\t<meta property=\"og:image:height\" content=\"730\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Jeremy Holcombe\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:description\" content=\"MongoDB Sharding consente a MongoDB di eseguire query senza gravare sul server e suddividendo le raccolte.\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/08\/mongodb-sharding.jpg\" \/>\n<meta name=\"twitter:creator\" content=\"@Kinsta_IT\" \/>\n<meta name=\"twitter:site\" content=\"@Kinsta_IT\" \/>\n<meta name=\"twitter:label1\" content=\"Scritto da\" \/>\n\t<meta name=\"twitter:data1\" content=\"Jeremy Holcombe\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tempo di lettura stimato\" \/>\n\t<meta name=\"twitter:data2\" content=\"19 minuti\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/kinsta.com\/it\/blog\/mongodb-sharding\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/it\/blog\/mongodb-sharding\/\"},\"author\":{\"name\":\"Jeremy Holcombe\",\"@id\":\"https:\/\/kinsta.com\/it\/#\/schema\/person\/4eee42881d7b5a73ebb4f58dd5223b21\"},\"headline\":\"Guida completa alla comprensione di MongoDB Sharding\",\"datePublished\":\"2023-08-08T09:56:18+00:00\",\"dateModified\":\"2023-08-17T08:43:57+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/kinsta.com\/it\/blog\/mongodb-sharding\/\"},\"wordCount\":4112,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/it\/#organization\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/it\/blog\/mongodb-sharding\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/08\/mongodb-sharding.jpg\",\"inLanguage\":\"it-IT\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/kinsta.com\/it\/blog\/mongodb-sharding\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/kinsta.com\/it\/blog\/mongodb-sharding\/\",\"url\":\"https:\/\/kinsta.com\/it\/blog\/mongodb-sharding\/\",\"name\":\"MongoDB Sharding: la guida completa\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/it\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/kinsta.com\/it\/blog\/mongodb-sharding\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/it\/blog\/mongodb-sharding\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/08\/mongodb-sharding.jpg\",\"datePublished\":\"2023-08-08T09:56:18+00:00\",\"dateModified\":\"2023-08-17T08:43:57+00:00\",\"description\":\"MongoDB Sharding consente a MongoDB di eseguire query senza gravare sul server e suddividendo le raccolte.\",\"breadcrumb\":{\"@id\":\"https:\/\/kinsta.com\/it\/blog\/mongodb-sharding\/#breadcrumb\"},\"inLanguage\":\"it-IT\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/kinsta.com\/it\/blog\/mongodb-sharding\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"it-IT\",\"@id\":\"https:\/\/kinsta.com\/it\/blog\/mongodb-sharding\/#primaryimage\",\"url\":\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/08\/mongodb-sharding.jpg\",\"contentUrl\":\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/08\/mongodb-sharding.jpg\",\"width\":1460,\"height\":730},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/kinsta.com\/it\/blog\/mongodb-sharding\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/kinsta.com\/it\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Strumenti di Sviluppo Web\",\"item\":\"https:\/\/kinsta.com\/it\/argomenti\/strumenti-di-sviluppo-web\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Guida completa alla comprensione di MongoDB Sharding\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/kinsta.com\/it\/#website\",\"url\":\"https:\/\/kinsta.com\/it\/\",\"name\":\"Kinsta\u00ae\",\"description\":\"Soluzioni di hosting premium, veloci e sicure\",\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/it\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/kinsta.com\/it\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"it-IT\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/kinsta.com\/it\/#organization\",\"name\":\"Kinsta\",\"url\":\"https:\/\/kinsta.com\/it\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"it-IT\",\"@id\":\"https:\/\/kinsta.com\/it\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/12\/kinsta-logo.jpeg\",\"contentUrl\":\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/12\/kinsta-logo.jpeg\",\"width\":500,\"height\":500,\"caption\":\"Kinsta\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/it\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/kinstaitalia\/\",\"https:\/\/x.com\/Kinsta_IT\",\"https:\/\/www.instagram.com\/kinstahosting\/\",\"https:\/\/www.linkedin.com\/company\/kinsta\/\",\"https:\/\/www.pinterest.com\/kinstahosting\/\",\"https:\/\/www.youtube.com\/c\/Kinsta\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/kinsta.com\/it\/#\/schema\/person\/4eee42881d7b5a73ebb4f58dd5223b21\",\"name\":\"Jeremy Holcombe\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"it-IT\",\"@id\":\"https:\/\/kinsta.com\/it\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/0e17001f3bb37dbbe54fceef9bb547fa?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/0e17001f3bb37dbbe54fceef9bb547fa?s=96&d=mm&r=g\",\"caption\":\"Jeremy Holcombe\"},\"description\":\"Senior Editor at Kinsta, WordPress Web Developer, and Content Writer. Outside of all things WordPress, I enjoy the beach, golf, and movies. I also have tall people problems.\",\"sameAs\":[\"https:\/\/www.linkedin.com\/in\/jeremyholcombe\/\"],\"url\":\"https:\/\/kinsta.com\/it\/blog\/author\/jeremyholcombe\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"MongoDB Sharding: la guida completa","description":"MongoDB Sharding consente a MongoDB di eseguire query senza gravare sul server e suddividendo le raccolte.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/kinsta.com\/it\/blog\/mongodb-sharding\/","og_locale":"it_IT","og_type":"article","og_title":"Guida completa alla comprensione di MongoDB Sharding","og_description":"MongoDB Sharding consente a MongoDB di eseguire query senza gravare sul server e suddividendo le raccolte.","og_url":"https:\/\/kinsta.com\/it\/blog\/mongodb-sharding\/","og_site_name":"Kinsta\u00ae","article_publisher":"https:\/\/www.facebook.com\/kinstaitalia\/","article_published_time":"2023-08-08T09:56:18+00:00","article_modified_time":"2023-08-17T08:43:57+00:00","og_image":[{"width":1460,"height":730,"url":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/08\/mongodb-sharding.jpg","type":"image\/jpeg"}],"author":"Jeremy Holcombe","twitter_card":"summary_large_image","twitter_description":"MongoDB Sharding consente a MongoDB di eseguire query senza gravare sul server e suddividendo le raccolte.","twitter_image":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/08\/mongodb-sharding.jpg","twitter_creator":"@Kinsta_IT","twitter_site":"@Kinsta_IT","twitter_misc":{"Scritto da":"Jeremy Holcombe","Tempo di lettura stimato":"19 minuti"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/kinsta.com\/it\/blog\/mongodb-sharding\/#article","isPartOf":{"@id":"https:\/\/kinsta.com\/it\/blog\/mongodb-sharding\/"},"author":{"name":"Jeremy Holcombe","@id":"https:\/\/kinsta.com\/it\/#\/schema\/person\/4eee42881d7b5a73ebb4f58dd5223b21"},"headline":"Guida completa alla comprensione di MongoDB Sharding","datePublished":"2023-08-08T09:56:18+00:00","dateModified":"2023-08-17T08:43:57+00:00","mainEntityOfPage":{"@id":"https:\/\/kinsta.com\/it\/blog\/mongodb-sharding\/"},"wordCount":4112,"commentCount":0,"publisher":{"@id":"https:\/\/kinsta.com\/it\/#organization"},"image":{"@id":"https:\/\/kinsta.com\/it\/blog\/mongodb-sharding\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/08\/mongodb-sharding.jpg","inLanguage":"it-IT","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/kinsta.com\/it\/blog\/mongodb-sharding\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/kinsta.com\/it\/blog\/mongodb-sharding\/","url":"https:\/\/kinsta.com\/it\/blog\/mongodb-sharding\/","name":"MongoDB Sharding: la guida completa","isPartOf":{"@id":"https:\/\/kinsta.com\/it\/#website"},"primaryImageOfPage":{"@id":"https:\/\/kinsta.com\/it\/blog\/mongodb-sharding\/#primaryimage"},"image":{"@id":"https:\/\/kinsta.com\/it\/blog\/mongodb-sharding\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/08\/mongodb-sharding.jpg","datePublished":"2023-08-08T09:56:18+00:00","dateModified":"2023-08-17T08:43:57+00:00","description":"MongoDB Sharding consente a MongoDB di eseguire query senza gravare sul server e suddividendo le raccolte.","breadcrumb":{"@id":"https:\/\/kinsta.com\/it\/blog\/mongodb-sharding\/#breadcrumb"},"inLanguage":"it-IT","potentialAction":[{"@type":"ReadAction","target":["https:\/\/kinsta.com\/it\/blog\/mongodb-sharding\/"]}]},{"@type":"ImageObject","inLanguage":"it-IT","@id":"https:\/\/kinsta.com\/it\/blog\/mongodb-sharding\/#primaryimage","url":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/08\/mongodb-sharding.jpg","contentUrl":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/08\/mongodb-sharding.jpg","width":1460,"height":730},{"@type":"BreadcrumbList","@id":"https:\/\/kinsta.com\/it\/blog\/mongodb-sharding\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/kinsta.com\/it\/"},{"@type":"ListItem","position":2,"name":"Strumenti di Sviluppo Web","item":"https:\/\/kinsta.com\/it\/argomenti\/strumenti-di-sviluppo-web\/"},{"@type":"ListItem","position":3,"name":"Guida completa alla comprensione di MongoDB Sharding"}]},{"@type":"WebSite","@id":"https:\/\/kinsta.com\/it\/#website","url":"https:\/\/kinsta.com\/it\/","name":"Kinsta\u00ae","description":"Soluzioni di hosting premium, veloci e sicure","publisher":{"@id":"https:\/\/kinsta.com\/it\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/kinsta.com\/it\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"it-IT"},{"@type":"Organization","@id":"https:\/\/kinsta.com\/it\/#organization","name":"Kinsta","url":"https:\/\/kinsta.com\/it\/","logo":{"@type":"ImageObject","inLanguage":"it-IT","@id":"https:\/\/kinsta.com\/it\/#\/schema\/logo\/image\/","url":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/12\/kinsta-logo.jpeg","contentUrl":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/12\/kinsta-logo.jpeg","width":500,"height":500,"caption":"Kinsta"},"image":{"@id":"https:\/\/kinsta.com\/it\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/kinstaitalia\/","https:\/\/x.com\/Kinsta_IT","https:\/\/www.instagram.com\/kinstahosting\/","https:\/\/www.linkedin.com\/company\/kinsta\/","https:\/\/www.pinterest.com\/kinstahosting\/","https:\/\/www.youtube.com\/c\/Kinsta"]},{"@type":"Person","@id":"https:\/\/kinsta.com\/it\/#\/schema\/person\/4eee42881d7b5a73ebb4f58dd5223b21","name":"Jeremy Holcombe","image":{"@type":"ImageObject","inLanguage":"it-IT","@id":"https:\/\/kinsta.com\/it\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/0e17001f3bb37dbbe54fceef9bb547fa?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/0e17001f3bb37dbbe54fceef9bb547fa?s=96&d=mm&r=g","caption":"Jeremy Holcombe"},"description":"Senior Editor at Kinsta, WordPress Web Developer, and Content Writer. Outside of all things WordPress, I enjoy the beach, golf, and movies. I also have tall people problems.","sameAs":["https:\/\/www.linkedin.com\/in\/jeremyholcombe\/"],"url":"https:\/\/kinsta.com\/it\/blog\/author\/jeremyholcombe\/"}]}},"acf":[],"_links":{"self":[{"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/posts\/72076","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/users\/199"}],"replies":[{"embeddable":true,"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/comments?post=72076"}],"version-history":[{"count":5,"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/posts\/72076\/revisions"}],"predecessor-version":[{"id":72348,"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/posts\/72076\/revisions\/72348"}],"alternate":[{"embeddable":true,"hreflang":"en","title":"English","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/72076\/translations\/en"},{"embeddable":true,"hreflang":"it","title":"Italian","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/72076\/translations\/it"},{"embeddable":true,"hreflang":"pt","title":"Portuguese","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/72076\/translations\/pt"},{"embeddable":true,"hreflang":"fr","title":"French","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/72076\/translations\/fr"},{"embeddable":true,"hreflang":"de","title":"German","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/72076\/translations\/de"},{"embeddable":true,"hreflang":"ja","title":"Japanese","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/72076\/translations\/jp"},{"embeddable":true,"hreflang":"nl","title":"Dutch","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/72076\/translations\/nl"},{"embeddable":true,"hreflang":"es","title":"Spanish","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/72076\/translations\/es"},{"href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/72076\/tree"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/media\/72077"}],"wp:attachment":[{"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/media?parent=72076"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/tags?post=72076"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/topic?post=72076"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}