Hiçbiri belirtilmediğinde varsayılan sıralama düzeni nedir?
Varsayılan dahili sıralama düzeni (veya doğal düzen ), tanımlanmamış bir uygulama ayrıntısıdır. Siparişin sürdürülmesi, depolama motorları için fazladan ek yüktür ve MongoDB'nin API'si, ilişkili kullanım kısıtlamaları olan sort()sabit boyutlu sınırlı koleksiyonların açık veya özel bir durumu dışında öngörülebilirliği zorunlu kılmaz . Tipik iş yükleri için, depolama motorunun önceden tahsis edilmiş mevcut alanı yeniden kullanmaya çalışması ve verilerin diskte ve bellekte en verimli şekilde nasıl depolanacağına ilişkin kararlar vermesi arzu edilir.
Herhangi bir sorgu kriteri olmaksızın, sonuçlar depolama motoru tarafından doğal sırayla (diğer bir deyişle bulundukları sırayla ) döndürülür . Sonuç sırası, kampanya siparişiyle çakışabilir ancak bu davranış garanti edilmez ve güvenilemez (sınırlı koleksiyonlar dışında).
Depolama (doğal) düzenini etkileyebilecek bazı örnekler:
- WiredTiger, diskteki belgelerin bellek içi önbelleğe göre farklı bir temsilini kullanır, bu nedenle doğal sıralama, dahili veri yapılarına bağlı olarak değişebilir.
- Orijinal MMAPv1 depolama motoru (MongoDB 4.2'de kaldırılmıştır) doldurma kurallarına göre belgeler için kayıt alanı ayırır. Bir belge, halihazırda ayrılmış kayıt alanını aşarsa, belge konumu (ve doğal sıralama) etkilenecektir. Silinen veya taşınan belgeler nedeniyle yeniden kullanıma uygun olarak işaretlenmiş depoya yeni belgeler de eklenebilir.
- Çoğaltma, yazma işlemlerini çoğaltma kümesi üyeleri arasında tutarlı bir şekilde uygulamak için bir idempotent oplog biçimi kullanır . Her bir çoğaltma kümesi üyesi, doğal sırayla değişebilen yerel veri dosyalarını korur, ancak oplog güncellemeleri uygulandığında aynı veri sonucuna sahip olur.
Ya bir dizin kullanılıyorsa?
Bir dizin kullanılırsa, belgeler bulundukları sırayla iade edilir (bu, ekleme sırası veya G / Ç sırasıyla mutlaka eşleşir). Birden fazla indeks kullanılırsa, sıralama dahili olarak, tekilleştirme işlemi sırasında dokümanı ilk olarak hangi indeksin tanımladığına bağlıdır.
Tahmin edilebilir bir sıralama düzeni istiyorsanız , sorgunuza açık bir şekilde eklemeniz ve sıralama anahtarınız için benzersiz değerlere sahip olmanız gerekirsort() .
Sınırlı koleksiyonlar, ekleme sırasını nasıl korur?
Sınırlı koleksiyonlarda doğal düzen için belirtilen uygulama istisnası, özel kullanım kısıtlamaları tarafından uygulanır: belgeler ekleme sırasına göre saklanır ancak mevcut belge boyutu artırılamaz ve belgeler açıkça silinemez. Sıralama, en eski belgelerin ilk önce "eskimesini" sağlayan sınırlı koleksiyon tasarımının bir parçasıdır.