Ne zaman MonuchDB üzerinde CouchDB kullanılır veya tam tersi


638

Bu iki NoSQL veritabanı arasında sıkışıp kaldım.

Projemde bir veritabanı içinde bir veritabanı oluşturacağım. Örneğin, dinamik tablolar oluşturmak için bir çözüme ihtiyacım var.

Böylece kullanıcılar sütun ve satır içeren tablolar oluşturabilir. Bence MongoDB veya CouchDB bunun için iyi olacak, ama hangisinden emin değilim. Ayrıca verimli sayfalamaya da ihtiyacım olacak.


19
Keşke, aradıkları konu üzerine soru oluşturulmasını daha iyi kolaylaştırmak ve kullanıcıları bu soruya daha iyi yönlendirmek için sistemi değiştirmelerini isterdim. Bu sorunun hiç çözülmediği hakkında hiçbir fikrim yok ve bunu izlemek için uygun bir yol yok.
doub1ejack

45
Keşke bu web sitesinde bu soruyu "konu dışı" olarak geri çevirmeye yardımcı olabilecek "konu dışı" olarak "neden" veya "aşağı" bulabileceğimiz işlevselliği ekleyecekler.
Sanjay

9
++ Bunun neden konu dışı olduğu net değil. Soru yapar net objektif cevaplar - OP görüş ancak bu iki sistem hakkında objektif bilgiler soran değildir. user799188 harika bir objektif cevap verdi.
user48956

3
Sanırım yöneticiler sadece herhangi bir kod parçası içeriyor ve sorulan bilgi türünde değil soruyu bakmak .. Btw her zaman soruyu yeniden açmak için oy.
Tarun

11
Soru yeniden açıldı. Herkese tekrar hoş geldiniz ...
Alexis Dufrenoy

Yanıtlar:


523

C, A & P (Tutarlılık, Kullanılabilirlik ve Bölüm toleransı) için hangisi sizin için daha önemlidir? Hızlı başvuru, NoSQL Sistemleri Görsel Kılavuzu

  • MongodB: Tutarlılık ve Bölüm Toleransı
  • CouchDB: Kullanılabilirlik ve Bölüm Toleransı

Bir blog yazısı, Cassandra vs MongoDB vs CouchDB vs Redis vs Riak vs HBase vs Membase vs Neo4j karşılaştırması , karşılaştırılan her NoSQL veritabanı için ' En iyi kullanılan ' senaryolarına sahiptir . Bağlantıdan alıntı yapıldığında,

  • MongoDB: 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.
  • CouchDB: Önceden tanımlanmış sorguların çalıştırılacağı verileri toplamak, bazen değiştirmek için. Sürüm oluşturmanın önemli olduğu yerler.

Riyad Kalla'nın son (Şubat 2012) ve daha kapsamlı bir karşılaştırması ,

  • MongoDB: SADECE Master-Slave Çoğaltma
  • CouchDB: Master-Master Çoğaltma

İkisini de deneyen birinin bir blog yazısı (Ekim 2011), Bir MongoDB Guy CouchDB , CouchDB'nin sayfalandırmasının o kadar kullanışlı olmadığını söyledi.

