NoSQL - MongoDB ve CouchDB [kapalı]


154

NoSQL hareketi söz konusu olduğunda tam bir çaylağım. MongoDB ve CouchDB hakkında çok şey duydum. İkisi arasında farklılıklar olduğunu biliyorum. NoSQL dünyasına ilk adım olarak hangi öğrenmeyi önerirsiniz?


İlk adım olarak mongoDB daha iyi olduğu için öğrenmesi daha kolay ama bazı sorunları var. Belirli bir noSQL veritabanı kullanmak için en iyi seçenek yoktur, ne yapmanız gerektiğine bağlıdır. Belge yönelimli, anahtar / değer çifti, grafik yönelimli, sütun yönelimli özelliklere bakın.
Chris

Yanıtlar:


149

Aşağıdaki bağlantılara bakın

Güncelleme : NoSQL veritabanlarının karşılaştırmasını buldum .

MongoDB (3.2)

  • Yazıldığı: C ++
  • Ana nokta: JSON belge deposu
  • Lisans: AGPL (Sürücüler: Apache)
  • Protokol: Özel, ikili (BSON)
  • Ana / bağımlı çoğaltma (çoğaltma kümeleriyle otomatik yük devretme)
  • Yerleşik parçalama
  • Sorgular javascript ifadeleridir
  • Sunucu tarafında isteğe bağlı javascript işlevlerini çalıştırma
  • Coğrafi indeksleme ve sorguları vardır
  • Farklı performans özelliklerine sahip çoklu depolama motorları
  • Özelliklere göre performans
  • Belge doğrulaması
  • Günlük kaydı
  • Güçlü toplama çerçevesi
  • 32bit sistemlerde, ~ 2.5Gb ile sınırlıdır
  • Metin araması entegre
  • Büyük veri + meta verileri depolamak için GridFS (aslında FS değil)
  • Veri merkezinin farkında

En iyi kullanılan : Dinamik sorgulara ihtiyacınız varsa. Dizin tanımlamayı tercih ederseniz, işlevleri eşlemeyin / azaltmayın. Büyük bir DB'de iyi performansa ihtiyacınız varsa. CouchDB istiyorsanız, ancak verileriniz çok fazla değişiyorsa, diskleri doldurun.

Örneğin : MySQL veya PostgreSQL ile yapacağınız birçok şey için, ancak önceden tanımlanmış sütunlara sahip olmak sizi gerçekten geride bırakır.

KanepeDB (1.2)

  • Yazıldığı yer: Erlang
  • Ana nokta: DB tutarlılığı, kullanım kolaylığı
  • Lisans: Apache
  • Protokol: HTTP / REST
  • Çift yönlü (!) Çoğaltma,
  • sürekli veya geçici,
  • çatışma tespiti ile,
  • böylece, master-master çoğaltma. (!)
  • MVCC - yazma işlemleri okumaları engellemez
  • Belgelerin önceki sürümleri mevcut
  • Yalnızca çarpışma (güvenilir) tasarımı
  • Zaman zaman sıkıştırma ihtiyacı
  • Görünümler: katıştırılmış harita / azalt
  • Görünümleri biçimlendirme: listeler ve şovlar
  • Sunucu tarafı belge doğrulaması mümkün
  • Kimlik doğrulaması mümkün
  • '_Changes' (!) İle gerçek zamanlı güncellemeler
  • Ataşman taşıma

En iyi kullanılan : Önceden tanımlanmış sorguların çalıştırılacağı verileri biriktirmek, zaman zaman değiştirmek için. Sürüm oluşturmanın önemli olduğu yerler.

Örneğin : CRM, CMS sistemleri. Ana-ana çoğaltma, çok bölgeli kolay dağıtımlara izin veren özellikle ilginç bir özelliktir.


1
MongoDB'nin sunucu lisansının AGPL olmasıyla ilgilenen herkes için, mongodb'un lisanslama politikasına bakmak biraz rahatlama sağlayabilir.
Patrick

@amra Yani, eğer verileri kaydedip sadece okursam, couchdb kullanmak en iyi seçimdir?
verystrongjoe

@verystrongjoe Bu, verilerin ve sorguların karmaşıklığına bağlıdır. Genellikle hangisinin en iyisi olduğunu söyleyemezsiniz.
amra

@amra Ok. Ama .. Eğer veri biriktirecek ve verileri seçecek ve ben mongo ve kanepe arasında seçim yapmak zorunda, hangisi daha iyi?
verystrongjoe

CouchApps ~ 2012'den bu yana "artık önerilmemektedir": docs.couchdb.com/en/latest/ddocs
Tim Sylvester

123

MySQL dünyasından geliyorsanız, MongoDB, sorgu benzeri dil desteği nedeniyle size çok daha doğal gelecektir.

Bence bir çok insan için bu kadar arkadaş canlısı.

Muhtemelen farklı veri merkezlerinde veya bunun gibi bir şeyde çok düğümlü bir kurulumla gerçekten harika master-master çoğaltma desteğini kullanmak istiyorsanız CouchDB harika.

MongoDB çoğaltması (çoğaltma kümeleri) bir master-slave-slave-slave- * kurulumudur, master'a sadece bir çoğaltma kümesinde yazabilir ve bunlardan herhangi birini okuyabilirsiniz.

Standart bir site yapılandırması için sorun değil. MySQL kullanımı ile çok iyi eşleşir.

