MySQL üzerinde mongodb gibi bir nosql veritabanı ne zaman kullanılır?


13

Nosql veritabanları kavramında yeniyim ve hiç kullanmadım. Okuduğum ve anladığım kadarıyla, veriler arasında referanslar yapamazsanız, yabancı anahtar kavramı yoksa, özellikle nasıl yararlı olabileceğini göremiyorum.

'Bu kullanıcının gönderdiği tüm yorumları bul', 'bir albüm varlığına ait tüm fotoğrafları bul' vb. Gibi basit bir şeyi nasıl sorgulayabilirim?

Nosql sistemleri statik ilişkisel veri modelinden uzaklaşıyor, ancak yine de bu tür referansları izlemenize izin veriyor, sorgularda kullanabileceğiniz yabancı anahtarlara benzer bir şey var mı?

Yanıtlar:


19

Genel Kullanım Alanları

  • Sistemi yaptığınız sırada açıkça tanımlanmamış veri yapılarınız varsa. Örneğin, kullanıcı ayarlarını nosql'de tutma eğilimindeyim. Başka bir örnek, kullanıcıların çalışma zamanında alan ekleyebilmeleri gereken bir sistemdi - RDBMS'de çok acı verici ve NoSQL'de bir esinti.

  • Model yapınız büyük ölçüde bir veya birkaç model nesnesi etrafında ortalanmışsa ve çoğu ilişki aslında ana model nesnelerinin alt nesneleriyse. Bu durumda, gerçek birleştirmelere oldukça az ihtiyaç duyacağınızı göreceksiniz. Temas yönetim sisteminin örneğin nosql'de oldukça güzel bir şekilde uygulanabileceğini buldum. Bir kişinin birden fazla adresi, telefonu ve e-postası olabilir. Her birini ayrı bir masaya koymak yerine, hepsi aynı modelin bir parçası haline gelir ve bir kişi nesneniz vardır.

  • Verilerinizi RDBMS tarafından genellikle gerekli olan tek bir yekpare sunucuya sahip olmak yerine birden çok sunucuda kümelemekten faydalanmak istiyorsanız.

  • Önbelleğe almak. Ana veritabanınız olarak RDBMS'ye bağlı kalmak isteseniz bile, sorgu sonuçlarını önbelleğe almak veya sayaçlar gibi verileri tutmak için NoSQL veritabanı kullanmak yararlı olabilir.

  • Belgeleri saklama. Tutarlı belgeleri saklamak istiyorsanız, bir veritabanında bazı NoSQL veritabanları (MongoDB gibi) bunları saklamakta uzmanlaşmıştır.

Katılmaya ne dersiniz?

Dürüst olmak gerekirse, hiçbir katılma ilk başta benim için oldukça korkutucu geliyordu. Ancak işin püf noktası SQL'de düşünmeyi bırakmaktır. Uygulamanızı çalıştırırken bellekte bulunan nesneyi düşünmeniz gerekir. Bunlar, az çok NoSQL veritabanına alan olarak kaydedilmelidir.

Tam nesne grafiğinizi, alt nesnelerle depolayabildiğiniz için, birleştirme gereksiniminin çoğu ortadan kaldırılır. Ve ihtiyacınız olanı bulursanız, mermiyi ısırmanız ve her iki nesneyi de almanız ve uygulama kodunuza katılmanız gerekir.

Neyse ki, şemanızı doğru ayarladıysanız, çoğu sürücü sizin için katılmayı yapabilir.

Daha fazla okumak için aslında Martin Fowler'ı tavsiye ederim .


2

Yapısı, ilişkileri ve özellikleri henüz bilinmeyen ve analize tabi olmayan verileri kaydetmek için böyle bir veritabanını bir projenin planlama aşamalarında (geliştirmeden önce, hatta tasarımdan önce) kesinlikle kullanırım. Bundan sonra her şeyi ilişkisel bir modele uydurmaya çalışırdım.


2
Ne? ... Neden? ...
Robert Harvey

Dolayısıyla, pratikte, örnek mysql'de tipik ad, e-posta vb. İle kullanıcı bilgileri gibi çok fazla değişmeyeceğini bildiği veriler için bir ilişki modeli kullanılabilir. Daha sonra bunu, kullanıcı etkinlik günlükleri gibi yapılandırılmamış, düzensiz verileri işlemek için bir nosql veritabanıyla birlikte kullanın. Bir çeşit bölünmüş sorumluluk. ? Yoksa bir nosql veritabanı ile başlayıp her şey ayarlandıktan sonra ilişkisel bir modele tam bir geçiş gerçekleştirmeyi mi önerdiniz?
akomada

Analiz başlamadan önce zaten veriye sahip olduğunuz bir senaryoda (diyelim ki, sensörlerin zaten verileri püskürttüğü mevcut bir fabrikayı kontrol eden yazılımı yeniden yazmak için çağrılırsınız) hemen bir nosql veritabanındaki verileri yakalamaya başlarım, ve sonra mümkünse, onu ilişkisel bir modele sığdırmaya çalışırdım. Mümkünse nosql ile devam edeceğim.
Mike Nakis

0

Bazı durumlarda, yabancı anahtarlara ihtiyacınız olmayacaktır. Örneğin:

Bu kullanıcının gönderdiği tüm yorumları bul

commentsdokümanın bir kullanıcıya karşılık gelen kısmını yüklemek kadar basit olabilir . Buna denormalizasyon denir : birleştirme ile iki set yerine, bir belgeniz var ve ihtiyacınız olan her şey belgenin içinde. Bir sorgu, birleştirme yok, daha iyi performans .

Ancak bazı durumlarda bu, veri çoğaltmasına neden olabilir, bu nedenle birinden başka bir belgeye bağlantı vermek uygun olabilir. Bu durumda, MongoDB normalizasyonu, yabancı anahtar ve birleştirme , Veritabanı Referansları sayfası ve özellikle DBRefs özelliği ile ilgilenebilirsiniz.

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.