Lassen Sie mich zunächst die Frage mit meinem Verständnis beginnen, wie MongoDb Daten auf der Festplatte speichert: Wenn Sie also eine Datenbank in Mongodb erstellen, wird eine große Datei mit dem Namen <databasename>.0
und in dieser Datei Bereiche zugewiesen, die zusammenhängende Bereiche sind, die Daten für eine bestimmte Datei entsprechen Sammlung oder bestimmter Index.
Sobald diese Datendatei gefüllt ist, wird eine neue Datei mit dem Namen erstellt <databasename>.1
und auf ähnliche Weise gefüllt . Daher ist es sinnvoll anzunehmen, dass sich die zuletzt in eine bestimmte Datenbank eingefügten Daten in der Datei mit der höchsten Nummer befinden (und meine Leistungstests bestätigen dies).
Ich kann jedoch nicht sehen, wie dies für Indizes zutreffen könnte. Da es sich um einen bTree handelt, erscheint es nicht möglich / sinnvoll, diesen bTree auf dieselbe Weise über Dateien zu verteilen. Während Mongo die Wartung für einen Index durchführt, lebt der gesamte Index in einem Ausmaß, bis er über ihn hinauswächst. An diesem Punkt wird er in die aktuelle (am höchsten nummerierte Datendatei) verschoben.
Dies ist für mich wichtig geworden, da es beim Starten einer Datenbank über einen Amazon EBS-Snapshot einen enormen Aufwand für das Aufrufen dieser Datendateien gibt, bis sich das Volume erwärmt. Ich interessiere mich nur für eine Teilmenge der neuesten N Dokumente aus einer Sammlung. Wenn ich sicher sein könnte, dass ich nur die neuesten Datendateien benötige, könnte ich diese Dateien vorab starten, indem ich sie nacheinander lese, bevor ich mongod starte.