MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Der Kampf der NoSQL-Datenbanken – Vergleich von MongoDB und CouchDB

MongoDB und CouchDB sind beides Typen von dokumentbasierten NoSQL-Datenbanken. Eine Dokumentendatenbank wird auch als mDocument Store bezeichnet und wird normalerweise verwendet, um das Dokumentenformat der halbstrukturierten Daten und deren detaillierte Beschreibung zu speichern. Es ermöglicht die Erstellung und Aktualisierung von Programmen, ohne auf das Masterschema verweisen zu müssen. Inhaltsverwaltung und Datenverarbeitung in der mobilen Anwendung sind zwei der Anwendungsbereiche des Dokumentenspeichers.

MongoDB-Übersicht

MongoDB war das Startup von 10gen, das 2007 entstand. Aus der Familie der Dokumentenspeicher stammend, ist es eine der typischen schemafreien NoSQL-Datenbanken mit vergleichsweise hoher Leistung, Skalierbarkeit und Reichhaltigkeit in Datenverarbeitungsfunktionen. Diese Open-Source-Datenbank ist in C++ geschrieben und verwendet dynamische Schemas. Die Architektur von MongoDB enthält Dokumente, die basierend auf ihrer Struktur in Sammlungen gruppiert sind. Diese Datenbank verwendet BSON. BSON ist die binäre Darstellung von JSON und unterstützt die Dokumentenspeicherung und den Datenaustausch. In MongoDB können Geschäftsthemen in einer minimalen Anzahl von Dokumenten gespeichert werden, die primär oder sekundär indiziert werden können, ohne sie in mehrere relationale aufzuteilen.

Neben den oben erwähnten Funktionen von MongoDB bietet es auch eine große Sammlung von Replikatsätzen, wobei jeder Satz mehr als eine Kopie von Daten enthalten kann. In den Replikatsätzen werden alle primären Funktionen (Lesen und Schreiben) auf dem primären Satz ausgeführt, während sekundäre Sätze im Falle eines Ausfalls des ersteren verwendet werden. MongoDB enthält Sharding, das den Skalierungsprozess horizontal nutzt. Die Lastausgleichseigenschaft dieser Dokumentenspeicherdatenbank wird durch die Tatsache gerechtfertigt, dass sie auf mehreren Servern läuft, wodurch eine Duplizierung von Daten und ein Ausgleich der Last bereitgestellt wird. Im Gegenzug bietet es auch Backup während des Hardwareausfalls. Es verwendet auch ein Grid-Dateisystem, das die jeweilige Datei in verschiedene Teile unterteilt und diese separat speichert.

Die gemeinsamen Merkmale von MongoDB:

  • Das Datenmodelldesign reduziert die Notwendigkeit von Joins und bietet eine einfache Evolution des Schemas.
  • Hohe Performance, da weder Join noch Transaktionen enthalten sind, die einen schnellen Zugriff ermöglichen und somit die Performance erhöht wird.
  • Hohe Verfügbarkeit durch die Einbindung von Replikatsätzen, die bei Ausfällen Backups bieten können und außerdem sehr robust sind.
  • Einfache Skalierbarkeit.
  • Die Sharding-Eigenschaft von MongoDB ermöglicht eine schnelle und effiziente Ausführung der verteilten Funktionen. Dies ist auch möglich, da es die horizontale Skalierung von Daten unterstützt.
  • Die Sprache ist in der Abfrage sehr reichhaltig. MongoDB hat eine eigene Abfragesprache namens Mongo-Abfragesprache, die SQL ersetzen kann. In ähnlicher Weise können Utility-Funktionen und Map or Reduce komplizierte Aggregatfunktionen ersetzen.
Abbildung 1:MongoDB-Architektur

Übersicht über CouchDB

CouchDB, ein Produkt der Apache Software Foundation und inspiriert von Lotus Notes, ist ebenfalls eine dokumentenbasierte Open-Source-NoSQL-Datenbank, die sich hauptsächlich auf einfache Verwendung konzentriert. Es ist eine Einzelknotendatenbank, die genau wie andere Datenbanken funktioniert. Es beginnt im Allgemeinen mit der Einzelknoteninstanz, kann jedoch nahtlos auf den Cluster aktualisiert werden. Es ermöglicht dem Benutzer, eine einzelne Datenbank auf vielen Servern oder VMs auszuführen. Ein CouchDB-Cluster bietet im Vergleich zu CouchDB mit einem einzelnen Knoten eine hohe Kapazität und Verfügbarkeit. Es verwendet Erlang, eine Allzwecksprache. Wie MongoDB verwendet es auch Javascript und map/reduce. Es speichert Daten in Form einer Sammlung von Dokumenten und nicht als Tabellen. Die aktualisierte CouchDB ist lockless, was bedeutet, dass die Datenbank während des Schreibens nicht gesperrt werden muss. Die Dokumente in dieser Datenbank verwenden auch das HTTP-Protokoll und JSON sowie die Möglichkeit, Nicht-JSON-Dateien an sie anzuhängen. CouchDB ist also mit jeder Anwendung oder Software kompatibel, die das JSON-Format unterstützt.