Ancak, hepsine okuma / yazma rağmen tüm global düğümleri senkronize tutması gereken bir CDN gibi global bir hizmet oluşturmaya çalışıyorsanız, CouchDB'deki çoğaltma gibi bir şey sizin için büyük bir nimet olacaktır.

MongoDB, kullanabileceğiniz ve çok sezgisel hissettiği sorgu benzeri bir dile sahipken, CouchDB bir "harita azaltma" yaklaşımı ve bu görüş kavramlarını benimser. İlk başta tuhaf geliyor, ama asıldıkça, gerçekten sezgisel hissetmeye başlıyor.

İşte hızlı bir bakış, bu yüzden mantıklı:

  • CouchDB tüm verilerinizi b ağacında saklar
  • "SELECT * FROM user WHERE ..." gibi bir şeyle dinamik olarak sorgulayamazsınız.
  • Bunun yerine, verilerinizin ayrı "görünümlerini" tanımlarsınız ... "burada tüm kullanıcılarımın bir görünümü", "burada 10 yaşından büyük tüm kullanıcıların bir görünümü" "burada 30 yaşından büyük tüm kullanıcıların bir görünümü" ve yakında.
  • Bu görünümler, harita küçültme yaklaşımı kullanılarak tanımlanır ve JavaScript işlevleri olarak tanımlanır.
  • Bir görünüm tanımladığınızda, DB, görünümü atadığınız DB'nin tüm belgelerini içinden beslemeye ve işlevlerinizin sonuçlarını bu verilerdeki "dizin" olarak kaydetmeye başlar.
  • Harita / azaltma işlevinizin ne yaptığına bakılmaksızın, görünümlerde belirli bir anahtar (ID) veya kimlik aralığı istemek gibi yapabileceğiniz bazı temel sorgular vardır.
  • Bu slaytları okuyun , Couch'ta gördüğüm haritanın en iyi açıklaması / azalması.

Yani bu kaynakların her ikisi de JSON belgelerini kullanıyor, ancak CouchDB bunu daha çok izliyor "her sunucu bir master ve dünya ile senkronize olabilir" yaklaşımı, ihtiyacınız varsa fantastik, MongoDB gerçekten NoSQL dünyasının MySQL'i.

Yani bu daha çok ihtiyacınız olan / istediğiniz gibi görünüyorsa, bunun için gidin.

Mongo'nun ikili protokolü ile CouchDB'nin RESTful arayüzü gibi küçük farkların hepsi küçük detaylardır.

Ham hız istiyorsanız ve veri güvenliği ile cehennem istiyorsanız , Mongo'nun bellek dışı çalışmasını ve seyrek aralıklar dışında diske bir şeyler yapmamasını söyleyebileceğiniz için CouchDB'den daha hızlı çalışmasını sağlayabilirsiniz.

Aynı şeyi Couch için de yapabilirsiniz, ancak HTTP tabanlı iletişim protokolü bu "her şeyin üzerinde hız!" İle Mongo ile ham ikili iletişimden 2-4 kat daha yavaş olacaktır. senaryo.

Bir sunucu çökmesi veya disk arızası, DB'nizi bozar ve unutulmaya zorlarsa, çiğ çılgın hızın işe yaramaz olduğunu unutmayın, böylece veri noktası göründüğü kadar şaşırtıcı değildir (Wall'de gerçek zamanlı ticaret sistemleri yapmadıkça) Sokak, bu durumda Redis'e bakın).

Umarım her şey yardımcı olur!


"MongoDB gerçekten NoSQL dünyasının MySQL'i" - İşlerin değişip değişmediğini bilmiyorum ama 2014'ün bu makalesi aynı fikirde değil: sarahmei.com/blog/2013/11/11/why-you-should-never-use- mongodb
Onur Yıldırım

Bence, gevşek bir şekilde yorum hala işe yarıyor olsa da, haklısın, ÇOK son on yılda değişti ve yorumum kolayca reddedilmelidir.
Riyad Kalla


1

Artık piyasada hiç olmadığı kadar çok sayıda NoSQL veritabanı var. Destek, genişletilebilirlik, yönetim ve maliyete dayalı kurumsal uygulamalar için de harika olacak bir veritabanı arıyorsanız, Gartner Magic Quadrant'a göz atmanızı öneririm.

http://www.gartner.com/technology/reprints.do?id=1-23A415Q&ct=141020&st=sb

Henüz denememiş, ancak raporda (2.5.1) gösterilen sürüme dayanmayan Couchbase'i önermek istiyorum, çünkü CB Server'ın bugünün arkasında neredeyse 2 revizyon, 2H15'te 4.0 sürümüne yaklaşıyor .

http://www.couchbase.com/coming-in-couchbase-server-4-0

Couchbase'in bir satıcı / ürün olarak ilgili diğer kısmı, çok amaçlı bir DB türü olmasıdır. Saf bir K / V deposu, çok boyutlu ölçekleme ile Belge Odaklı Veritabanı, Memcached, kalıcılık ile önbellek kenarı gibi davranabilir ve otomatik birleştirmelerle ANSI 92 uyumlu SQL'i destekler, bir düğmeye basarak DR kümelerine çoğaltma ve hatta ekosistemde yerleşik bir mobil bileşen vardır.

Başka bir şey yoksa, en son karşılaştırmaları incelemeye değer:

http://info.couchbase.com/Benchmark_MongoDB_VS_CouchbaseServer_HPW_BM.html http://info.couchbase.com/NoSQL-Technical-Comparison-Report.html

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.