CAP teoremini (Tutarlılık, Kullanılabilirlik, Bölüm: iki tane seç) getirmeden "NoSQL" veritabanı hakkında bir konuşma yapamazsınız. Eğer MongoDB (Bölüm, Tutarlılık) ve CouchDB (Kullanılabilirlik, Bölüm) arasında demeniz gerekiyorsa, ilk olarak "Doğru verilere ihtiyacım var mı yoksa her zaman erişime ihtiyacım var mı?"
Bunlar yeni veritabanı edildi yapılmış bölümlenmiş olması. Ama ya ben yapmazsam ? Bir Anahtar / Değer, Sütun, Belge, ilişkisel bir veritabanı yerine herhangi bir veritabanına sahip olmak ve sadece bir sunucu örneği oluşturmak ve bunu hiç kırmamak için oldukça havalı olduğunu düşünürsem ne olur? Bu durumda, hem kullanılabilirliğe hem de tutarlılığa sahip olmaz mıydım? MongoDB'nin hiçbir şeyi kopyalaması gerekmez, bu yüzden kullanılabilir. Ve CouchDB'nin tek bir veri kaynağı olacaktır, bu yüzden oldukça tutarlı olacaktır.
Yani, bu durumda, MongoDB ve CouchDB'nin kullanım durumu açısından çok az farkı olacaktır? Tabii ki, performans, API ve diğerleri hariç, ancak bu PostgreSQL ve MySQL arasında seçim yapmak gibi temel olarak farklı iki gereksinim setine sahip olmaktan daha iyi olurdu.
Tam burada mıyım? Birden fazla örnek oluşturmadan AP veya CP veritabanını AC veritabanıyla değiştirebilir miyim? Yoksa özlediğim bir şey var mı?
Soruyu tersine soralım. İlişkisel bir veritabanı alırsam, MySQL diyelim ve bir master / slaves yapılandırmasına koyarsam ne olur? ACID işlemlerini kullanmıyorum Herhangi bir yazma işleminin slave ile hemen senkronize edilmesini istersem, bu onu bir CP veritabanı yapmaz mı? Peki, önceden tanımlanmış bazı aralıklarla senkronize edersem ve bir istemcinin eski verileri eski bir veriyi okuması önemli değildir. Bu onu bir AP veritabanı yapmaz mı? ACID uyumluluğundan vazgeçersem, ilişkisel modeli yine de bir bölümlenmiş veritabanı için kullanabileceğim anlamına gelmez mi?
Özünde: CAP teoreminde vazgeçmeye hazır olduğunuz şeyle ilgili ölçeklenebilirlik, temeldeki veri modelinden daha mı fazladır? İlişkisel bir model üzerinde ölçeklenebilirliği artıran her ne olursa olsun Sütun, Belge, Anahtar Değere sahip olmak? Bölme toleransı için sıfırdan tasarlanmış ilişkisel bir veritabanı tasarlayabilir miyiz? (Belki zaten var). NoSQL veritabanı ACID'sini uyumlu hale getirebilir miyiz?
Üzgünüz, çok soru var, ama son zamanlarda NoSQL veritabanı hakkında çok şey okudum ve bana bunları kullanmanın en büyük yararı, sadece bölüm, CAP yerine verilerinizin "şekline" daha iyi uymalarıdır. ve ASİT uyumluluğundan vazgeçmek. Sonuçta, herkesin onu bölümlendirmek için çok fazla veri yok. Verilerimi bölümlere ayırmayı düşünmeden önce ilişkisel modeli kullanmamanın bir performans / ölçeklenebilirlik yararı var mı ?