MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Wie sortiert MongoDB Datensätze, wenn keine Sortierreihenfolge angegeben ist?

Was ist die Standard-Sortierreihenfolge, wenn keine angegeben ist?

Die standardmäßige interne Sortierreihenfolge (oder natürliche Reihenfolge) ist undefiniert Ausführungsdetails. Die Aufrechterhaltung der Ordnung bedeutet zusätzlichen Overhead für Speicher-Engines, und die API von MongoDB verlangt keine Vorhersagbarkeit außerhalb eines expliziten sort() oder der Sonderfall von begrenzten Sammlungen fester Größe, denen Nutzungsbeschränkungen zugeordnet sind. Für typische Workloads ist es wünschenswert, dass die Speicher-Engine versucht, verfügbaren vorab zugewiesenen Speicherplatz wiederzuverwenden und Entscheidungen darüber zu treffen, wie Daten am effizientesten auf der Festplatte und im Arbeitsspeicher gespeichert werden.

Ohne Abfragekriterien werden die Ergebnisse von der Speicher-Engine in natürlicher Reihenfolge (auch bekannt als in der Reihenfolge, in der sie gefunden werden) zurückgegeben ). Die Reihenfolge der Ergebnisse kann mit der Reihenfolge der Einfügungen übereinstimmen, aber dieses Verhalten ist nicht garantiert und nicht verlässlich (abgesehen von begrenzten Sammlungen).

Einige Beispiele, die die (natürliche) Speicherreihenfolge beeinflussen können:

  • WiredTiger verwendet eine andere Darstellung von Dokumenten auf der Festplatte als im In-Memory-Cache, daher kann sich die natürliche Reihenfolge basierend auf internen Datenstrukturen ändern.
  • Die ursprüngliche MMAPv1-Speicher-Engine (entfernt in MongoDB 4.2) weist Dokumenten Speicherplatz basierend auf Füllregeln zu. Wenn ein Dokument den aktuell zugewiesenen Datensatzbereich überschreitet, wird die Position des Dokuments (und die natürliche Reihenfolge) beeinflusst. Neue Dokumente können auch in den Speicher eingefügt werden, der aufgrund gelöschter oder verschobener Dokumente zur Wiederverwendung als verfügbar gekennzeichnet ist.
  • Die Replikation verwendet ein idempotentes Oplog-Format, um Schreibvorgänge konsistent auf Replikatsatzmitglieder anzuwenden. Jedes Replikatsatzmitglied verwaltet lokale Datendateien, die in natürlicher Reihenfolge variieren können, aber das gleiche Datenergebnis haben, wenn Oplog-Aktualisierungen angewendet werden.

Was ist, wenn ein Index verwendet wird?

Wenn ein Index verwendet wird, werden die Dokumente in der Reihenfolge zurückgegeben, in der sie gefunden wurden (was notwendigerweise der Einfügereihenfolge oder der E/A-Reihenfolge entspricht). Wenn mehr als ein Index verwendet wird, hängt die Reihenfolge intern davon ab, welcher Index das Dokument zuerst während des Deduplizierungsprozesses identifiziert hat.

Wenn Sie eine vorhersehbare Sortierreihenfolge wollen, müssen Sie fügen Sie ein explizites sort() ein mit Ihrer Abfrage und haben eindeutige Werte für Ihren Sortierschlüssel.

Wie wird die Anzeigenreihenfolge bei begrenzten Sammlungen beibehalten?

Die Implementierungsausnahme, die für die natürliche Reihenfolge in begrenzten Sammlungen angegeben ist, wird durch ihre speziellen Verwendungsbeschränkungen erzwungen:Dokumente werden in der Reihenfolge der Einfügung gespeichert, aber die Größe vorhandener Dokumente kann nicht erhöht und Dokumente können nicht explizit gelöscht werden. Die Bestellung ist Teil des begrenzten Sammlungsdesigns, das sicherstellt, dass die ältesten Dokumente zuerst "veraltet" werden.