NoSQL NoSQL Kullanın veya NESQL Kullanılırsa [kapalı]


252

Tüm hype ile bunun ne zaman kullanılacağı hakkında güvenilir bilgi bulmak gerçekten zor görünüyor. Bu yüzden aşağıdaki soruları soruyorum ve bunlar önceden gerçekten aptalca sorularsa özür dilerim:

  1. Kullanıcı verileri için NoSQL kullanmalı mıyım? Örneğin profiller, kullanıcı adları + şifreler vb.
  2. Önemli içerikler için NoSQL kullanmalı mıyım? Makaleler, blog yazıları, ürün envanteri vb.

Hayır varsayıyorum? Ve NoSQL'in sadece veri kaybetmenin uygun olduğu hızlı erişilebilir şeyler için olduğunu hissediyorum. Ama aynı zamanda NoSQL uygulamalarının veri kaybını önlemek için yerleşik yedekliliğe sahip olduğunu da okudum.

Ayrıca yukarıdaki 2 örnek kötü ise, NoSQL kullanacağım özel iş kullanım durumları verebilir misiniz? Çok fazla genel açıklama görüyorum ama gerçek dünyadan çok fazla örnek göremiyorum. Aklıma gelen tek şey kullanıcıdan kullanıcıya mesajlaşma ve analitik.

Teşekkürler!

Yanıtlar:


182

Bu gerçekten de "bağımlı" bir soru. Bazı genel noktalar:

  • NoSQL genellikle yapılandırılmamış / "şematik" veriler için iyidir - genellikle şemanızı açıkça tanımlamanıza gerek yoktur ve herhangi bir tören olmadan yeni alanlar ekleyebilir
  • NoSQL, RDBMS dünyası başına JOIN'leri desteklemediği için genellikle denormalize bir şemayı tercih eder. Bu nedenle, genellikle verilerinizin düzleştirilmiş, denormalize bir gösterimine sahip olursunuz.
  • NoSQL kullanmak, veri kaybedebileceğiniz anlamına gelmez. Farklı DB'lerin farklı stratejileri vardır. örneğin MongoDB - esasen veri kaybı potansiyeli ile performansı düşürebilecek seviyeyi seçebilirsiniz - en iyi performans = veri kaybı için daha geniş kapsam.
  • NoSQL çözümlerini genişletmek genellikle çok kolaydır. Verileri çoğaltmak için daha fazla düğüm eklemek a) daha fazla ölçeklenebilirlik sunmak ve b) bir düğüm düşerse veri kaybına karşı daha fazla koruma sunmaktır. Ancak yine, NoSQL DB / yapılandırmasına bağlıdır. NoSQL sizin çıkarımınız gibi "veri kaybı" anlamına gelmez.
  • IMHO, karmaşık / dinamik sorgular / raporlar en iyi şekilde bir RDBMS'den sunulur. Genellikle bir NoSQL DB için sorgu işlevselliği sınırlıdır.
  • 1 veya başka bir seçenek olması gerekmez. Deneyimlerim RDBMS'yi NoSQL ile birlikte belirli kullanım durumları için kullanmaktadır.
  • NoSQL DB'leri genellikle çoklu "tablolar" üzerinde atomik işlemler gerçekleştirme yeteneğinden yoksundur.

Gerçekten çeşitli NoSQL mağazalarının ne olduğunu ve ölçeklenebilirlik / veri güvenliği vb. Sağlamak için nasıl gittiklerini anlamanız ve anlamanız gerekir. .

Örnek olarak MongoDb için, MongoDb'nin "daha uygun" ve "daha az uygun" kullanım olarak önerdiklerini görmek için Kullanım Durumlarını inceleyin.


16
NoSQL'in birleştirmeleri desteklememesi iddiası yanıltıcıdır. Bazı NoSQL veritabanları, birleşmelerde ilişkisel veritabanlarından çok daha iyidir. Bazıları onları hiç desteklemiyor. Bu yanıt özellikle MongoDB hakkında genel olarak NoSQL'den daha fazla gibi görünüyor.
Alan Plum

1
Harika özet. @AlanPlum, hangi spesifik NoSQL veritabanlarından bahsediyorsunuz?
brian

2
@brian ArangoDB'ye ( arangodb.com ) katkıda bulunuyorum , bu sadece ucuz birleşimlerle değil, aynı zamanda gerçek işlemlerle de bir belge veritabanı (MongoDB düşünüyorum) ve bir grafik veritabanı (Think Neo4J) karışımı. Bununla birlikte, NoSQL veritabanları homojen bir grup değildir ve herhangi bir NoSQL veritabanından tüm "kategori" ye genelleme yapmak imkansızdır.
Alan Plum

Kendinizi RDB'leri kullanmayı düşünürseniz, çünkü NoSQL'de "birleşimler desteklenmez", bu videoyu AWS re: Invent'ten izlemenizi şiddetle tavsiye ederim. Tüm NoSQL yaklaşımını bozar! Bana çok yardım etti. youtu.be/HaEPXoXVf2k
dillon.harless

9

Bence Nosql bu senaryolarda en azından "daha uygun"

  1. Sadece daha fazla düğüm ekleyerek yatay olarak ölçeklendirmek kolaydır.

  2. Büyük veri kümesinde sorgulama

    Her gün Twitter'da yayınlanan tweetler düşünün. RDMS'de, milyonlarca (veya milyarlarca?) Satır içeren tablolar olabilir ve bu tablolarda doğrudan sorgu yapmak istemezsiniz, çoğu zaman karmaşık birleştirmeler için tablo birleştirmelerine de gerek yoktur.

  3. Disk G / Ç darboğazı

    Bir web sitesinin, kullanıcıların gerçek zamanlı bilgilerine göre farklı kullanıcılara sonuç göndermesi gerekiyorsa, muhtemelen saniyede on veya yüz binlerce SQL okuma / yazma isteğinden bahsediyoruz. O zaman disk i / o ciddi bir darboğaz olacaktır.


20
# 2 için RDBMS ile neyin sorun olabileceğini anlamıyorum. NoSQL'in # 3'e göre daha az disk G / Ç'si var mı?
avi

5
@Avi'nin söylediği gibi, tabloları dizin üzerinde sorguladığınız sürece # 2 için sorun olmadığını düşünüyorum. Milyonlarca satır mı? Tamam, sadece kullanmak istediğim dizinleri al
Xtreme Biker

11
# 2 ve 3 yanlıştır. 2 için, verileri içe / dışa aktarma üzerinde performans testleri yaptım ve SQL Server 2014 Mongo'yu büyük veri ithalat ve ihracatlarında gördüm. 3 için, SQL'de güçlü bir şekilde yazılan veriler genellikle (sıkıştırmadan önce% 50'den fazla gördüm) belge veritabanlarından çok daha az yer kaplar.
brian

7
Evet, ve # 1 için bile, anlamadım. Ölçeklendirme, tüm büyük rdbms'lerin önerdiği kümelenme sözleşmesinin bir parçasıdır
Sebas

2
Sınırsız paranız varsa bunların üçü de yanlış
Chazt3n
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.