Wann wird CouchDB über MongoDB verwendet und umgekehrt?


636

Ich stecke zwischen diesen beiden NoSQL-Datenbanken fest.

In meinem Projekt werde ich eine Datenbank innerhalb einer Datenbank erstellen. Zum Beispiel brauche ich eine Lösung, um dynamische Tabellen zu erstellen.

So können Benutzer Tabellen mit Spalten und Zeilen erstellen. Ich denke, entweder MongoDB oder CouchDB werden dafür gut sein, aber ich bin mir nicht sicher, welche. Ich werde auch effizientes Paging brauchen.


19
Ich wünschte, sie würden das System modifizieren, um die Erstellung der gesuchten themenbezogenen Frage besser zu erleichtern und die Benutzer besser auf diese Frage zu leiten. Ich habe keine Ahnung, ob diese Frage jemals angesprochen wurde, und keine bequeme Möglichkeit, sie aufzuspüren.
Doub1ejack

45
Ich wünschte, sie würden die Funktionalität auf dieser Website hinzufügen, mit der wir den Grund für diese Frage als "Off-Topic" "upvoten" oder "downvote" könnten, was dazu beitragen könnte, diese Art von Fragen wieder auf "on topic" zu stellen.
Sanjay

9
++ Mir ist nicht klar, warum dies nicht zum Thema gehört. Die Frage hat klare objektive Antworten - das OP bittet nicht um eine Stellungnahme, sondern um objektive Informationen über diese beiden Systeme. user799188 lieferte eine großartige objektive Antwort.
user48956

3
Ich denke, Administratoren schauen sich nur die Frage an, ob sie einen Code enthält, und nicht die Art der gesuchten Informationen. Übrigens können Sie jederzeit abstimmen, um die Frage erneut zu öffnen.
Tarun

11
Die Frage wurde gerade wieder geöffnet. Willkommen zurück, alle ...
Alexis Dufrenoy

Antworten:


523

Welche 2 von C, A & P (Konsistenz, Verfügbarkeit und Partitionstoleranz) sind für Sie wichtiger? Kurzreferenz, die visuelle Anleitung zu NoSQL-Systemen

  • MongodB: Konsistenz und Partitionstoleranz
  • CouchDB: Verfügbarkeit und Partitionstoleranz

In einem Blogbeitrag, Cassandra gegen MongoDB gegen CouchDB gegen Redis gegen Riak gegen HBase gegen Membase gegen Neo4j , werden für jede NoSQL-Datenbank die am besten verwendeten Szenarien verglichen. Den Link zitieren,

  • MongoDB: Wenn Sie dynamische Abfragen benötigen. Wenn Sie lieber Indizes definieren möchten, nicht Funktionen zuordnen / reduzieren. Wenn Sie eine gute Leistung in einer großen Datenbank benötigen. Wenn Sie CouchDB wollten, sich Ihre Daten jedoch zu stark ändern, füllen Sie die Festplatten.
  • CouchDB: Zum Sammeln von gelegentlich wechselnden Daten, für die vordefinierte Abfragen ausgeführt werden sollen. Orte, an denen die Versionierung wichtig ist.

Ein aktueller (Februar 2012) und umfassenderer Vergleich von Riyad Kalla,

  • MongoDB: NUR Master-Slave-Replikation
  • CouchDB: Master-Master-Replikation

In einem Blog-Beitrag (Oktober 2011) von jemandem, der beides ausprobiert hat, kommentierte A MongoDB Guy Learns CouchDB , dass das Paging der CouchDB nicht so nützlich sei.

Ein datierter (Jun 2009) Benchmark von Kristina Chodorow ( Teil des Teams hinter MongoDB ),

Ich würde mich für MongoDB entscheiden.

Ich hoffe es hilft.



2
Gute Infos für die Zeit, aber das ist wirklich alt ... viele haben sich geändert (einschließlich REST-Schnittstellen für Mongo).
Rich

4
Ich denke, es könnte ein bisschen irreführend sein, aber die Versionierung in couchdb ist kein Argument. Das von couchdb verwendete Versionsschema sollte nicht als Versionsverwaltung verwendet werden. Es wird verwendet, um Partitionen zu behandeln. Während einer Datenbankkomprimierung werden Revisionen wie in "wirklich gelöscht" gelöscht. Und nur die Drehzahlketten sollten in der Datenbank verbleiben. Wenn Sie Versionen in couchdb verarbeiten möchten, sollten Sie dies genauso tun wie in mongodb.
Loïc Faure-Lacroix

