Yanıtlar:
MongoDB varsayılan olarak güçlü bir şekilde tutarlıdır - eğer bir yazma yapıp sonra bir okuma yaparsanız, yazmanın başarılı olduğunu varsayarsak, az önce okuduğunuz yazının sonucunu her zaman okuyabilirsiniz. Bunun nedeni, MongoDB'nin tek ana sistem olması ve tüm okumaların varsayılan olarak birinciye gitmesidir. İsteğe bağlı olarak ikincil programlardan okumayı etkinleştirirseniz, MongoDB, güncel olmayan sonuçların okunmasının mümkün olduğu durumlarda sonunda tutarlı hale gelir.
MongoDB ayrıca replika kümelerinde otomatik yük devretme yoluyla yüksek kullanılabilirlik elde eder: http://www.mongodb.org/display/DOCS/Replica+Sets
Luccas gönderisine katılıyorum. MongoDB'nin CP / AP / CA olduğunu söyleyemezsiniz, çünkü hem veritabanı / sürücü yapılandırmasına hem de felaket türüne bağlı olarak aslında C, A ve P arasında bir değiş tokuştur : işte görsel bir özet ve aşağıda daha ayrıntılı açıklama.
Scenario | Main Focus | Description
---------------------------|------------|------------------------------------
No partition | CA | The system is available
| | and provides strong consistency
---------------------------|------------|------------------------------------
partition, | AP | Not synchronized writes
majority connected | | from the old primary are ignored
---------------------------|------------|------------------------------------
partition, | CP | only read access is provided
majority not connected | | to avoid separated and inconsistent systems
MongoDB, tek bir bağlantı veya doğru Yazma / Okuma Kaygı Seviyesi kullandığınızda son derece tutarlıdır ( Bu size yürütme hızına mal olur ). Bu koşulları karşılamadığınız anda (özellikle ikincil bir kopyadan okurken) MongoDB Sonunda Tutarlı hale gelir.
MongoDB, Replica-Setler aracılığıyla yüksek kullanılabilirlik elde ediyor . Birincil aşağı iner inmez veya başka bir yerde kullanılamaz hale gelir gelmez, ikinciller yeniden kullanılabilir olacak yeni bir birincil belirleyecektir. Bunun bir dezavantajı var: Eski birincil tarafından gerçekleştirilen, ancak ikincil dosyalara senkronize edilmeyen her yazma , kümeye yeniden bağlanır bağlanmaz geri alınacak ve bir geri alma dosyasına kaydedilecektir (eski birincil ikincildir. şimdi). Dolayısıyla bu durumda, kullanılabilirlik uğruna bir miktar tutarlılık feda edilir.
Söz konusu Replica-Setlerin kullanımı yoluyla MongoDB, bölüm toleransına da ulaşır: Bir Replica-Set'in sunucularının yarısından fazlası birbirine bağlı olduğu sürece, yeni bir birincil seçilebilir . Neden? İki ayrılmış ağın her ikisi de yeni bir birincil seçememesini sağlamak için. Birbirlerine yeterince sekonder bağlı olmadığında, onlardan okuyabilirsiniz (ancak tutarlılık sağlanamaz), ancak yazamazsınız. Set, tutarlılık adına pratik olarak kullanılamaz.
Bir itibariyle parlak yeni makale ve ayrıca bazı geldi Kyle tarafından müthiş deneyler bu alanda C veya A gibi MongoDB ve diğer veritabanları, etiketleme yaparken, dikkatli olmalı
Elbette CAP, veritabanında neyin hakim olduğunu çok fazla kelime olmadan takip etmeye yardımcı olur, ancak insanlar genellikle CAP'de C'nin atomik tutarlılık (doğrusallaştırılabilirlik) anlamına geldiğini unuturlar. Ve bu, sınıflandırmaya çalışırken anlamam için çok fazla acıya neden oldu. Yani, MongoDB'nin güçlü bir tutarlılık vermesinin yanı sıra, bu C olduğu anlamına gelmez. Bu şekilde, eğer bu sınıflandırmalar yapılırsa, şüphe bırakmamak için gerçekte nasıl çalıştığı konusunda daha fazla derinlik vermenizi öneririm.
Evet, kullanırken CP'dir safe=true
. Bu basitçe, verilerin ana diskte yapıldığı anlamına gelir. Bir kopyaya da ulaştığından emin olmak istiyorsanız, 'w = N' parametresine bakın; burada N, verilerin kaydedilmesi gereken kopya sayısıdır.
Mongo için P'den emin değilim. Durumu hayal edin:
Buradaki sorun, döküm dosyası boyutunun sınırlı olmasıdır ve uzun süre bir bölümünüz varsa verilerinizi sonsuza kadar kaybedebilirsiniz.
Olma ihtimalinin düşük olduğunu söyleyebilirsiniz - evet, birinin düşündüğünden daha yaygın olduğu bulutta olmadığı sürece.
Bu örnek, herhangi bir veri tabanına herhangi bir mektup atamadan önce çok dikkatli olmamın nedenidir. Çok fazla senaryo var ve uygulama mükemmel değil.
Mongo'nun sonraki sürümlerinde bu senaryonun ele alınıp alınmadığını bilen biri varsa lütfen yorum yapın! (Bir süredir olan her şeyi takip etmiyorum ..)
Mongodb asla ikincil olarak yazmaya izin vermez. İkincilden isteğe bağlı okumalara izin verir, ancak yazma işlemlerine izin vermez. Yani birincil seviyeniz düşerse, ikincil olana kadar yazamazsınız. CAP teoreminde Yüksek Erişilebilirliği bu şekilde feda edersiniz. Okumalarınızı yalnızca birincilden tutarak güçlü bir tutarlılığa sahip olabilirsiniz.
MongoDB, bir Bölüm olduğunda, Kullanılabilirlik yerine Tutarlılığı seçer. Bunun anlamı, bir bölüm (P) olduğunda, Kullanılabilirlik (A) yerine Tutarlılığı (C) seçmesidir.
Bunu anlamak için MongoDB'nin replika setinin nasıl çalıştığını anlayalım. Bir Çoğaltma Kümesinin tek bir Birincil düğümü vardır. Verileri teslim etmenin tek "güvenli" yolu, bu düğüme yazmak ve ardından bu verilerin kümedeki düğümlerin çoğuna işlenmesini beklemektir. (yazma gönderirken w = çoğunluk için bu bayrağı göreceksiniz)
Bölümleme, aşağıdaki gibi iki senaryoda gerçekleşebilir:
Temel olarak, bir bölüm olduğunda ve MongoDB'nin ne yapacağına karar vermesi gerektiğinde, Erişilebilirlik yerine Tutarlılığı seçecektir. Bu yazıları güvenli bir şekilde tamamlayabileceğine inanıncaya kadar sisteme yazımları kabul etmeyi bırakacaktır.
Mongodb, tutarlılık ve bölüm toleransı sağlar .
Dağıtılmış (NoSQL) veritabanları bağlamında bu, tutarlılık ve kullanılabilirlik arasında her zaman bir değiş tokuş olacağı anlamına gelir. Bunun nedeni, dağıtılmış sistemlerin her zaman zorunlu olarak bölümlere toleranslı olmalarıdır (yani, bölümlere toleranslı olmasaydı, dağıtılmış bir veritabanı olmazdı.)
Tutarlılık - Sistem sonunda tutarlı hale gelecektir. Veriler er ya da geç olması gereken her yere yayılacaktır, ancak sistem girdi almaya devam edecek ve bir sonrakine geçmeden önce her işlemin tutarlılığını kontrol etmeyecektir.
Kullanılabilirlik - Varsayılan olarak, Mongo DB İstemcisi (MongoDB sürücüsü), tüm okuma / yazma isteklerini lider / birincil düğüme gönderir. Bu, sistemi tutarlı kılar, ancak şu nedenlerle kullanılamaz hale getirir: - Bir lider kümeden ayrılırsa, yeni bir lider seçmesi birkaç saniye sürer. Yani, bu süre içindeki yazma ve okumalar için kullanılamaz hale getirilir.