Die gemeinsamen Eigenschaften von CouchDB

  • Ein CouchDB-Server hostet benannte Datenbanken, die Dokumente mit einem eindeutigen Namen in der Datenbank speichern, und CouchDB bietet eine RESTful-HTTP-API zum Lesen und Aktualisieren (Hinzufügen, Bearbeiten, Löschen) von Datenbankdokumenten
  • CouchDB bietet eine browserbasierte GUI zur Verwaltung der Daten, Berechtigungen und Konfiguration.
  • CouchDB bietet die einfachste Form der Replikation.
  • CouchDB erleichtert die Authentifizierung und Sitzungsunterstützung:um die Authentifizierung über ein Sitzungscookie wie eine Webanwendung offen zu halten.
  • CouchDB bietet Sicherheit auf Datenbankebene, wobei die Berechtigungen pro Datenbank in Leser und Administratoren getrennt sind. Leser dürfen die CouchDB-Datenbank lesen und schreiben.
  • CouchDB validiert die in die Datenbank eingefügten Daten unter Verwendung von Authentifizierung, um sicherzustellen, dass der Ersteller und die Login-Session-ID identisch sind.
Abbildung 2:CouchDB-Architektur

Die REST-API wird zum Schreiben und Abfragen der Daten verwendet . Es bietet auch das Lesen, Hinzufügen, Bearbeiten und Löschen von Dokumenten. Es verwendet das ACID-Modell anstelle von BASE by MVCC-Implementierung. Genauso wie MongoDB die Replikation von Geräten unterstützt, wenn sie offline sind. Es verwendet ein spezielles Replikationsmodell namens Eventual Consistency. CouchDB ist in Bezug auf Daten sehr und ernsthaft zuverlässig. Single-Node-Datenbanken verwenden eine absturzsichere Datenstruktur, die nur angehängt werden kann, und eine Multimode- oder Cluster-Datenbank kann die Daten redundant speichern, sodass sie jederzeit verfügbar sind, wenn der Benutzer sie benötigt. CouchDB kann von großen Clustern wie globalen Clustern bis hin zu kleinen Clustern wie Mobilgeräten skaliert werden. Die Fähigkeit, auf beliebigen Android- oder iOS-Geräten ausgeführt zu werden, hebt CouchDB von anderen Datenbanken ab.

Die CouchDB-Architektur wird verteilt, die bidirektionale Synchronisation unterstützt. Es erfordert kein Schema, da es eine eindeutige ID verwendet. Obwohl CouchDB der AP-Funktion (Availability and Partition Tolerant) des CAP-Modells folgt, folgt es, um die gehandelte Konsistenz zu überwinden, praktisch dem ACID-Modell.

Vergleiche zwischen CouchDB und MongoDB

Vergleichsfunktion

CouchDB

MongoDB

Datenmodell

Es folgt dem dokumentorientierten Modell und die Daten werden im JSON-Format dargestellt.

Es folgt dem dokumentorientierten Modell, aber die Daten werden im BSON-Format dargestellt.

Oberfläche

CouchDB verwendet eine HTTP/REST-basierte Schnittstelle. Es ist sehr intuitiv und sehr gut gestaltet.

MongoDB verwendet das Binärprotokoll und das benutzerdefinierte Protokoll über TCP/IP.

Objektspeicherung

Bei CouchDB enthält die Datenbank Dokumente.

In MongoDB enthält die Datenbank Sammlungen und die Sammlung Dokumente.

Geschwindigkeit

Die Lesegeschwindigkeit ist entscheidend für die Datenbank, MongoDB ist schneller als CouchDB

MongoDB bietet schnellere Lesegeschwindigkeiten.

Mobiler Support

CouchDB kann auf Apple iOS- und Android-Geräten ausgeführt werden und bietet Unterstützung für mobile Geräte.

Keine mobile Unterstützung bereitgestellt

Größe

Die Datenbank kann mit CouchDB wachsen; MongoDB eignet sich besser für schnelles Wachstum, wenn die Struktur nicht von Anfang an klar definiert ist.

Wenn wir eine schnell wachsende Datenbank haben, ist MongoDB die bessere Wahl.

Abfragemethode

Abfragen verwenden Map-Reduce-Funktionen. Obwohl es eine elegante Lösung sein mag, kann es für Personen mit herkömmlicher SQL-Erfahrung schwieriger sein, es zu lernen.

MongoDB folgt Map/Reduce (JavaScript) und erstellt eine sammlungs- und objektbasierte Abfragesprache. Für Benutzer mit SQL-Kenntnissen ist MongoDB einfacher zu erlernen, da es eine engere Syntax hat.

Replikation

CouchDB unterstützt die Master-Master-Replikation mit benutzerdefinierten Konfliktlösungsfunktionen.

MongoDB unterstützt Master-Slave-Replikation.

Gleichzeitigkeit

Es folgt dem MVCC (Multi-Version Concurrency Control).

Direkt aktualisieren.

Einstellungen

CouchDB bevorzugt Verfügbarkeit.

MongoDB bevorzugt Konsistenz.

Leistungskonsistenz

CouchDB ist sicherer als MongoDB.

