sql >> Databáze >  >> NoSQL >> MongoDB

Jak MongoDB třídí záznamy, když není zadáno žádné pořadí řazení?

Jaké je výchozí pořadí řazení, když není zadáno žádné?

Výchozí interní pořadí řazení (nebo přirozené pořadí) je nedefinováno detail implementace. Udržování objednávky představuje pro moduly úložiště další režii a rozhraní API MongoDB nenařizuje předvídatelnost mimo explicitní sort() nebo zvláštní případ omezených kolekcí s pevnou velikostí, které mají související omezení použití. Pro typickou pracovní zátěž je žádoucí, aby se modul úložiště pokusil znovu využít dostupný předem přidělený prostor a rozhodoval se o tom, jak nejefektivněji ukládat data na disk a do paměti.

Bez jakýchkoli kritérií dotazu budou výsledky vráceny modulem úložiště v přirozeném pořadí (také v pořadí, v jakém byly nalezeny ). Pořadí výsledků se může shodovat s objednávkou vložení, ale toto chování není zaručeno a nelze se na něj spolehnout (kromě omezených sbírek).

Některé příklady, které mohou ovlivnit (přirozené) pořadí úložiště:

  • WiredTiger používá jinou reprezentaci dokumentů na disku než mezipaměť v paměti, takže přirozené uspořádání se může změnit na základě vnitřních datových struktur.
  • Původní úložný modul MMAPv1 (odstraněný v MongoDB 4.2) přiděluje záznamový prostor pro dokumenty na základě pravidel odsazení. Pokud dokument překročí aktuálně přidělený záznamový prostor, bude ovlivněno umístění dokumentu (a přirozené uspořádání). Nové dokumenty lze také vkládat do úložiště označeného jako dostupné pro opětovné použití kvůli smazaným nebo přesunutým dokumentům.
  • Replikace používá idempotentní formát oplog pro konzistentní provádění operací zápisu napříč členy sady replik. Každý člen sady replik uchovává místní datové soubory, které se mohou lišit v přirozeném pořadí, ale při použití aktualizací oplogu budou mít stejný datový výsledek.

Co když je použit index?

Pokud je použit index, budou dokumenty vráceny v pořadí, v jakém byly nalezeny (což nutně neodpovídá pořadí vložení nebo pořadí I/O). Pokud se použije více než jeden index, pak pořadí interně závisí na tom, který index jako první identifikoval dokument během procesu deduplikace.

Pokud chcete předvídatelné pořadí řazení, musíte obsahovat explicitní sort() s vaším dotazem a mít jedinečné hodnoty pro klíč řazení.

Jak omezené sbírky udržují pořadí vložení?

Výjimka implementace zaznamenaná pro přirozené pořadí v omezených kolekcích je vynucena jejich zvláštními omezeními použití:dokumenty jsou uloženy v pořadí vložení, ale velikost stávajícího dokumentu nelze zvětšit a dokumenty nelze explicitně odstranit. Řazení je součástí designu omezené kolekce, který zajišťuje, že nejstarší dokumenty „stárnou“ jako první.



  1. Mongo převede všechna číselná pole, která jsou uložena jako řetězec

  2. MongoDB Java Inserting Throws org.bson.codecs.configuration.CodecConfigurationException:Nelze najít kodek pro třídu io.github.ilkgunel.mongodb.Pojo

  3. Jak vynutit cizí klíče v databázích NoSql (MongoDB)?

  4. MongoDB C# Query Pole objektů, které obsahují hodnotu vlastnosti