Ich muss mehrere Milliarden kleine Datenstrukturen (jeweils etwa 200 Bytes) speichern. Bisher funktioniert das Speichern jedes Elements als separates Dokument gut, wobei Mongo etwa 10.000 Ergebnisse pro Sekunde liefert. Ich verwende einen 20-Byte-Hash als _id für jedes Dokument und einen einzelnen Index für das _id-Feld. Im Test funktioniert das für Datensätze mit 5.000.000 Dokumenten.Strategien für die schnelle Suche von Milliarden von kleinen Dokumenten in MongoDB
Im Betrieb werden wir etwa 10.000 Anfragen pro Sekunde machen, bestehende Dokumente etwa 1.000 Mal pro Sekunde aktualisieren und neue Dokumente vielleicht 100 Mal pro Sekunde oder weniger einfügen.
Wie können wir größere Datensätze verwalten, wenn wir nicht einen ganzen Index im RAM speichern können? Wird MongoDB besser funktionieren, wenn wir mehrere Elemente in jedes Dokument kombinieren - für eine schnellere Suche durch den Index, aber mehr Daten, die in jeder Abfrage zurückgegeben werden?
Im Gegensatz zu anderen Fragen zu SO bin ich nicht nur daran interessiert, wie viele Daten wir in Mongo stopfen können. Es kann die Datenmenge, die wir uns ansehen, klar verwalten. Meine Sorge ist, wie können wir die Geschwindigkeit von find
Operationen auf riesige Sammlungen, bei eingeschränktem RAM maximieren.
Unsere Suchen werden tendenziell geclustert sein; Etwa 50.000 Elemente werden ungefähr 50% der Abfragen erfüllen, die restlichen 50% werden jedoch zufällig auf alle Daten verteilt. Können wir einen Leistungszuwachs erwarten, indem wir diese 50% in ihre eigene Sammlung verschieben, um einen kleineren Index der am häufigsten verwendeten Daten immer in RAM zu behalten?
Würde die Reduzierung der Größe des Felds _id von 20 auf 8 Byte einen wesentlichen Einfluss auf die Indizierungsgeschwindigkeit von MnogoDB haben?
Da es sich anhört, als hätten Sie weit mehr Dokumente als RAM, würde ich die Dokumente so weit wie möglich verkleinern, um die Datenmenge zu erhöhen, die in den RAM passen kann. Stellen Sie sicher, dass Feldnamen nur aus einem oder zwei Zeichen bestehen. Planen Sie Sharding? Das Verschieben von Daten in eine bestimmte Sammlung auf demselben Server ändert nicht die RAM-Nutzung, da das Betriebssystem ohnehin verwaltet wird. – WiredPrairie
Wir werden sharding sein, wenn die Daten wachsen. – Neil
Es ist nur eine Idee, die am häufigsten verwendeten Datensätze in eine andere Sammlung zu stellen, um den Index für diese kleinere Sammlung im RAM zu behalten und zu verhindern, dass sie ausgelagert wird. Ich denke, das könnte naiv sein, aber ich bin mir nicht sicher warum oder warum nicht. – Neil