Was ist der Unterschied zwischen Cassandra und MongoDB?


Was ist der Unterschied zwischen Cassandra und MongoDB?

Apache Cassandra und MongoDB sind zwei NoSQL-Datenbanken, die Daten in einem nicht tabellarischen Format speichern. Cassandra ist eine frühe NoSQL-Datenbank mit einem Hybriddesign zwischen einem tabellarischen Speicher und einem Schlüssel-Werte-Speicher. Sie wurde entwickelt, um Daten für Anwendungen zu speichern, die eine schnelle Lese- und Schreibleistung erfordern. Im Gegensatz dazu ist MongoDB eine Dokumentdatenbank, die für den allgemeinen Gebrauch entwickelt wurde. Es verfügt über ein flexibles Datenmodell, mit dem Sie unstrukturierte Daten in einem optimierten JSON-Format speichern können, das als Binary JSON oder BSON bezeichnet wird. Die MongoDB-Datenbank bietet vollständige Indexierungsunterstützung und Replikation mit umfangreichen und intuitiven APIs.

Lesen Sie mehr über Apache Cassandra »

Lesen Sie mehr über MongoDB »

Was sind die Ähnlichkeiten zwischen Cassandra und MongoDB?

Apache Cassandra und MongoDB gehören beide zur NoSQL-Datenbankgruppe. NoSQL-Datenbanken können strukturierte, unstrukturierte und halbstrukturierte Daten ohne Datenbankschema speichern.

Die Datenspeicherung in NoSQL-Datenbanken ist nicht durch das Tabellenformat und die Beziehungen zwischen Tabellen eingeschränkt, anders als in einem herkömmlichen relationalen Datenbankverwaltungssystem. Sie können Daten beliebig auf mehreren Knoten partitionieren und replizieren, um effizient zu skalieren. 

Darüber hinaus sind Cassandra und frühe Versionen von MongoDB Open Source. Das bedeutet, dass Sie den Quellcode dieser NoSQL-Datenbanken herunterladen und nach Belieben konfigurieren können.

Facebook entwickelte Cassandra und veröffentlichte es dann als Open-Source-Projekt mit Apache. MongoDB wurde von einer kleinen Gruppe von Entwicklern unter MongoDB, Inc. entwickelt. Alle Versionen von MongoDB, die vor dem 16. Oktober 2018 veröffentlicht wurden, sind unter der GNU Affero General Public License verfügbar.

Lesen Sie mehr über NoSQL »

Lesen Sie mehr über Open Source »

Unterschiede im Datenmodell: Cassandra vs. MongoDB

Obwohl MongoDB und Apache Cassandra beide NoSQL-Datenbanken sind, speichern und verwalten sie Daten unterschiedlich.

Cassandra

Cassandra speichert Daten als Schlüssel-Werte-Speicher. Er ermöglicht Ihnen, Tabellen mit Zeilen und Spalten zu definieren, aber die tabellarische Struktur wird im eigentlichen Speicher nicht verwendet. Stattdessen wird das breite spaltenorientierte Datenbankmodell verwendet, sodass jede Zeile in der Tabelle einen anderen Satz von Spalten haben kann.

Sie können Spalten je nach Datentyp oder Verwendung in Spaltenfamilien gruppieren. Jede Zeile hat einen Primärschlüssel, mit dem Sie schnell Daten aus Cassandra lesen können.

Die Tabellenstruktur von Apache Cassandra kann im folgenden Beispiel visualisiert werden.

Kunden-ID 1

Spalte - Name

Spalte - Land

 
 

Wert - John Doe

Wert - Vereinigte Staaten

 
Kunden-ID 2

Spalte - Name 

Spalte - Alter

Spalte - E-Mail

 

Wert - Jane Doe

Wert - 35

Wert - jane_doe@example.com

MongoDB

Im Gegensatz dazu speichert MongoDB Daten ohne Schema und verwendet ein optimiertes binäres JSON-Format (BSON). Es kann mehrere Datentypen in einem einzigen Dokument speichern, ähnlich wie JSON-Objekte, und es dann mit BSON serialisieren.

MongoDB organisiert Dokumente in Sammlungen, die Daten mit unterschiedlichen Strukturen enthalten können. Das Datenmodell ist flexibel und kann große Mengen unstrukturierter Daten verarbeiten.

Im Folgenden finden Sie ein Beispiel für die Kundendaten in MongoDB.