Kristina Chodorow ( MongoDB'nin arkasındaki ekibin bir parçası ) tarafından tarihli (Haziran 2009) bir karşılaştırmalı değerlendirme ,

MongoDB'ye giderdim.

Umarım yardımcı olur.


8
Anladığım kadarıyla MongoDB hiçbir şekilde tutarlı değil: ivoras.sharanet.org/blog/tree/…
sheerun

2
Zaman için iyi bir bilgi, ama bu gerçekten eski ... çok değişti (Mongo için REST arabirimleri dahil).
rICh

4
Bence biraz yanıltıcı olabilir, ancak couchdb'de versiyonlama bir argüman değil. Couchdb tarafından kullanılan sürüm oluşturma düzeni sözde sürüm oluşturma olarak kullanılmamalıdır. Bölümleri işlemek için kullanılır. Veritabanı sıkıştırması sırasında, düzeltmeler gerçekten silindiği gibi silinir. Ve sadece devir zincirleri veritabanında kalmalıdır. Couchdb'deki sürümleri işlemek istiyorsanız, tıpkı mongodb'da olduğu gibi yapılmalıdır.
Loïc Faure-Lacroix

2
Listeye couchdb'nin kendi kendine yeten web uygulamalarına sahip olabileceğini ekliyorum. Couchdb'de olduğu gibi aslında bir web sunucusu.
Loïc Faure Lacroix

41
Yanlış bir cevap için 332 oy şaşırdım. MongoDB varsayılan olarak CP'dir ve CouchDB
AP'dir

219

Her şeyden önce cevaplar hikayeyi karmaşıklaştırıyor.

  1. Bir mobil bileşene sahip olmayı planlıyorsanız veya masaüstü kullanıcılarının çevrimdışı çalışmasını ve ardından çalışmalarını bir sunucu ile senkronize etmesini istiyorsanız CouchDB'ye ihtiyacınız vardır.
  2. Kodunuz yalnızca sunucuda çalışacaksa MongoDB ile devam edin

Bu kadar. CouchDB'nin (harika) mobil ve masaüstü cihazlara çoğaltma yeteneğine ihtiyacınız olmadığı sürece, MongoDB şu anda performans, topluluk ve takım avantajına sahiptir.


18
Özlü, sevdiğim gibi.
Ely

Bunun gibi teknik olmayan basit cevapları seviyorum. Teşekkürler!

Bu cevap mobil, çevrimdışı ve senkronizasyon arayanlar için çivi! teşekkürler
Erik Kaplun

"Mobil cihaza çoğalt" ı okuduğumda güldüm lol verileriniz ne kadar az?
Daniel W.

3
"lol verileriniz ne kadar az?" - bu gerçekten bir şey mi? Verilerim büyük olduğu için CDB'yi seçebilirim - ya da alternatiflerden daha iyi çoğaltmaya sahip olduğu için seçebilirim. Bu durumda, veri kümelerini cihaz başına yaklaşık 100Mb-200Mb'ye kadar filtreleriz. Bu kötü bir şey mi?
Ewan Makepeace

62

Çok eski bir soru ama Google'ın tepesinde ve gördüğüm cevaplardan pek hoşlanmıyorum, işte benim.

Couchdb'de CouchApps geliştirme yeteneğinden çok daha fazlası var. Çoğu kişi CouchDb'yi klasik 3 katlı bir web mimarisinde kullanır.

Uygulamada, çoğu insan için belirleyici faktör, MongoDb'nin CouchDb yapmazken SQL benzeri bir sözdizimiyle geçici sorgulamaya izin vermesi olacaktır (bu görünümleri oluştururken bile bazı insanları kapatan harita / görünümler oluşturmanız gerekir) Hızlı Uygulama Geliştirme dostu - saklı yordamlarla hiçbir ilgisi yok).

Kabul edilen cevapta ortaya çıkan puanları ele almak için: CouchDb'nin harika bir sürüm oluşturma sistemi vardır, ancak bu sürümlendirmenin önemli olduğu yerler için sadece uygun (veya daha uygun) anlamına gelmez. Ayrıca, couchdb, yalnızca ek niteliği sayesinde ağır yazma dostudur (hiçbir işlemin kaybolmayacağını garanti ederken işlemlerin hiçbir zaman geri dönmediğini yazar).

Kimsenin bahsetmediği çok önemli bir şey, CouchDb'nin b-ağacı indekslerine dayanmasıdır. Bu, 1 "satır" veya 20 milyar varsa, sorgulama süresinin her zaman 10 ms'nin altında kalacağı anlamına gelir. Bu, CouchDb'yi düşük gecikmeli ve okuma dostu bir veritabanı yapan bir oyun değiştiricidir ve bu gerçekten göz ardı edilmemelidir.

Adil ve kapsamlı olmak için MongoDb'nin CouchDb'ye göre avantajı, takımlama ve pazarlamadır. Tüm büyük diller ve platformlar için yerleşik sınıf araçlarına sahipler, yerleşikliği kolaylaştırıyorlar ve bu, adhoc sorgulamalarına eklendiğinde SQL'den geçişi daha da kolaylaştırıyor.

CouchDb, bugün birçok kitaplık olmasına rağmen - bu düzeyde bir araç takımına sahip değildir, ancak CouchDb bir HTTP API'si olarak görünür ve bu nedenle en sevdiğiniz dilde bir paketleyici oluşturmak çok kolaydır. Ben şahsen bu yaklaşımı seviyorum çünkü şişmeyi önler ve sadece istediğinizi almanıza izin verir (arayüz ayrımı prensibi).

Bu yüzden birini ya da diğerini kullanmak paradigmaları ile büyük ölçüde rahatlık ve tercih meselesi diyebilirim. CouchDb yaklaşımı bazı insanlar için "sadece uyuyor", ancak veritabanı özelliklerini öğrendikten sonra (ayrıntılı olarak resmi kılavuzda) ) “cehennem evet” anınız yoksa, muhtemelen devam etmelisiniz.

