Lo sharding è efficace per le piccole collezioni?


11

Sembra che lo sharding del database sia fantastico se ho raccolte enormi. Cosa succede se ho molte collezioni di dimensioni adeguate? Diciamo che per 1 raccolta di 100.000.000 di documenti (commenti non molto grandi) lo sharding è efficace. È efficace anche per 10.000 raccolte con 10.000 documenti ciascuna?

(Penso che questa domanda sia ancora valida per i database orientati alle tabelle se si sostituiscono raccolte con tabelle e documenti con righe. Se possibile, vorrei conoscere la risposta teorica e la risposta nello specifico scenario MongoDB, se diverso dal teorico risposta.)

Risposte:


5

È efficace anche per 10.000 raccolte con 10.000 documenti ciascuna?

La maggior parte delle persone ha il problema della "raccolta di grandi dimensioni singola" e quindi lo sharding è chiaramente utile per ridurre il mal di testa nel bilanciare questi dati.

Tuttavia, quando hai 10.000 raccolte piccole, il tuo mal di testa probabilmente non sta "bilanciando i dati". Con così tante piccole raccolte il tuo problema è probabilmente relativo al monitoraggio di queste raccolte. A seconda delle dimensioni del documento, è possibile che non si verifichi nemmeno il limite inferiore affinché si verifichi effettivamente lo sharding.

Per raccolte molto piccole, è possibile utilizzare il comando movePrimary poco noto per gestire la posizione dei dati.

Ovviamente, l'altro modo di vedere questo è perché hai collezioni 10k? Una collezione non ha bisogno di oggetti omogenei e con raccolte da 10k la maggior parte deve essere generata. È possibile memorizzare diversi "tipi" di dati nella stessa raccolta, ridurre il numero di raccolte e quindi includere il tipo come parte della chiave di shard.


Grazie, stavo esattamente cercando di sapere se il meglio che potevo fare è liberarmi di queste tonnellate di collezioni e crearne una grande. Avevo tonnellate di raccolte prima perché avevo sentito una convinzione comune: "Le raccolte enormi sono dannose per te perché gli indici non si adattano alla RAM e sarà molto lentamente interrogarli e aggiornarli". Ma immagino che lo sharding sia stato creato per risolvere quel problema ... Grazie !!
João Pinto Jerónimo,

Onestamente, trovo che spesso puoi "imbrogliare" anche sugli indici. Se si dispone di due collezioni fooe barcon la stessa struttura di dati, è possibile unire nella bazraccolta e ignorare il _ids(in codice): { _id: "foo123" }, { _id: "bar123" }. Hai un indice più grande, ma hai solo un indice che include il tipo. Non è un requisito, solo "spunti di riflessione".
Gates VP,

4

Lo sharding MongoDB funziona suddividendo una raccolta in "blocchi" più piccoli e distribuendoli uniformemente su un numero di macchine. La dimensione predefinita del blocco, che è generalmente la più efficiente, è di 200 MB. Quindi, a meno che una raccolta non sia molto più grande di 200 MB, non si dividerà in grossi pezzi, e quindi non sarà ammissibile allo sharding, quindi non ci saranno benefici.

In generale, la condivisione dei dati su più macchine è un modo molto efficace per ridimensionare letture, scritture e query. Ottieni i vantaggi di più CPU, hard disk e memoria, lavorando in parallelo per leggere, scrivere ed elaborare i dati. Il ridimensionamento della memoria è particolarmente importante per MongoDB, dove le alte prestazioni sono molto sensibili all'adattamento dei dati in memoria.


La dimensione del blocco predefinito di FYI è 64 MB a partire da 1.8.
Gates VP,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.