2
Ich möchte der Liste hinzufügen, dass couchdb eigenständige Webanwendungen haben kann. Wie in couchdb ist in der Tat ein Webserver.
Loïc Faure-Lacroix

41
Ich bin überrascht, dass 332 Stimmen für eine falsche Antwort stimmen. MongoDB ist standardmäßig CP und CouchDB ist AP stackoverflow.com/questions/11292215/…
adnan kamili

219

Die Antworten erschweren vor allem die Geschichte.

  1. Wenn Sie eine mobile Komponente haben möchten oder Desktop-Benutzer offline arbeiten und ihre Arbeit dann mit einem Server synchronisieren müssen, benötigen Sie CouchDB.
  2. Wenn Ihr Code nur auf dem Server ausgeführt wird, wählen Sie MongoDB

Das ist es. Sofern Sie nicht die (großartige) Fähigkeit von CouchDB benötigen, auf Mobil- und Desktopgeräten zu replizieren, bietet MongoDB derzeit den Vorteil in Bezug auf Leistung, Community und Tools.


18
Prägnant, so wie ich es mag.
Ely

Ich liebe einfache, nicht übermäßig technische Antworten wie diese. Vielen Dank!

Diese Antwort ist genau das Richtige für alle, die mobil, offline und synchron sein möchten! danke
Erik Kaplun

Ich habe gelacht, als ich "Auf Mobilgerät replizieren" gelesen habe. Lol, wie wenig sind Ihre Daten?
Daniel W.

3
"lol wie wenig sind deine Daten?" - Ist das wirklich eine Sache? Ich könnte CDB wählen, weil meine Daten groß sind - oder ich könnte es wählen, weil es eine bessere Replikation als die Alternativen hat. In diesem Fall filtern wir Datensätze auf etwa 100 MB bis 200 MB pro Gerät. Ist das etwas schlechtes?
Ewan Makepeace

62

Sehr alte Frage, aber sie steht über Google und ich mag die Antworten, die ich sehe, nicht ganz. Hier ist meine eigene.

Couchdb bietet viel mehr als die Möglichkeit, CouchApps zu entwickeln. Die meisten Leute verwenden CouchDb in einer klassischen 3-Ebenen-Webarchitektur.

In der Praxis ist der entscheidende Faktor für die meisten Benutzer die Tatsache, dass MongoDb Ad-hoc-Abfragen mit einer SQL-ähnlichen Syntax ermöglicht, CouchDb jedoch nicht (Sie müssen Karten erstellen / Ansichten reduzieren, wodurch einige Benutzer ausgeschaltet werden, obwohl diese Ansichten erstellt werden ist Rapid Application Development freundlich - sie haben nichts mit gespeicherten Prozeduren zu tun).

Um die in der akzeptierten Antwort angesprochenen Punkte anzusprechen: CouchDb verfügt über ein hervorragendes Versionsverwaltungssystem, dies bedeutet jedoch nicht, dass es nur für Orte geeignet ist (oder besser geeignet ist), an denen die Versionsverwaltung wichtig ist. Außerdem ist couchdb dank seiner Nur-Anhängen-Funktion sehr schreibgeschützt (Schreibvorgänge kehren in kürzester Zeit zurück und garantieren, dass niemals Daten verloren gehen).

Eine sehr wichtige Sache, die von niemandem erwähnt wird, ist die Tatsache, dass CouchDb auf B-Tree-Indizes basiert. Dies bedeutet, dass unabhängig davon, ob Sie 1 "Zeile" oder 20 Milliarden haben, die Abfragezeit immer unter 10 ms bleibt. Dies ist ein Game Changer, der CouchDb zu einer Datenbank mit geringer Latenz und Lesefreundlichkeit macht, und dies sollte wirklich nicht übersehen werden.

Um fair und umfassend zu sein, ist der Vorteil, den MongoDb gegenüber CouchDb hat, Werkzeug und Marketing. Sie verfügen über erstklassige Citizen-Tools für alle wichtigen Sprachen und Plattformen, die das Onboarding vereinfachen. Dies ergänzt die Ad-hoc-Abfrage und erleichtert den Übergang von SQL.