Kunden: [

{

  Kunden_ID: „1",

  Name: „John Doe“,

  Land: „Vereinigte Staaten“

},

{

  Kunden_ID: „2",

  Alter: „35“

  E-Mail: „jane_doe@example.com

}]

Architektonische Unterschiede: Cassandra vs. MongoDB

Aufgrund der Unterschiede in ihren Datenmodellen implementieren Cassandra und MongoDB verschiedene Datenbankfunktionen unterschiedlich.

Grundeinheit des Speichers

In Cassandra sind Sorted String Tables (SSTables) die grundlegende Speichereinheit, die verwendet wird, um Daten auf der Festplatte zu speichern. Eine SSTable ist eine Datei, die einen sortierten Satz von Schlüssel-Werte-Paaren für eine bestimmte Spaltenfamilie (Tabelle) und Partition enthält. SSTables sind unveränderlich, was bedeutet, dass sie, sobald sie geschrieben wurden, nicht mehr geändert werden können. 

In MongoDB ist die grundlegende Speichereinheit ein Dokument. Ein Dokument besteht aus einer Reihe von Schlüssel-Werte-Paaren, wobei die Schlüssel Zeichenfolgen sind und die Werte verschiedener Typen sein können. Werte können beispielsweise andere Dokumente, Arrays, Zeichenfolgen, Zahlen, Daten und boolesche Werte sein. Dokumente werden in Sammlungen gespeichert.

Abfragesprache

Eine Abfragesprache sind die Anweisungen, die Sie verwenden, um Daten aus der Datenbank einzufügen und abzurufen.

Cassandra Query Language (CQL) ist die Abfragesprache, die Sie auf Cassandra verwenden. Obwohl es eine ähnliche Syntax und Struktur wie SQL hat, hat Apache CQL entwickelt, um mit dem Spaltenfamilien-Datenmodell zu arbeiten.

Andererseits verwendet MongoDB die MongoDB Query Language (MQL), die ähnliche Befehle wie Node.js enthält. MQL unterstützt CRUD-Operationen (Erstellen, Lesen, Aktualisieren und Löschen). Sie können MQL-Befehle in der MongoDB-Shell schreiben.

Indizierung

Die Indizierung ist eine Technik, die in Datenbanken verwendet wird, um die Geschwindigkeit und Effizienz von Datenabrufvorgängen zu verbessern. Dabei wird eine Datenstruktur erstellt, die die Werte einer oder mehrerer Spalten in einer Datenbanktabelle dem physischen Speicherort der entsprechenden Daten auf der Festplatte zuordnet.

Cassandra unterstützt zwei Arten von Indizes:

  • Sekundäre Indizes für einzelne Spalten
  • SSTable-angehängte sekundäre Indizes (SASI) Indizes auf mehreren Spalten

SASI-Indizes speichern Indexdaten direkt in den SSTables. Sie unterstützen komplexe Abfragen wie Bereich, Präfix und Volltextsuche in Spalten mit einer großen Anzahl von Einzelwerten.

Im Gegensatz dazu unterstützt MongoDB die Indizierung auf Sammlungsebene und Feldebene. Es bietet mehrere Indextypen wie Einzelfeld, Verbundindex und Mehrfachschlüssel. Es bietet auch diese Indizes:

  • spezialisierter Geodatenindex für geografisch verteilte Daten
  • ein Textsuchindex für große Textdatenmengen
  • Hash-Indizes und geclusterte Indizes für numerische Daten

Nebenläufigkeit

In Datenbanken bezieht sich Parallelität darauf, dass mehrere Benutzer oder Prozesse gleichzeitig auf Datenbanktransaktionen zugreifen und diese ausführen können, ohne sich gegenseitig zu stören. 

Cassandra erreicht Parallelität durch Plattenspielerkonsistenz und Atomizität auf Zeilenebene. Es kann jeweils nur ein einziger Benutzer an einer einzigen Zeile arbeiten.

Aus Gründen der Plattenspielerkonsistenz verwaltet jeder Replikatknoten eine Vektoruhr. Dabei handelt es sich um eine Datenstruktur, die den Versionsverlauf der zugehörigen Daten verfolgt. Wenn ein Schreibvorgang ausgeführt wird, wird die Vektoruhr aktualisiert, um die neue Version wiederzugeben. Wenn ein Lesevorgang ausgeführt wird, gibt Cassandra die Version mit dem höchsten Zeitstempel für alle Replikate zurück, wodurch sichergestellt wird, dass immer die neueste Version der Daten zurückgegeben wird.

