MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Как MongoDB сортира записи, когато не е посочен ред на сортиране?

Какъв е редът на сортиране по подразбиране, когато не е посочен нито един?

Вътрешният ред на сортиране по подразбиране (или естествен ред) е недефиниран подробности за изпълнението. Поддържането на реда е допълнителни разходи за машините за съхранение и API на MongoDB не изисква предвидимост извън изричното sort() или специалният случай на колекции с ограничен размер с ограничен размер, които имат свързани ограничения за използване. За типични работни натоварвания е желателно механизмът за съхранение да се опита да използва повторно наличното предварително разпределено пространство и да вземе решения за това как най-ефективно да съхранява данни на диск и в паметта.

Без никакви критерии за заявка, резултатите ще бъдат върнати от механизма за съхранение в естествен ред (известен още като в реда на намиране ). Редът на резултатите може да съвпада с реда на вмъкване, но това поведение не е гарантирано и не може да се разчита (освен колекциите с ограничени стойности).

Някои примери, които могат да повлияят на реда на съхранение (естествено):

  • WiredTiger използва различно представяне на документи на диска спрямо кеша в паметта, така че естественото подреждане може да се промени въз основа на вътрешни структури от данни.
  • Оригиналната MMAPv1 машина за съхранение (премахната в MongoDB 4.2) разпределя пространство за запис за документи въз основа на правилата за допълване. Ако даден документ надвишава текущо разпределеното пространство за запис, местоположението на документа (и естественото подреждане) ще бъде засегнато. Нови документи могат също да се вмъкват в хранилището, отбелязано като достъпно за повторна употреба поради изтрити или преместени документи.
  • Репликацията използва идемпотентен oplog формат за последователно прилагане на операциите за запис към членовете на набора от реплики. Всеки член на набора от реплики поддържа локални файлове с данни, които могат да варират в естествен ред, но ще имат същия резултат от данните, когато се прилагат актуализации на oplog.

Ами ако се използва индекс?

Ако се използва индекс, документите ще бъдат върнати в реда, в който са намерени (което непременно съответства на реда за вмъкване или I/O реда). Ако се използва повече от един индекс, тогава поръчката зависи вътрешно от това кой индекс първо идентифицира документа по време на процеса на премахване на дублирането.

Ако искате предвидим ред на сортиране, трябва включва изрично sort() с вашата заявка и имат уникални стойности за вашия ключ за сортиране.

Как колекциите с ограничени граници поддържат реда на вмъкване?

Изключението за внедряване, отбелязано за естествен ред в колекции с ограничени граници, се налага от техните специални ограничения за използване:документите се съхраняват в ред на вмъкване, но размерът на съществуващия документ не може да бъде увеличен и документите не могат да бъдат изтрити изрично. Подреждането е част от дизайна на колекцията с капачки, който гарантира, че най-старите документи първо „остаряват“.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Как да направите заявка с настройки на часовата зона в Mongodb

  2. пролетни данни - Mongodb - метод findBy за вложени обекти

  3. Реактивни хранилища на Spring Data с MongoDB

  4. Как да започнете с автоматизацията на базата данни

  5. Mongodb обобщава (брои) в множество полета едновременно