CouchDb verfügt nicht über diese Tooling-Ebene - obwohl derzeit viele Bibliotheken verfügbar sind -, aber CouchDb wird als HTTP-API verfügbar gemacht, und es ist daher recht einfach, einen Wrapper in Ihrer Lieblingssprache zu erstellen, um mit ihm zu sprechen. Ich persönlich mag diesen Ansatz, da er das Aufblähen vermeidet und es Ihnen ermöglicht, nur das zu nehmen, was Sie wollen (Prinzip der Schnittstellentrennung).

Daher würde ich sagen, dass die Verwendung des einen oder anderen bei ihren Paradigmen weitgehend eine Frage des Komforts und der Präferenz ist. Der CouchDb-Ansatz "passt einfach" für bestimmte Personen, aber wenn Sie nach dem Erlernen der Datenbankfunktionen (im ausführlichen offiziellen Handbuch ) keinen "Höllen-Ja" -Moment haben, sollten Sie wahrscheinlich weitermachen.

Ich würde davon abraten, CouchDb zu verwenden, wenn Sie nur "das richtige Werkzeug für den richtigen Job" verwenden möchten. weil Sie herausfinden werden, dass Sie es nicht einfach so verwenden können und am Ende sauer sind und Blog-Beiträge wie "Wo sind Joins in CouchDb?" schreiben. und "Wo ist Transaktionsmanagement?". In der Tat ist Couchdb - paradoxerweise - sehr transparent, erfordert aber gleichzeitig einen Paradigmenwechsel und eine Änderung in der Art und Weise, wie Sie Probleme angehen, um wirklich zu glänzen (und wirklich zu arbeiten).

Aber wenn Sie das getan haben, zahlt es sich wirklich aus. Ich persönlich brauche sehr starke Gründe oder einen großen Deal Breaker für ein Projekt, um eine andere Datenbank auszuwählen, aber bisher habe ich noch keine getroffen.


12
Update 2016: Seit der Veröffentlichung der Version 2.0 im September 2016 unterstützt CouchDb sofort einsatzbereite Ad-hoc-Abfragen :)
tobiak777

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.Gilt das nicht für fast alle Datenbanken? Auf diese Weise impliziert dies etwas anderes.
Shelvacu

38

Diese Fragen selbst stellen? Und Sie entscheiden über Ihre DB-Auswahl.

  1. Benötigen Sie Master-Master ? Dann CouchDB. Hauptsächlich unterstützt CouchDB die Master-Master-Replikation, bei der erwartet wird, dass Knoten für längere Zeit getrennt werden. MongoDB würde in dieser Umgebung nicht gut abschneiden.
  2. Benötigen Sie einen maximalen R / W-Durchsatz ? Dann MongoDB
  3. Benötigen Sie ultimative Haltbarkeit für einen einzelnen Server, da Sie nur einen einzigen DB-Server haben werden? Dann CouchDB.
  4. Speichern Sie einen MASSIVEN Datensatz , der bei gleichbleibendem Durchsatz gesplittert werden muss? Dann MongoDB.
  5. Haben Sie starke brauchen Konsistenz der Daten? Dann MongoDB.
  6. Benötigen Sie eine hohe Verfügbarkeit der Datenbank? Dann CouchDB.
  7. Hoffen Sie auf mehrere Datenbanken und mehrere Tabellen / Sammlungen? Dann MongoDB
  8. Sie haben eine mobile App für Offline-Benutzer und möchten deren Aktivitätsdaten mit einem Server synchronisieren? Dann brauchen Sie CouchDB.
  9. Benötigen Sie eine große Auswahl an Abfrage- Engines? Dann MongoDB
  10. Benötigen Sie eine große Community , um DB nutzen zu können? Dann MongoDB

# 9 ist eine virtuelle Verbindung zwischen CouchDB und MongoDB ab CouchDB 2.x.
Flimzy

27

Ich fasse die Antworten in diesem Artikel zusammen:

http://www.quora.com/How-does-MongoDB-compare-to-CouchDB-Was- sind- die- Nachteile-und-Nachteile-von-jedem

MongoDB: Bessere Abfrage, Datenspeicherung in BSON (schnellerer Zugriff), bessere Datenkonsistenz, mehrere Sammlungen

CouchDB: Bessere Replikation mit Master-to-Master-Replikation und Konfliktlösung, Datenspeicherung in JSON (lesbar, besserer Zugriff über REST-Services), Abfrage durch Map-Reduce.