Im Gegensatz dazu unterstützt MongoDB Mechanismen für die gleichzeitige Kontrolle mehrerer Versionen (MVCC). MVCC ermöglicht die gleichzeitige Existenz mehrerer Versionen desselben Datendokuments. Jedes Dokument hat eine eindeutige Revisions-ID, die bei jeder Aktualisierung erhöht wird. Sperren auf Dokumentenebene und MVCC bieten eine robustere Parallelitätsstrategie.

Verfügbarkeit

Verfügbarkeit bedeutet, dass Sie sicherstellen, dass es auch bei Serverausfällen zu keinen Datenausfällen kommt. Sowohl Cassandra als auch MongoDB stellen die Verfügbarkeit sicher, indem sie Daten über mehrere Serverknoten replizieren.

In Apache Cassandra enthält jeder Knoten im Cluster Datenreplikate für andere Knoten. Jede Knotenkoordinate wird an den richtigen Knoten gelesen, um Daten zu schreiben oder abzurufen. Gleichzeitig repariert es auch Daten, die zwischen den Knoten nicht mehr konsistent sind. Dies kann sich auf die Leistung im großen Maßstab auswirken.

Im Gegensatz dazu verwendet MongoDB die Replikation eines einzelnen primären Knotens, um eine hohe Datenverfügbarkeit zu gewährleisten. MongoDB repliziert Daten in Replikatgruppen. Nur ein primärer Knoten empfängt die Schreibvorgänge, und die anderen Knoten replizieren einfach Daten vom primären Knoten. Der primäre Knoten erzeugt jedoch einen einzigen Fehlerpunkt.

Skalierbarkeit

Sowohl Cassandra als auch MongoDB ermöglichen Sharding — eine Technik zur horizontalen Partitionierung von Daten über mehrere Knoten in einem Cluster. Wenn Sie beispielsweise Tausende von Kunden haben, partitionieren Sie die Daten, sodass jeder Knoten nur die Informationen einiger hundert Kunden enthält. Auf diese Weise können Sie Ihre Datenbank skalieren, ohne Engpässe zu verursachen.

Cassandra verwendet einen verteilten Hash-Algorithmus, der als konsistentes Hashing bezeichnet wird, um festzustellen, welcher Knoten für einen bestimmten Datenwert verantwortlich ist. Cassandra unterstützt auch virtuelle Knoten (vnodes), die es einem einzelnen physischen Knoten ermöglichen, mehrere Datenbereiche zu haben.

Im Gegensatz dazu verwendet MongoDB Sharding-Schlüssel, um zu ermitteln, wohin der Datenwert gelangen kann. Datenbankadministratoren können Sharding-Schlüssel definieren, um die Daten zu partitionieren. Sie können die Daten anhand von Faktoren wie geografischer Lage, alphabetischer Reihenfolge oder einem anderen System unterteilen, das für Ihren Datensatz am effizientesten ist.

Wann sollte Cassandra verwendet werden vs. MongoDB

Die hohe Verfügbarkeit und die verteilte Architektur von Cassandra machen es zu einer guten Wahl für Hochverfügbarkeitsanforderungen. Die Fähigkeit von MongoDB, unstrukturierte Daten mit einem dokumentenorientierten Ansatz zu verarbeiten, macht es für Systeme nützlich, in denen sich Daten ständig ändern. 

Hier sind einige Faktoren, die Sie berücksichtigen sollten, wenn Sie sich zwischen den beiden entscheiden.

Format der Daten

Apache Cassandra hat ein strukturierteres Datenspeichersystem als MongoDB. Wenn die Daten, mit denen Sie arbeiten, in einem festen Format vorliegen, ist Cassandra besser geeignet.

Wenn die Daten dynamischer sind und keine konsistente Struktur haben, funktioniert MongoDB besser.

Verfügbarkeit

MongoDB hat einen primären Knoten und dann eine Reihe von Replikaten. Wenn der primäre Knoten ausfällt, verbringt MongoDB einige Minuten damit, einen Replikatknoten auszuwählen, der ersetzt werden soll. Dies kann zu geringen Ausfallzeiten führen.

Cassandra verwendet ein verteiltes Knotensystem mit vielen Masterknoten, das eine Verfügbarkeit von 100 % gewährleistet. 