MongoDB, die Datenbank enthält Sammlungen und Sammlungen enthalten Dokumente.

Konsistenz

CouchDB ist schließlich konsistent.

MongoDB ist stark konsistent.

Geschrieben in

Es ist in Erlang geschrieben.

Es ist in C++ geschrieben.

Analyse

Wenn wir eine Datenbank benötigen, die läuft, mobil ist, Master-Master-Replikation oder Dauerhaftigkeit auf einem Server benötigt, dann ist CouchDB eine gute Wahl.

Wenn wir nach maximalem Durchsatz suchen oder eine schnell wachsende Datenbank haben, ist MongoDB die richtige Wahl.

CouchDB und MongoDB:Sehr unterschiedliche Abfragen

CouchDB und MongDB sind dokumentenorientierte Datenspeicher, die mit JSON-Dokumenten arbeiten, aber wenn es um Abfragen geht, könnten beide Datenbanken unterschiedlicher nicht sein. CouchDB erfordert vordefinierte Ansichten (die im Wesentlichen JavaScript-MapReduce-Funktionen sind) und MongoDB unterstützt dynamische Abfragen (im Grunde das, was wir von normalen RDBMS-Ad-hoc-SQL-Abfragen gewohnt sind).

Zum Beispiel, um mit Groovys RESTClient einige Daten in CouchDB einzufügen und einen RESTful-Post wie folgt auszugeben:

import static groovyx.net.http.ContentType.JSON

import groovyx.net.http.RESTClient

 def client = new RESTClient("http://localhost:5498/")

response = client.put(path: "parking_tickets/1280002020",

  contentType: JSON,

  requestContentType:  JSON,

  body: [officer: "Micheal Jordan",

      location: "189 Berkely Road",

      vehicle_plate: "KL5800",

      offense: "Parked in no parking zone",

      date: "2020/02/01"])

Beispielcode für eine Funktion zum Abfragen von Dokumenten, deren Beamteneigentum "Micheal Jordan" ist:

function(doc) {

  if(doc.officer == "Micheal Jordan"){

emit(null, doc);

  }

}

Wenn wir eine HTTP-GET-Anforderung an den Namen dieser Ansicht senden, können wir mindestens ein Dokument wie unten erwarten:

response = client.get(path: "parking_tickets/_view/by_name/officer_grey",

     contentType: JSON, requestContentType: JSON)

assert response.data.total_rows == 1

response.data.rows.each{

   assert it.value.officer == "Micheal Jordan"

}

MongoDB funktioniert ähnlich wie wir es von normalen Datenbanken gewohnt sind:Wir können zur Laufzeit alles abfragen, was unser Herz begehrt.

Einfügen derselben Instanz eines Parktickets mit dem nativen Java-Treiber von MongoDB:

DBCollection coll = db.getCollection("parking_tickets");

BasicDBObject doc = new BasicDBObject();



doc.put("officer", "Micheal Jordan");

doc.put("location", "189 Berkely Road ");

doc.put("vehicle_plate", "KL5800");

//...

coll.insert(doc);

So fragen Sie ein Ticket von MongoDB ab, das von Officer Micheal Jordan ausgestellt wurde, indem Sie einfach eine Abfrage zum Eigentum des Officers stellen:

BasicDBObject query = new BasicDBObject();

query.put("officer", "Micheal Jordan");

DBCursor cur = coll.find(query);

while (cur.hasNext()) {

   System.out.println(cur.next());

}

Fazit

In diesem Blog haben wir zwei dokumentbasierte NoSQL-Datenbanken verglichen – MongoDB und CouchDB. Die Tabelle gibt einen Überblick über die wichtigsten parametrischen Vergleiche zwischen diesen beiden Datenbanken. Wie wir gesehen haben, bestimmt die Priorität des Projekts die Auswahl des Systems. Zu den Hauptunterschieden gehören die Replikationsmethode und die Plattformunterstützung. Aus den Vergleichen geht auch hervor, dass MongoDB die bessere Wahl ist als CouchDB, wenn die Anwendung mehr Effizienz und Geschwindigkeit erfordert. Wenn der Benutzer seine Datenbank auf Mobilgeräten ausführen muss und auch eine Multi-Master-Replikation benötigt, ist CouchDB eine naheliegende Wahl. Außerdem ist MongoDB besser geeignet als CouchDB, wenn die Datenbank schnell wächst. Der Hauptvorteil der Verwendung von CouchDB besteht darin, dass es auf mobilen Geräten (Android und iOS) und nicht auf MongoDB unterstützt wird. Im Grunde erfordern unterschiedliche Anwendungsanforderungen je nach Szenario unterschiedliche Datenbanken.

Wir haben festgestellt, dass MongoDB etwas besser ist als CouchDB, da es die SQL-ähnliche Struktur der Abfrage verwendet, und das gleiche ist in der ersteren einfacher. Auch für die Verwendung dynamischer Abfragen ist MongoDB die weitaus bessere Wahl. Hinsichtlich der Sicherheit in beiden Datenbanken wird noch geforscht, und es ist schwer zu sagen, welche davon eine bessere und sicherere Umgebung bietet.