Veri

C# ile MongoDB okumaları: projection, sıralama ve sayfalama

Filtre doğru olsa da bir MongoDB okuması yanlış şekilde, belirsiz sırada veya sınırsız veriyle dönebilir. Nick Cosentino, MongoDB.Driver 3.12.0 üzerinden typed projection, benzersiz tie-breaker'lı sıralama, offset sayfalama ve compound continuation token ile okumayı daraltmayı anlatıyor. Yazı, sık tekrarlanan filtre anlatımını atlayıp "ne dönecek, hangi sırada, sonraki istek nasıl devam edecek" sorularına odaklanıyor.

Yayın tarihi
Okuma süresi
12 dk okuma
agent çalıştırması #26
agent çalıştırması #26
Orijinale git devleader.ca

Bu haberi bildir

Özette bir hata mı var, ya da bu içeriğin sahibi misin? Mesajın doğrudan bana e-posta olarak gelir.

Mesaj türü

Kilit noktalar

  • Projection okuma şeklinin parçası: sadece gösterilen alanları değil, sonraki sayfaya devam için gereken boundary alanlarını da (Id, Sequence) seçin
  • Azalan sıralamada benzersiz bir tie-breaker (_id) ekleyin; devam filtresinde iki alanın yönünü de aynı tutun
  • Skip/Limit tabanlı offset sayfalama büyüyen offset'te önceki sonuçları işler ve araya ekleme/silmede kayar
  • Küçük projection index coverage demek değil; gerçek plan ve deploy edilmiş index'lerle doğrulayın
  • Continuation token filtresi, sıralama modu ve değer tipleriyle birlikte anlam kazanır; base müşteri filtresini onunla değiştirmeyin, birleştirin
  • Limit dönen doküman sayısını sınırlar, sunucunun incelediği doküman sayısını garanti etmez

Filtreden sonra MongoDB okumasının üç ayrı parçası var: ne dönecek, hangi sırada ve ne kadar. MongoDB.Driver 3.12.0'daki expression tabanlı Project overload'u IFindFluent<TDocument, TNewProjection> döner; böylece bir özet tipi saklanan doküman tipinin yerine geçebilir. Ancak projection ile gelen kısmi nesne write modeli yerine kullanılmamalı, küçük bir anonymous tip de index coverage kanıtı sayılmamalı ve eksik alanlar varsayılan CLR değerleriyle gelebilir.

Sıralamada benzersiz bir tie-breaker şart: azalan Sequence tek başına eşit değerleri çözmez, bu yüzden örnekte azalan _id ile birleştiriliyor ve continuation filtresinde iki yön de tekrarlanıyor. Offset sayfalama numaralandırması kolay olsa da offset büyüdükçe sunucu önceki sonuçları işler ve araya giren dokümanlarla kayar; bu yüzden bağımsız istekler arasında snapshot garantisi yok.

Gerçek dünyada kullanımı

  • Sayfa numarasıyla gezinen bir sipariş geçmişi ekranı için Skip/Limit ile sınırlı okuma
  • Büyük müşteri koleksiyonlarında sonsuz kaydırma yapan bir liste için compound boundary ve continuation token
  • Sadece özet alan döndüren bir dashboard endpoint'inde tam doküman yerine typed projection kullanmak
  • Yüksek hacimli bir arka plan işinde ToListAsync yerine cursor üzerinden parça parça işleme

Neden önemli

Doğru filtre tek başına doğru endpoint üretmiyor; projection, benzersiz sıralama ve sınırlı sayfalama birlikte tasarlanmazsa API gereksiz alan döndürür ve sayfa sınırları kayar.

Bu özet, Nick Cosentino (Dev Leader) üzerindeki orijinal yazıdan agent tarafından üretildi. Yazının tamamı ve tüm hakları ilgili yazara/yayıncıya aittir. Orijinal yazıya git

Benzer haberler

Geri bildirim

Bir hata mı buldun, bir fikrin mi var? Yazdığın mesaj doğrudan bana e-posta olarak gelir.

Mesaj türü