Ho bisogno di memorizzare diversi miliardi di piccole strutture di dati (circa 200 byte ciascuna). Finora, la memorizzazione di ciascun elemento come documento separato sta funzionando bene, con Mongo che fornisce circa 10.000 risultati al secondo. Sto usando un hash da 20 byte come _id per ogni documento e un singolo indice sul campo _id. Nei test, questo funziona per set di dati con 5.000.000 di documenti.Strategie per ricerche veloci di miliardi di piccoli documenti in MongoDB
Nel funzionamento, faremo circa 10.000 richieste al secondo, aggiornando i documenti esistenti circa 1.000 volte al secondo e inserendo nuovi documenti forse 100 volte al secondo o meno.
Come possiamo gestire set di dati più grandi, quando non è possibile memorizzare un intero indice nella RAM? MongoDB funzionerà meglio se combiniamo diversi elementi in ogni documento - per una ricerca più rapida attraverso l'indice, ma più dati vengono restituiti in ogni query?
A differenza di altre domande su SO, non sono interessato solo a quanti dati possiamo inserire in Mongo. Può gestire chiaramente la quantità di dati che stiamo osservando. La mia preoccupazione è come possiamo massimizzare la velocità delle operazioni find
su enormi raccolte, data la RAM limitata.
Le nostre ricerche tendono ad essere raggruppate; circa 50.000 elementi soddisferanno circa il 50% delle query, ma il restante 50% verrà distribuito casualmente su tutti i dati. Possiamo aspettarci un guadagno in termini di prestazioni spostando il 50% nella propria collezione, al fine di mantenere sempre un indice più piccolo dei dati più utilizzati nella ram?
La riduzione della dimensione del campo _id da 20 byte a 8 byte ha un impatto significativo sulla velocità di indicizzazione di MnogoDB?
Dal momento che sembra che ci siano molti più documenti della RAM, ridurrei i documenti il più possibile per aumentare la quantità di dati che possono essere contenuti nella RAM. Ad esempio, assicurati che i nomi dei campi siano solo uno o due caratteri. Stai pianificando di sharding? Lo spostamento dei dati in una raccolta distinta sullo stesso server non cambierà l'utilizzo della RAM, poiché è comunque gestito dal sistema operativo. – WiredPrairie
Divideremo mentre i dati crescono. – Neil
Inserire i record più utilizzati in una raccolta diversa è solo un'idea, al fine di mantenere l'indice per questa raccolta più piccola nella RAM e cercare di evitare che venga scambiato. Penso che questo potrebbe essere ingenuo, ma non sono sicuro del perché o perché no. – Neil