NoSQL veritabanı tasarımı için en iyi yöntemler


33

NoSQL belge tabanlı bir veritabanı (MongoDB) kullanmaya yeni başladım ve veri tabanı tasarımı için en iyi uygulamaları merak ediyorum.

Mimarinin ilişkisel veritabanlarından farklı olması gerektiğini düşünüyorum. Hala normalleştirilmiş bir veritabanı mı hedeflemeliyim?

Örneğin, özel bir kullanım durumum var;

Kiralama geçmişine sahip bir kullanıcı var (adres dizisi), bu dizinin kullanıcı üzerinde bir dizi mi yoksa paylaşılan bir anahtarla ayrı bir koleksiyon mu olması gerekir?


Yabancı anahtar kullanmayın
dukeofgaming

SQL kullanmayın :-). Cidden, "NoSQL" size teknoloji hakkında başka bir şey söylüyor mu?

Bu iş parçacığının Stack Exchange veritabanı sitesinde olması gerektiğini düşünüyorum. Orada bu konuda daha fazla yardım bulabilirsin.
Luis Arriojas

Yanıtlar:


23

NoSQL veritabanı tasarımı için uygun yaklaşım bir DDD'dir ( Domain Driven Design ). RDBMS tasarlayan bazı insanlar için, NoSql Sql anti-kalıplarına benziyor ve bir DDD kapsamında değerlendirildiğinde daha mantıklı.

Adreslerin kullanımına bağlı olarak, onu kiralama geçmişi modelinizde / varlığınızda bir değer nesnesi olarak tanımlayabilirsiniz.

İşte NoSQL ile tasarıma dair düşünceleri giderebilecek bazı referanslar:


19

TL; DR

RDBMS'de normalleşme, ilişkisel paradigmanın güçlü yönlerinden yararlanmanıza izin verir.

NoSQL'deki denormalizasyon, NoSQL paradigmasının güçlü yönlerinden yararlanmanıza izin verir.

Uzun cevap

RDBMS harikadır çünkü benzersiz yapılandırılmış varlıkları (değiştirilebilir veya değil) ve birbirleriyle ilişkilerini modellemenizi sağlar. Bu, varlık düzeyinde çalışmak, özelliklerini güncellemek, başka bir tane eklemek, bir tane silmek, vb. İçin çok kolay olduğu anlamına gelir. Ancak, aynı zamanda sahiplerini içeren bir köpek, içinde yaşadıkları evlerin bulunduğu bir köpek vb. RDBMS size tüm bunları kolaylaştırmak için araçlar sunar. Sizin için katılacak, sizin için varlıklardaki atomik değişiklikleri ele alacak.

NoSQL veritabanları mükemmeldir çünkü yarı / yapılandırılmamış kümeleri ve dinamik varlıkları modellemenizi sağlar. Bu, sürekli değişen varlıkları, aynı öznitelikleri paylaşmayan varlıkları ve hiyerarşik kümeleri modellemek için çok kolaydır.

NoSql modellemesi için, varlıklar ve ilişkiler yerine hiyerarşi ve kümeler açısından düşünmeniz gerekir. Yani, kişi, kiralık adres ve aralarında bir ilişki yok. Her bir kişi için hangi kiralama adreslerini topladıklarını bildiren kiralık kayıtlarınız var.

Sormanız gerekir, birlikte hangi verileri değiştirmem gerekecek. Hangi veriler mantıksal olarak diğer verileri gruplandırıyor? Senin durumunda bir kişi iyi bir toplu gibi geliyor. Verinin geri kalanına yönelik mantıksal giriş noktası nedir.

NoSQL, diyelim ki, kendine ait başka şeyleri olan bir şeyi saklayın. Bana tüm şeylerin hiyerarşisini geri ver. İstediğim gibi değiştirmeme izin ver, şimdi tüm şey hiyerarşisini değiştirilenle değiştir. Sana verdiği tek şey bu. Neden faydalıdır? Sahip olduğunuz şey, her zaman bir bütün olarak etkileşime girdiğiniz şeylerin hiyerarşisi ise. Ya da kitlesel ölçeklemeniz gerekiyorsa.

RDBMS'in size sunduğu her şey, kodu ve şemanızı manuel olarak uygulamanız gerekir. Bir yığın topluluğa ihtiyacınız olursa, koda katılmanız gerekir. Bir topluluğun yalnızca bir kısmına ihtiyacınız varsa ayrıştırmanız gerekir. Yinelenen şeyleri istemiyorsanız benzersizliği kendiniz kontrol etmeniz gerekir. Agregalar vb. Arasında çalışırken kendi işlem mantığınızı uygulamanız gerekir.

İhtiyacınız olan her şeyle birlikte büyük bir masaya sahip olmak NoSql'e gitmenin yoludur. Atomisite sadece bu seviyede garanti edildiğinden ve performans da. İlişkilerinizi erken anlamak çok önemlidir. Bu denormalizasyon nedir.

RDBMS'de, denormalizasyon, DB'nizi etkin bir şekilde NoSQL'e saklar. Yani normalde bunun tam tersini, yani normalleşmeyi istiyorsunuz. Bunu yapmazsanız, bunun yerine NoSQL DB kullanıyor olmalısınız. İkisine de ihtiyacın yoksa.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.