Skalierbarkeit

MongoDB gibt Ihnen mehr Kontrolle bei der Skalierung. Sie können je nach Ihren Anforderungen entscheiden, wie Daten knotenübergreifend partitioniert werden, und massiv verteilte Datenbanken in großem Maßstab verwalten.

Die Leistung von Cassandra kann je nach Datenwerten bei Skalierung leicht sinken.

Abfragesprache

Sowohl Cassandra Query Language (CQL) als auch MongoDB Query Language (MQL) sind hocheffektive Abfragesprachen. CQL ist SQL jedoch viel ähnlicher, sodass Sie CQL problemlos verwenden können, wenn Sie bereits SQL-Kenntnisse haben.

MQL hat unterschiedliche Implementierungen und Syntax und kann eine steilere Lernkurve haben.

Unterstützung für Programmiersprachen

MongoDB unterstützt zwölf Programmiersprachen: C, C++, C#, Go, Java, Node.js, PHP, Python, Ruby, Rust, Scala und Swift.

Cassandra unterstützt weniger Sprachen wie Java, JavaScript, Perl, Ruby, Scala, C#, Erlang, PHP, Python usw.

Zusammenfassung der Unterschiede: Cassandra vs. MongoDB

 

Apache Cassandra

MongoDB

Datenmodell

Cassandra verwendet ein breitspaltiges Datenmodell, das eher mit relationalen Datenbanken verwandt ist. 

MongoDB entfernt sich vollständig vom relationalen Modell, indem Daten als Dokumente gespeichert werden.

Grundlegende Speichereinheit

Sortierte Zeichenfolgetabellen.

Serialisierte JSON-Dokumente.

Indizierung

Cassandra unterstützt sekundäre Indizes und SASI für die Indizierung nach Spalte oder Spalten.

MongoDB indiziert auf Sammlungsebene und Feldebene und bietet mehrere Indizierungsoptionen.

Abfragesprache

Cassandra verwendet CQL.

MongoDB verwendet MQL.

Nebenläufigkeit

Cassandra erreicht Parallelität durch Atomizität auf Zeilenebene und Plattenspielerkonsistenz. 

MongoDB verwendet MVCC und Sperren auf Dokumentebene, um die Parallelität sicherzustellen. 

Verfügbarkeit

Cassandra verfügt über mehrere Masterknoten, Knotenpartitionierung und Schlüsselreplikation, um eine hohe Verfügbarkeit zu gewährleisten.

MongoDB verwendet einen einzelnen primären Knoten und mehrere Replikatknoten. In Kombination mit Sharding bietet MongoDB hohe Verfügbarkeit und Skalierbarkeit. 

Partitioning

Konsistenter Hashing-Algorithmus, weniger Kontrolle für Benutzer.

Benutzer definieren Sharding-Schlüssel und haben mehr Kontrolle über die Partitionierung.

Wie kann AWS Ihre Cassandra- und MongoDB-Anforderungen unterstützen?

Amazon Web Services (AWS) bietet zwei Services an, die die gängigen Anforderungen von Apache Cassandra und MongoDB unterstützen.

Amazon Keyspaces (für Apache Cassandra) ist eine hochverfügbare, verwaltete Datenbank, mit der Sie Ihre Cassandra-Workloads in die Cloud verschieben können. Amazon Keyspaces ist serverless, Sie zahlen also nur für die Ressourcen, die Sie nutzen – und der Service kann Tabellen als Reaktion auf den Anwendungsverkehr automatisch vergrößern und verkleinern. Sie können Anwendungen erstellen, mit denen sich dank nahezu unbegrenztem Durchsatz und Speicher Tausende Anforderungen pro Sekunde verarbeiten lassen.

Amazon DocumentDB (mit MongoDB-Kompatibilität) ist eine vollständig verwaltete native JSON-Dokumentdatenbank. Es macht es einfach und kostengünstig, kritische Dokumenten-Workloads in praktisch jeder Größenordnung zu betreiben, ohne die Infrastruktur verwalten zu müssen. Amazon DocumentDB vereinfacht Ihre Architektur, indem es integrierte bewährte Methoden für Sicherheit, kontinuierliche Backups und native Integrationen mit anderen AWS-Services bereitstellt.

Beginnen Sie mit den verwalteten Apache Cassandra- und MongoDB-Datenbankservices auf AWS, indem Sie noch heute ein AWS-Konto erstellen.