Örnek sorular
Mongodb Schema ModelingZorluk 1
Bir user document'ı bir preferences sub-document'ı gömüyor. Tek bir update, preferences.theme ve preferences.language alanlarını birlikte değiştiriyor. Hangi MongoDB garantisi bu yerleşimi yararlı kılar?
- aMongoDB her embedded alan için otomatik olarak bir index oluşturur
- bMongoDB her embedded alanı farklı bir shard'a replike eder
- cTek bir document'taki birden çok alanı güncelleyen yazma, document seviyesinde atomiktir✓
- dEmbedded sub-document'lar 16 MB BSON document limitinden muaftır
Açıklama:MongoDB, tek bir document üzerindeki yazma işleminin, işlem birden çok embedded alanı değiştirse bile atomik olmasını garanti eder. Birlikte değişmesi gereken değerleri tek document'ta tutmak bu nedenle multi-document transaction ihtiyacını önleyebilir. Embedding otomatik index oluşturmaz, alanları shard'lara dağıtmaz ve BSON boyut limitini aşmaz.
Mongodb Schema ModelingZorluk 1
MongoDB şema tasarımında "referencing" (referans verme) ne anlama gelir?
- aBir document'ın tam metnini her collection'da bir kez olacak şekilde iki kez saklamak
- bTamamen driver tarafından uygulama belleğinde yapılan,
$lookup içermeyen bir join kullanmak - cBaşka bir document'ın
_id'sini bir alan olarak saklamak ve gerektiğinde o document'ı ayrıca getirmek✓ - dBir alanı başka bir collection'da kullanılan adla eşleşecek şekilde yeniden adlandırmak
Açıklama:Referencing, ilişkili veriyi ayrı bir document/collection'da tutar ve o document'ın _id'sini (ya da başka bir tanımlayıcı alanı) saklayarak ona bağlanır; ilişkili veriyi getirmek için ek bir sorgu (ya da $lookup) gerekir — veriyi doğrudan gömmenin tersidir.
Mongodb Schema ModelingZorluk 2
Bir blogPost document'ının, neredeyse her zaman post ile birlikte okunan ve nadiren tek başına sorgulanan az sayıda comments (yorum) saklaması gerekiyor. Hangi yaklaşım en uygun?
- aYorumları blogPost document'ının içine bir array olarak göm✓
- bHer yorumu kendi ayrı üst düzey veritabanında, kendi bağlantısıyla sakla
- cHer yorumu ayrı bir
comments collection'ında _id ile referansla ve her okumada $lookup yap - dYorumları yalnızca harici bir full-text arama motorunda sakla, asla MongoDB'de değil
Açıklama:Küçük, sınırlı sayıda ve parent ile birlikte okunan bir ilişki (one-to-few) embedding'in klasik durumudur: ek bir sorgudan kaçınır ve birlikte kullanılan veriyi bir arada tutar. Referencing, küçük ve her zaman post ile okunan bir veri için gereksiz lookup ekler.
Mongodb Schema ModelingZorluk 2
Bir user document'ı teorik olarak o kullanıcının tüm orders (siparişler) verisini gömebilir, ama aktif tek bir kullanıcı yıllar içinde milyonlarca sipariş verebilir. Hangi tasarım daha güvenlidir?
- aTüm siparişleri user document'ına göm; MongoDB array'i şeffaf şekilde sayfalar
- bYalnızca kullanıcının en sevdiği 3 siparişi göm, geri kalanını sessizce at
- cSiparişleri göm ama bu tek collection için document boyutu limitini devre dışı bırak
- dSiparişleri referansla: her siparişi kendi collection'ında, kullanıcıya geri işaret eden bir
userId alanıyla sakla✓
Açıklama:Sınırsız büyüyen bir one-to-many ilişki referencing ile modellenmelidir: her sipariş kendi collection'ında, kullanıcıya geri referans veren bir userId alanıyla yaşar; böylece user document'ı küçük kalır ve siparişler normal şekilde sorgulanıp sayfalanabilir. MongoDB gömülü array'leri otomatik sayfalamaz ve document boyutu limiti devre dışı bırakılamaz.
Mongodb Schema ModelingZorluk 1
MongoDB'de tek bir BSON document'ın maksimum boyutu nedir?
- aVarsayılan WiredTiger sayfa boyutuyla eşleşen 1 MB
- bStorage engine'den bağımsız olarak zorlanan sabit bir limit olan 16 MB✓
- c64 MB, ama yalnızca array içeren document'lar için
- dSabit bir limit yoktur; kullanılabilir RAM'e bağlıdır
Açıklama:MongoDB her BSON document için sabit 16 MB'lık bir limit uygular; bu esasen document'ların ağ üzerinden verimli gönderilmesini sağlamak ve sınırsız büyümeyi caydırmak içindir. Bu limit sabittir ve storage engine ya da kullanılabilir belleğe bağlı değildir.
Mongodb Schema ModelingZorluk 2
Bir geliştirici tek bir document üzerindeki gömülü logs array'ine sürekli yeni öğe ekliyor ve sonunda bir update başarısız oluyor. En olası sebep nedir?
- aMongoDB varsayılan olarak array'leri 100 elemanla sınırlar
- b
logs alan adı rezervedir ve bir array içinde kullanılamaz - cUpdate, document'ın 16 MB'lık BSON boyut limitini aşmasına neden olacaktı✓
- dArray'ler document'ın ilk insert'inden sonra güncellenemez
Açıklama:Gömülü bir array'e sürekli ekleme yapmak tüm document'ı büyütür. MongoDB, document'ın 16 MB BSON limitini aşmasına neden olacak update'i reddeder; dolayısıyla limit üstü sürüm başarıyla saklanmaz. Bu, sınırsız array'lerin temel risklerinden biridir.