Zusammenfassend ist MongoDB schneller und CouchDB sicherer.

Außerdem: http://nosql.mypopescu.com/post/298557551/couchdb-vs-mongodb


7
Nützliche Antwort, aber die Schlussfolgerung ist schwer zu mögen.
Erik Kaplun

Was meinst du mit "schwer zu mögen"?
Alexis Dufrenoy

23

Beachten Sie ein Problem mit spärlichen eindeutigen Indizes in MongoDB. Ich habe es getroffen und es ist extrem umständlich, es zu umgehen.

Das Problem ist folgendes: Sie haben ein Feld, das eindeutig ist, wenn es vorhanden ist, und Sie möchten alle Objekte finden, bei denen das Feld fehlt. Die Art und Weise, wie spärliche eindeutige Indizes in Mongo implementiert werden, besteht darin, dass Objekte, bei denen dieses Feld fehlt, überhaupt nicht im Index enthalten sind - sie können nicht durch eine Abfrage in diesem Feld abgerufen werden -, {$exists: false}funktionieren einfach nicht.

Die einzige Problemumgehung, die ich mir ausgedacht habe, ist eine spezielle Null-Wertefamilie, bei der ein leerer Wert in ein spezielles Präfix (wie null :) übersetzt wird, das mit einer UUID verkettet ist. Dies ist ein echtes Problem, da man beim Schreiben / Abfragen / Lesen darauf achten muss, dass die leeren Werte geändert werden. Ein großes Ärgernis.

Ich habe noch nie die serverseitige Javascript-Ausführung in MongoDB verwendet (es wird sowieso nicht empfohlen) und ihre Zuordnung / Reduzierung hat eine schreckliche Leistung, wenn es nur einen Mongo-Knoten gibt. Aus all diesen Gründen denke ich jetzt darüber nach, CouchDB auszuprobieren. Vielleicht passt es mehr zu meinem speziellen Szenario.

Übrigens, wenn jemand den Link zum jeweiligen Mongo-Problem kennt, der das Problem des spärlichen eindeutigen Index beschreibt, teilen Sie ihn bitte mit.


3
Es tut mir leid, aber ich habe das quälende Gefühl, dass es keine gute Idee ist und es ist ein Gefühl, das ich gelernt habe, nicht zu ignorieren
eaglestorm

8
Nun, ich kann nicht mit einem Gefühl streiten. Ich weiß nur, dass ich aufgrund der optionalen Felder, die, falls vorhanden, eindeutig sind, spärliche eindeutige Indizes benötigte.
Markieren Sie den

37
Ich verstehe, dass Sie einen tatsächlichen Anwendungsfall haben, der das Problem beschreibt, aber was ist mit meinem Bauch?
Chev

14
Ich weiß nicht. Was ist damit?
Markieren Sie den

2
ROTFL. +1 Alex Ford & Mark für Ihre lustigen Kommentare. :-)) @mark, ich bin mir nicht sicher, ob die von Ihnen aufgelisteten Probleme wirklich einen Wechsel von MongoDB zu CouchDB rechtfertigen. Ich habe weder mit MongoDB noch mit CouchDB gearbeitet, aber mein Bauch sagt mir, dass Sie mit CouchDB auf einige andere komplexe Einschränkungen stoßen und mehr Zeit damit verschwenden werden, diese zu umgehen. Wenn Sie MongoDB jetzt beherrschen, sollten Sie sich wahrscheinlich daran halten. Aber ich war noch nie in Nosql-Land, das ist nur mein Bauch.
MiniQuark

6

Ich bin mir sicher, dass Sie es mit Mongo können (besser vertraut damit), und ziemlich sicher, dass Sie es auch mit Couch können.

Beide sind dokumentationsorientiert (JSON-basiert), sodass keine "Spalten", sondern Felder in Dokumenten vorhanden sind - sie können jedoch vollständig dynamisch sein.

Beide tun es, wenn Sie sich andere Faktoren ansehen möchten, die Sie verwenden sollten: andere Funktionen, die Ihnen wichtig sind, Beliebtheit usw. Google Insights, in der Tat.com-Stellenanzeigen sind Möglichkeiten, die Beliebtheit zu überprüfen.

Sie könnten es einfach versuchen, ich denke, Sie sollten in der Lage sein, Mongo in 5 Minuten laufen zu lassen.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.