Sadece "doğru iş için doğru aracı" kullanmak istiyorsanız CouchDb'yi kullanmaktan vazgeçiyorum. çünkü bunu sadece bu şekilde kullanamayacağınızı öğreneceksiniz ve sinirlenmiş ve "CouchDb'deki birleştirmeler nerede?" ve "İşlem yönetimi nerede?". Gerçekten de Couchdb - paradoksal olarak - çok şeffaftır, ancak aynı zamanda bir paradigma değişimi ve problemlere gerçekten parlamak (ve gerçekten çalışmak) için yaklaşım biçiminizde bir değişiklik gerektirir.

Ama bunu yaptıktan sonra gerçekten işe yarıyor. Şahsen başka bir veritabanı seçmek için bir projede çok güçlü nedenlere veya büyük bir anlaşma kırıcıya ihtiyacım vardı, ancak şu ana kadar hiç karşılaşmadım.


12
Güncelleme 2016: Eylül 2016'da piyasaya sürülen 2.0 sürümünden bu yana, CouchDb anlık sorguları kullanıma hazır :)
destekliyor

1
CouchDb relies on b-tree indexes. This means that whether you have 1 "row" or 20 billions, the querying time will always remain below 10ms.Bu neredeyse tüm veritabanları için geçerli değil mi? Bu şekilde ifade edilir aksi anlamına gelir.
Shelvacu

38

Bu soruları kendiniz sorun mu? Ve DB seçiminize karar vereceksiniz.

  1. Master-master'a ihtiyacınız var mı? Sonra CouchDB. Esasen CouchDB, düğümlerin uzun süre bağlantısının kesilmesini öngören master-master çoğaltmayı destekler. MongoDB bu ortamda iyi sonuç vermez.
  2. MAXIMUM R / W iş hacmine mi ihtiyacınız var ? Sonra MongoDB
  3. Nihai tek sunucu dayanıklılığına mı ihtiyacınız var?Yalnızca tek bir DB sunucunuz olacağı için var? Sonra CouchDB.
  4. Deli verimi korurken parçalanması gereken bir MASSIVE veri seti mi saklıyorsunuz ? Sonra MongoDB.
  5. Güçlü veri tutarlılığına mı ihtiyacınız var ? Sonra MongoDB.
  6. Veritabanının yüksek kullanılabilirliğine mi ihtiyacınız var ? Sonra CouchDB.
  7. Çoklu veritabanlarını ve çoklu tabloları / koleksiyonları umuyor musunuz ? Sonra MongoDB
  8. Bir var kullanıcılar çevrimdışı mobil uygulamayı ve bir sunucuya kendi aktivite verilerini senkronize etmek ister misin? O zaman CouchDB'ye ihtiyacınız var.
  9. Çok çeşitli sorgulama motoruna mı ihtiyacınız var ? Sonra MongoDB
  10. DB kullanmak için büyük topluluğa mı ihtiyacınız var ? Sonra MongoDB

# 9, CouchDB 2.x'den itibaren CouchDB ve MongoDB arasındaki sanal bir bağdır.
Flimzy

27

Bu makalede bulunan cevapları özetliyorum:

http://www.quora.com/How-does-MongoDB-compare-to-CouchDB-What-are-the-advantages-and-disadvantages-of-each

MongoDB: Daha iyi sorgulama, BSON'da veri depolama (daha hızlı erişim), daha iyi veri tutarlılığı, çoklu koleksiyonlar

