NoSQL - MongoDB vs CouchDB [geschlossen]

154

Ich bin ein absoluter Neuling, wenn es um die NoSQL-Bewegung geht. Ich habe viel über MongoDB und CouchDB gehört. Ich weiß, dass es Unterschiede zwischen den beiden gibt. Was empfehlen Sie als ersten Schritt in die NoSQL-Welt?

mpenrow
quelle
Als ersten Schritt ist mongoDB besser, weil es einfacher zu lernen ist, aber einige Probleme hat. Es gibt keine beste Wahl für die Verwendung einer bestimmten noSQL-Datenbank. Dies hängt davon ab, was Sie tun müssen. Überprüfen Sie dokumentenorientiert, Schlüsselwert, grafisch orientiert, spaltenorientiert.
Chris

Antworten:

148

Siehe folgende Links

Update : Ich habe einen großartigen Vergleich von NoSQL- Datenbanken gefunden.

MongoDB (3.2)

  • Geschrieben in: C ++
  • Hauptpunkt: JSON-Dokumentenspeicher
  • Lizenz: AGPL (Treiber: Apache)
  • Protokoll: Benutzerdefiniert, binär (BSON)
  • Master / Slave-Replikation (Auto-Failover mit Replikatsätzen)
  • Sharding eingebaut
  • Abfragen sind Javascript-Ausdrücke
  • Führen Sie beliebige Javascript-Funktionen serverseitig aus
  • Hat geografische Indizierung und Abfragen
  • Mehrere Speicher-Engines mit unterschiedlichen Leistungsmerkmalen
  • Leistung über Funktionen
  • Dokumentenvalidierung
  • Tagebuch schreiben
  • Leistungsstarkes Aggregationsframework
  • Auf 32-Bit-Systemen auf ~ 2,5 GB begrenzt
  • Textsuche integriert
  • GridFS zum Speichern von Big Data + Metadaten (eigentlich kein FS)
  • Rechenzentrum bewusst

Am besten geeignet : 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.

Zum Beispiel : Für die meisten Dinge, die Sie mit MySQL oder PostgreSQL tun würden, aber vordefinierte Spalten halten Sie wirklich zurück.

CouchDB (1.2)

  • Geschrieben in: Erlang
  • Hauptpunkt: DB-Konsistenz, Benutzerfreundlichkeit
  • Lizenz: Apache
  • Protokoll: HTTP / REST
  • Bidirektionale (!) Replikation,
  • kontinuierlich oder ad-hoc,
  • mit Konflikterkennung,
  • also Master-Master-Replikation. (!)
  • MVCC - Schreibvorgänge blockieren keine Lesevorgänge
  • Frühere Versionen von Dokumenten sind verfügbar
  • Crash-only (zuverlässiges) Design
  • Muss von Zeit zu Zeit verdichtet werden
  • Ansichten: eingebettete Karte / reduzieren
  • Formatierungsansichten: Listen & Shows
  • Serverseitige Dokumentenüberprüfung möglich
  • Authentifizierung möglich
  • Echtzeit-Updates über '_changes' (!)
  • Anhangshandhabung

Am besten geeignet : Zum Sammeln von gelegentlich wechselnden Daten, für die vordefinierte Abfragen ausgeführt werden sollen. Orte, an denen die Versionierung wichtig ist.

Zum Beispiel : CRM, CMS-Systeme. Die Master-Master-Replikation ist eine besonders interessante Funktion, die eine einfache Bereitstellung an mehreren Standorten ermöglicht.

amra
quelle
1
Für alle, die sich mit der Serverlizenz von MongoDB als AGPL befassen, kann ein Blick auf die Lizenzierungsrichtlinie von mongodb eine gewisse Erleichterung bringen.
Patrick
@amra Du meinst also, wenn ich die Daten speichere und nur lese, ist die Verwendung von couchdb die beste Wahl?
Verystrongjoe
@verystrongjoe Es hängt von der Komplexität der Daten und Abfragen ab. Man kann im Allgemeinen nicht sagen, welches das beste ist.
Amra
@amra Ok. Aber .. Wenn es Daten ansammelt und die Daten auswählt und ich zwischen Mongo und Couch wählen muss, welches ist besser?
Verystrongjoe
CouchApps werden seit ~ 2012 "nicht mehr empfohlen": docs.couchdb.com/de/latest/ddocs
Tim Sylvester
123

Wenn Sie aus der MySQL-Welt kommen, wird sich MongoDB aufgrund seiner abfrageähnlichen Sprachunterstützung für Sie viel natürlicher "anfühlen".

Ich denke, das macht es für viele Menschen so freundlich.

CouchDB ist fantastisch, wenn Sie die wirklich großartige Master-Master-Replikationsunterstützung mit einem Multi-Node-Setup nutzen möchten, möglicherweise in verschiedenen Rechenzentren oder ähnlichem.

Die Replikation von MongoDB (Replikatsätze) ist ein Master-Slave-Slave-Slave- * Setup. Sie können nur in einem Replikatsatz auf den Master schreiben und von einem dieser Sätze lesen.

Für eine Standard-Site-Konfiguration ist das in Ordnung. Es ist sehr gut auf die MySQL-Nutzung abgestimmt.

Wenn Sie jedoch versuchen, einen globalen Dienst wie ein CDN zu erstellen, der alle globalen Knoten synchronisieren muss, obwohl sie alle lesen / schreiben, ist die Replikation in CouchDB ein großer Segen für Sie.