CouchDB: Daha iyi çoğaltma, master-master çoğaltma ve çakışma çözümlemesi, JSON'da veri depolama (insan tarafından okunabilir, REST servisleri aracılığıyla daha iyi erişim), harita azaltma yoluyla sorgulama.

Sonuç olarak, MongoDB daha hızlı, CouchDB daha güvenlidir.

Ayrıca: http://nosql.mypopescu.com/post/298557551/couchdb-vs-mongodb


7
Yararlı cevap, ama sonuçtan hoşlanmak zordur.
Erik Kaplun

"Sevmek zor" derken ne demek istiyorsun?
Alexis Dufrenoy

23

MongoDB'deki seyrek benzersiz dizinlerle ilgili bir sorunun farkında olun. Ben vurdum ve geçici çözüm için son derece hantal.

Sorun şudur - eğer varsa benzersiz bir alanınız var ve alanın olmadığı tüm nesneleri bulmak istiyorsunuz. Mongo'da seyrek benzersiz dizinlerin uygulanma şekli, bu alanın eksik olduğu nesnelerin dizinde hiç {$exists: false}bulunmamasıdır - bu alandaki bir sorgu ile alınamazlar - sadece çalışmaz.

Geldiğim tek geçici çözüm, boş bir değerin bir uuid ile birleştirilmiş özel bir önek ( null: gibi ) olarak çevrildiği özel bir boş değer ailesine sahip olmaktır. Bu gerçek bir baş ağrısıdır, çünkü kişi yazarken / sorgularken / okurken boş değerlere / değerlerden dönüşmeye dikkat etmelidir. Büyük bir sıkıntı.

Asla MongoDB sunucu tarafı javascript yürütme kullanmadım (zaten tavsiye edilmez) ve sadece bir Mongo düğümü olduğunda onların harita / azaltmak korkunç bir performansa sahiptir. Tüm bu nedenlerden dolayı şimdi CouchDB'yi kontrol etmeyi düşünüyorum, belki de benim özel senaryom için daha uygun.

BTW, seyrek benzersiz dizin sorununu açıklayan ilgili Moğol sorununun bağlantısını bilen biri varsa - lütfen paylaşın.


3
Üzgünüm ama bu iyi bir fikir olmadığını ve bu göz ardı değil öğrendim bir duygu bu nagging hissi var
eaglestorm

8
Bir duygu ile tartışamam. Tek bildiğim, eğer varsa, isteğe bağlı alanlar nedeniyle seyrek benzersiz dizinlere ihtiyacım var.
işaretleyin

37
Sorunu açıklayan gerçek bir kullanım vakanız olduğunu anlıyorum, ama bağırsaklarım ne olacak?
Chev

14
Bilmiyorum. Ne olmuş?
mark

2
Rotfl. +1 Alex Ford ve komik yorumlarınız için işaretleyin. :-)) @mark, listelediğiniz sorunların MongoDB'den CouchDB'ye geçişi haklı çıkardığından emin değilim. Ne MongoDB ne de CouchDB ile çalıştım, ama bağırsaklarım bana CouchDB ile ilgili diğer karmaşık sınırlamalarla karşılaşacağınızı ve etraflarında çalışmak için biraz daha zaman harcayacağınızı söylüyor. Eğer şimdi MongoDB'de uzmanlaştıysanız, muhtemelen buna bağlı kalmalısınız. Ama yine, ben hiç Nosql diyarına girmedim, bu sadece benim bağırsak konuşma.
MiniQuark

6

Eminim Mongo'yla (daha tanıdık) yapabilirsin ve kanepeyle de yapabileceğinden eminim.

Her ikisi de belgelidir (JSON tabanlı), bu nedenle "sütunlar" değil, belgelerdeki alanlar olacaktır - ancak tamamen dinamik olabilirler.

Her ikisi de kullanmak için diğer faktörlere bakmak isteyebilirsiniz: önemsediğiniz diğer özellikler, popülerlik, vb. Google analizleri, indeed.com iş ilanları popülerliğe bakmak için yollar olacaktır.

Sadece denemek olabilir 5 dakika içinde çalışan mongo olması gerekir düşünüyorum.

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.