Während MongoDB eine abfrageartige Sprache hat, die Sie verwenden können und die sich sehr intuitiv anfühlt, verfolgt CouchDB einen "Kartenreduzierungs" -Ansatz und diese Konzepte von Ansichten. Es fühlt sich anfangs seltsam an, aber wenn man den Dreh raus hat, fühlt es sich wirklich intuitiv an.

Hier ist eine kurze Übersicht, damit es Sinn macht:

  • CouchDB speichert alle Ihre Daten in einem B-Baum
  • Sie können es nicht dynamisch mit etwas wie "SELECT * FROM user WHERE ..." "abfragen".
  • Stattdessen definieren Sie diskrete "Ansichten" Ihrer Daten ... "hier ist eine Ansicht aller meiner Benutzer", "hier ist eine Ansicht aller Benutzer älter als 10" "hier ist eine Ansicht aller Benutzer älter als 30" und demnächst.
  • Diese Ansichten werden mithilfe des Map-Reduce-Ansatzes definiert und als JavaScript-Funktionen definiert.
  • Wenn Sie eine Ansicht definieren, beginnt die Datenbank, alle Dokumente der Datenbank, der Sie die Ansicht zugewiesen haben, durch sie zu führen und die Ergebnisse Ihrer Funktionen als "Index" für diese Daten aufzuzeichnen.
  • Es gibt einige grundlegende Abfragen, die Sie in den Ansichten ausführen können, z. B. das Abfragen eines bestimmten Schlüssels (ID) oder eines ID-Bereichs, unabhängig davon, was Ihre Map / Reduce-Funktion tut.
  • Lesen Sie diese Folien durch , es ist die beste Klarstellung der Karte / Verkleinerung in Couch, die ich gesehen habe.

Beide Quellen verwenden also JSON-Dokumente, aber CouchDB folgt diesem Ansatz: "Jeder Server ist ein Master und kann mit der Welt synchronisieren". Dieser Ansatz ist fantastisch, wenn Sie ihn benötigen, während MongoDB wirklich das MySQL der NoSQL-Welt ist.

Also, wenn das eher nach dem klingt, was Sie brauchen / wollen, dann machen Sie das.

Kleine Unterschiede wie das Binärprotokoll von Mongo gegenüber der RESTful-Schnittstelle von CouchDB sind nur geringfügige Details.

Wenn Sie rohe Geschwindigkeit und Hölle mit Datensicherheit wollen, können Sie Mongo schneller als CouchDB laufen lassen , da Sie ihm sagen können, dass er nicht über genügend Arbeitsspeicher verfügt und keine Daten auf die Festplatte überträgt, außer in spärlichen Intervallen.

Sie können dasselbe mit Couch tun, aber das HTTP-basierte Kommunikationsprotokoll wird in dieser "Geschwindigkeit über alles" 2-4x langsamer sein als die rohe binäre Kommunikation mit Mongo! Szenario.

Denken Sie daran, dass verrückte verrückte Geschwindigkeit nutzlos ist, wenn ein Serverabsturz oder ein Festplattenfehler Ihre Datenbank beschädigt und in Vergessenheit gerät, sodass der Datenpunkt nicht so erstaunlich ist, wie es scheint (es sei denn, Sie betreiben Echtzeit-Handelssysteme an der Wand) Straße, in diesem Fall schauen Sie sich Redis an).

Hoffe das alles hilft!

Riad Kalla
quelle
"MongoDB ist wirklich das MySQL der NoSQL-Welt" - Ich weiß nicht, ob sich die Dinge geändert haben, aber dieser Artikel von 2014 ist anderer Meinung: sarahmei.com/blog/2013/11/11/why-you-should-never-use- mongodb
Onur Yıldırım
Obwohl ich denke, dass der Kommentar immer noch funktioniert, haben Sie Recht, VIEL hat sich im letzten halben Jahrzehnt geändert und mein Kommentar sollte leicht verworfen werden können.
Riyad Kalla
1

Es gibt jetzt viel mehr NoSQL-Datenbanken auf dem Markt als jemals zuvor. Ich empfehle sogar einen Blick auf den Gartner Magic Quadrant, wenn Sie nach einer Datenbank suchen, die sich auch für Unternehmensanwendungen eignet, basierend auf Support, Erweiterbarkeit, Verwaltung und Kosten.

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

Ich möchte Couchbase jedem empfehlen, der es noch nicht ausprobiert hat, aber nicht auf der im Bericht (2.5.1) gezeigten Version basiert, da es fast zwei Revisionen hinter dem heutigen CB Server liegt und sich der Veröffentlichung von 4.0 in 2H15 nähert .

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

Der andere Teil von Couchbase als Anbieter / Produkt ist, dass es sich um einen Mehrzweck-DB-Typ handelt. Es kann als reiner K / V-Speicher, dokumentenorientierte Datenbank mit mehrdimensionaler Skalierung, Memcached, Cache-beiseite mit Persistenz fungieren und unterstützt ANSI 92-kompatibles SQL mit automatischen Verknüpfungen, Replikation auf DR-Cluster per Knopfdruck und Es ist sogar eine mobile Komponente in das Ökosystem integriert.

Wenn nichts anderes, lohnt es sich, die neuesten Benchmarks zu überprüfen:

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

Austin Gonyou
quelle