NoSQL-Besonderheiten: Die besten Dokumentendatenbanken

"Das richtige Werkzeug für den richtigen Job." Wenn diese Weisheit irgendwo gilt, gilt dies sicherlich auch für die Auswahl der Datenbank, die ein Entwickler für eine bestimmte Anwendung auswählt. Dokumentdatenbanken, eines der Datenprodukte, die zusammen als „NoSQL“ bezeichnet werden, sind für Entwickler gedacht, die sich eher auf ihre Anwendung als auf die Datenbanktechnologie konzentrieren möchten .

Bei einer Dokumentendatenbank werden Daten nicht in Tabellen mit unterschiedlichen Spaltentypen gespeichert. Stattdessen wird es in Freiform-Dokumenten mit einer beliebigen Anzahl von Feldern und einer beliebigen Anzahl verschachtelter Strukturen gespeichert. Solche Dokumente werden normalerweise als JSON dargestellt und entweder über APIs oder durch Senden von JSON an einen REST-Endpunkt aktualisiert. Fast jede moderne Programmiersprache unterstützt JSON und REST. Die Arbeit mit einer Dokumentendatenbank fühlt sich also eher nach einer nativen Arbeit mit diesen Datenstrukturen an als nach einer herkömmlichen Datenbank.

Dieses schemenlose Design, wie es genannt wird, hat seine Grenzen. Ein Entwickler muss mehr arbeiten, um sicherzustellen, dass die eingefügten Daten konsistent sind, da diese Konsistenz nicht immer von der Datenbank selbst garantiert wird. SQL, die Standard- und allgemein verständliche Sprache für die Datenbankarbeit, wird von den meisten Dokumentendatenbanken nicht unterstützt. Daher müssen diejenigen mit vorhandener Datenbankkenntnis von vorne beginnen. Der Komfort, die Geschwindigkeit, die Skalierbarkeit und die Vielseitigkeit einer Dokumentendatenbank sind jedoch kaum zu übertreffen, wenn Sie eine Anwendung schreiben, die eine proteanische Freiform-Datenstruktur benötigt.

Hier haben wir sieben der bekanntesten und am häufigsten verwendeten Dokumentendatenbanken vorgestellt. Vier der sieben Projekte - CouchDB, Couchbase Server, MongoDB und RethinkDB - sind Open-Source-Projekte mit wenigen oder keinen praktischen Hindernissen für den Einstieg. Couchbase und MongoDB sind auch in unterstützten Unternehmenseditionen unter kommerziellen Lizenzen verfügbar. Die anderen drei - Amazon DynamoDB, Google Firebase und IBM Cloudant - sind gehostete Services von großen Cloud-Anbietern, bei denen eine enge Integration mit anderen Services in diesen Clouds von großer Bedeutung ist.

In der folgenden Tabelle können Sie die Funktionen vergleichen. Scrollen Sie in der Tabelle nach rechts, um alle Spalten anzuzeigen. Verwenden Sie dazu die Bildlaufleiste unten. Lesen Sie weiter, um kurze Erläuterungen zu jeder Datenbank zu erhalten.

L W M S I A O.

1. Tools von Drittanbietern können diese Funktionalität bereitstellen. 2 . Pro Tabelle. 3 . Nur Enterprise Edition. 4 . Nur Funktionen anzeigen. 5 . Transaktionen mit mehreren Dokumenten sind ebenfalls verfügbar, jedoch nicht in Sharded-Clustern.

Schlüssel: = Linux, = Windows, = MacOS, = Solaris, = iOS, = Android, = anderes Handy,
  Amazon DynamoDB Cosmos DB Couchbase CouchDB Google Firebase IBM Cloudant MarkLogic MongoDB RethinkDB
Plattformen Nur Cloud Nur Cloud LWM LWMIAO Nur Cloud Nur Cloud LWMS LWMS LWM
Abfragesysteme REST-API MongoDB-Drahtprotokoll Memcached-Protokoll, REST-API REST-API REST / JavaScript-API REST-API REST-API JSON-basierte API, teilweise REST-API ReQL-Abfragesprache, REST-API
SQL-Abfrage Nr. 1 Ja Über die N1QL-Sprache Nein Nein Nein Ja Nr. 1 Nein
Starkes Tippen Ja Ja Ja Nein Ja Nein Für XML-Schemas Ja Ja
Native tritt bei Nein Ja Ja Nein Nein Nein Ja Ja Ja
Sharding-Partitionierung Ja Ja Ja Ja N / A Ja Ja Ja Ja2
Clustering N / A Ja Ja Ja N / A N / A Ja Ja Ja
Reproduzieren Ja Ja Ja Ja N / A Ja Ja Ja Pro Tabelle
Konsistenz: Sofort Pro gelesen Ja Pro insgesamt Nein Verbundene Clients Nein Ja Pro schreiben Pro Dokument
Konsistenz: Eventuell Ja Ja Ja Ja Offline-Kunden Ja Ja Ja Ganze Datenbank
Parallelität Ja Ja Ja Ja Ja Ja Ja Ja Ja
In-Memory-Operationen N / A N / A Nein Nein N / A Nein N / A Ja: 3 Nein
Gespeicherte Prozeduren Nein JavaScript JavaScript4 JavaScript4 Regeln JavaScript4 XQuery-Modul JavaScript Nein
Transaktionen Per App Ja Einzelne Dokumente Einzelne Dokumente Ja Einzelne Dokumente Einzelne Dokumente Einzeldokumente5 Einzelne Dokumente
Aktuelle Version N / A N / A 5,0 (Okt. 2017) 2.1.1 (Nov. 2017) N / A N / A 9,0 (Mai 2016) 3.4.10 (Okt. 2017) 2.3.6 (Juli 2017)
Erstveröffentlichung 2012 2017 2011 2005 2012 2010 2005 2009 2009

Amazon DynamoDB

Der DynamoDB-Dokumentenspeicher von Amazon wurde 2012 als Erweiterung von SimpleDB von Amazon ins Leben gerufen. Unter der Haube wird es von einem Schlüsselwertspeicher, Dynamo, angetrieben. Ein Mitentwickler von DynamoDB stützte sich später auf viele der gleichen Ideen, um Apache Cassandra zu erstellen. 

DynamoDB-Funktionen

Wie die meisten anderen Cloud-Angebote von Amazon ist DynamoDB ein Managed Service, der für das bezahlt wird, was Sie benötigen. Entwickler legen fest, wie viel Speicherkapazität bereitgestellt werden soll, um entweder unstrukturierte Dokumente oder Schlüssel-Wert-Paare aufzubewahren, und wählen ein pauschales Stundensatzlimit für Lese- und Schreibanforderungen an die Datenbank. Keine Notwendigkeit, Server bereitzustellen oder die Replikation zu konfigurieren - Amazon erledigt all das unter der Decke und hat dem Mix kürzlich eine automatische Skalierung hinzugefügt.

Natürlich bietet DynamoDB Entwicklern nützliche Integrationen mit anderen Diensten in der Amazon Cloud. Trigger können beispielsweise über AWS Lambda-Funktionen eingerichtet werden. Die BI- und Analysetools von Amazon befinden sich ebenfalls in der Nähe. Die Nähe zu diesen Diensten ist praktisch, bedeutet aber auch, dass Amazon die Funktionalität auf verschiedene Arten verbessern kann. Caching und Beschleunigung a la Redis sind beispielsweise über den DynamoDB Accelerator verfügbar, ein kostenpflichtiges Add-On.

DynamoDB Local

Sie werden DynamoDB nicht in einer Open Source-Inkarnation finden. Es ist exklusiv als gehostetes Angebot in der Amazon Cloud verfügbar.

Im Gegensatz zu vielen anderen Cloud-nativen Datenbanken ist DynamoDB jedoch auch in einer Version verfügbar, die heruntergeladen und lokal ausgeführt werden kann. DynamoDB Local ist jedoch nicht für die Verwendung in der Produktion gedacht, sondern dient dazu, eine Anwendung in einer Testumgebung bereitzustellen, ohne dass Konnektivität erforderlich ist oder eine Amazon-Rechnung erstellt wird.

Microsoft Azure Cosmos DB

Cosmos DB ist ein ehrgeiziges Projekt, ein Datenbanksystem, das mehrere Modelle zum Speichern und Abrufen von Daten umfasst. Cosmos DB kann als Dokumentdatenbank, Säulendatenbank, Diagrammdatenbank oder Schlüsselwertspeicher dienen, sodass der Benutzer das für ihn geeignete Paradigma auswählen und auf verschiedene APIs zurückgreifen kann, um mit diesen Paradigmen zu arbeiten. 

Cosmos DB-Funktionen

Anstatt eine völlig neue API für ein Dokumentendatenbanksystem zu erfinden, bietet Cosmos DB eine API, die mit der beliebten MongoDB kompatibel ist (siehe unten). Zu den Vorteilen gehört, dass vorhandener Code, der MongoDB-Schnittstellenbibliotheken oder das Binärdrahtprotokoll von MongoDB verwendet, unverändert funktionieren kann. Es bedeutet, dass Cosmos DB MongoDB als Service anbieten kann. Ebenso unterstützt Cosmos DB die API von Cassandra, der beliebten Datenbank für Spaltenfamilien. 

Microsoft wirbt für Cosmos DB mit mehreren Vorteilen, die nicht unbedingt ausschließlich für die Funktionalität der Dokumentendatenbank gelten, sondern für diejenigen gedacht sind, die Dokumentendatenbankanwendungen erstellen. Ein solches Angebot sind einstellbare Konsistenzstufen. Wenn Sie über einige Klassen von Dokumenttransaktionen verfügen, die eine stärkere Konsistenz in allen Azure-Regionen erfordern als andere, können Sie sie pro Transaktion manuell angeben.

Andere Funktionen sind spezifischer für Dokumentendatenbanken. Beispielsweise müssen MongoDB-Benutzer Indizes für Dokumentensammlungen einrichten, um die Suche zu optimieren. Cosmos DB-Benutzer, die mit den MongoDB-APIs arbeiten, müssen keine Indizierung für Dokumente einrichten, da jede Eigenschaft in einem eingefügten Dokument automatisch indiziert wird.

Verwenden von Cosmos DB unter Microsoft Azure

Es gibt keine lokal gehostete Version von Cosmos DB. Es ist nur als Dienst in der Microsoft Azure-Cloud verfügbar. Entwicklungs-APIs für Cosmos DB sind jedoch für die meisten gängigen Unternehmenssprachen verfügbar - Java, Node.js, .NET und Python.

Couchbase Server

Couchbase ist weniger ein Geschwister von CouchDB als vielmehr ein Nachfolger. Couchbase basiert auf Arbeiten in CouchDB und Membase, ist jedoch mit keinem dieser Projekte verbunden. Es handelt sich um eine Dokumentendatenbank und einen verteilten Schlüsselwertspeicher in einem, mit erweiterten Funktionen wie automatisiertem Failover und datencenterübergreifender Replikation, die für Unternehmensanwendungsfälle vorgesehen sind.

Couchbase-Funktionen

Ein Merkmal, das Couchbase nicht nur von anderen NoSQL-Konkurrenten, sondern auch von seinem Vorgänger CouchDB unterscheidet, ist die SQL-ähnliche Abfragesprache N1QL (ausgesprochen „Nickel“). N1QL bietet nicht die gesamte Bandbreite an Befehlen, die Sie von einer ANSI SQL-Implementierung erwarten würden, bietet jedoch genügend nützliche Funktionen, wie z. B. JOIN-Operationen, damit jemand mit SQL-Erfahrung funktionsfähige Ergebnisse erzielen kann.

Das Couchbase-Abfragesystem ist nicht nur für Entwickler gedacht, sondern auch für Datenbankadministratoren und Geschäftsanalysten, die normalerweise mit herkömmlichen Datenbanken arbeiten. Funktionen wie das EXPLAIN-Schlüsselwort scheinen speziell für diese Zielgruppe eingeführt worden zu sein.

Als kombinierte Dokumentendatenbank und Schlüsselwertspeicher speichert Couchbase Dokumente unter Verwendung ihrer eindeutigen Bezeichner als Schlüssel. Den Dokumenten können auch Werte für die Lebensdauer zugewiesen werden, um wie ein Schlüsselwert-Cache zu funktionieren. Das heißt, ein echtes Schlüsselwert-Caching-System wie Redis wird für die grundlegende Schlüsselwertspeicherung viel schneller sein, aber Couchbase ist flexibler, und Redis und Couchbase können effektiv kombiniert werden, um die Dinge zu beschleunigen. In diesem Sinne bietet Couchbase native Unterstützung für das Memcached-Protokoll, sodass vorhandene Anwendungen, die Memcached verwenden, als Ersatz in Couchbase integriert werden können.

Couchbase Community vs. Enterprise

Couchbase Server ist in einer vollständigen kostenpflichtigen Enterprise Edition, einer kostenlosen Community Edition und einer Open Source Edition erhältlich, die die Grundlage für die anderen bildet. Binäre Downloads für die Enterprise- und Community-Edition sind auf der Couchbase-Website verfügbar, und der Quellcode ist auf der Couchbase-Entwickler-Website verfügbar. (Es gibt kein einziges GitHub-Repository für das Couchbase-Open-Source-Projekt, da es sich um eine Zusammenfassung mehrerer Projekte handelt.)

Die Community Edition kann in der Produktion bereitgestellt werden, es fehlen jedoch die erweiterten Funktionen der Enterprise Edition sowie der Support, sodass sich Nichtkäufer in Acht nehmen müssen. Einige Funktionen in Couchbase, wie z. B. die horizontale Skalierungsfunktion, haben Eingang in das CouchDB-Projekt gefunden, dies ist jedoch eher die Ausnahme als die Regel.

Couchbase Lite

Eine weitere für App-Entwickler bemerkenswerte Edition von Couchbase ist Couchbase Lite, eine einbettbare Version von Couchbase, die mit Instanzen der vollständigen Edition synchronisiert werden kann. Couchbase Lite ist die Schlüsselkomponente in Couchbase Mobile, einem Anwendungsstapel für mobile Apps, die einen Datenspeicher benötigen, der automatisch mit einem Back-End synchronisiert wird. Couchbase Mobile ist für iOS, Android, Java verfügbar. .Net, MacOS und tvOS.

CouchDB

Das CouchDB-Projekt wurde 2005 von einem ehemaligen IBM-Entwickler gestartet und 2008 zur Apache Software Foundation verlegt. Manchmal wird angenommen, dass CouchDB die Basis für Couchbase ist, aber CouchDB und Couchbase sind parallele Projekte mit unterschiedlichen Zielen.

CouchDB vs. Couchbase

Während Couchbase sowohl eine Dokumentendatenbank als auch ein Schlüsselwertspeicher ist, ist CouchDB ausschließlich eine Dokumentendatenbank. Und während sich Couchbase seit langem auf Unternehmensfunktionen wie Fehlertoleranz und eine SQL-ähnliche Abfragesprache konzentriert, kommen solche Feinheiten erst in CouchDB an.

CouchDB-Funktionen

CouchDB legt Wert auf einfache Bereitstellung und Benutzerfreundlichkeit. Das Abrufen von Daten aus der Datenbank ist so einfach wie das Senden von JSON-formatierten Abfragen an einen REST-HTTPS-Endpunkt. Die Ergebnisse werden in JSON zurückgegeben. Fast jede moderne Programmiersprache kann diese Aufgaben ausführen und auch die Zuordnung und Reduzierung vornehmen, die zum Erstellen der Ansichten hinter CouchDB-Abfragen und -Berichten erforderlich sind. Es ist kein ODBC-Treiber oder Datenconnector erforderlich.

Eine der besonderen Saucen von CouchDB ist die Datenabstimmungstechnologie. Änderungen, die an einem CouchDB-Peer vorgenommen wurden, werden automatisch mit anderen abgeglichen, ähnlich wie bei einem Versionskontrollsystem. Konflikte zwischen Dokumentversionen bleiben erhalten, als wären sie frühere Überarbeitungen dieses Dokuments.

Dieses letztendlich konsistente Modell ist nützlich für Datenbanken, die nicht immer oder konsistent verbunden sind (z. B. für zeitweise verbundene mobile Anwendungen) oder in Fällen, in denen Sie nicht die neueste und beste Version von Daten in einem bestimmten Knoten benötigen. Eine eventuelle Konsistenz ist jedoch auch eine der größten Einschränkungen von CouchDB. Wenn Sie keine sofortige Konsistenz benötigen, ist CouchDB nicht der Ort , um es zu finden.

Die Skalierbarkeit war lange Zeit eine Schwachstelle für CouchDB, wurde aber kürzlich behoben. In Version 2.0 wurde eine neue Clustering-Technologie eingeführt, die von Cloudant / IBM zur Verfügung gestellt und in das Projekt integriert wurde. Für diejenigen, die mit MongoDB vertraut sind und eine ähnliche deklarative Abfragesyntax verwenden möchten, bietet das Mango-Projekt, ebenfalls von Cloudant / IBM, dies als externes Add-On an.

CouchDB herunterladen

CouchDB-Binärdateien für alle wichtigen Plattformen und Quellcode können von der offiziellen CouchDB-Website heruntergeladen werden. Die Quelle für das Projekt ist auch auf GitHub verfügbar.

Google Firebase-Echtzeitdatenbank

Sie können sich Google Firebase als Antwort von Google auf DynamoDB vorstellen - eine Möglichkeit, schnell synchronisierten Datenspeicher zwischen einem Cloud-Back-End und lokalen Apps auf mehreren Plattformen bereitzustellen.

Die Firebase-Echtzeitdatenbank ist nur eine Komponente des Firebase-Stacks, mit der Apps erstellt werden können, die das Engagement und die Einsicht des Publikums stark beeinträchtigen. Der gesamte Stack enthält Funktionen wie Authentifizierung, Leistungsüberwachung, Benutzeranalyse und viele andere. Hier konzentrieren wir uns jedoch auf Firebase selbst.

Google Firebase-Funktionen

Google hat Firebase im Jahr 2014 erworben. In den letzten Jahren hat Firebase so verkabelt, dass viele Google Cloud-Funktionen genutzt werden können. Mit Google Cloud-Funktionen für Firebase können Sie beispielsweise JavaScript-Funktionen in der Cloud als Reaktion auf Firebase-Ereignisse auslösen. Mit Google Analytics für Firebase können Sie mobile App-Daten für eine eingehendere Analyse in BigQuery ziehen.

Da Gaming eine der Zielanwendungen von Firebase ist, enthalten die für Firebase bereitgestellten SDKs das plattformübergreifende Unity-Framework für die Spieleentwicklung. Entwickler, die an konventionelleren unternehmensorientierten oder verbraucherorientierten Projekten arbeiten, haben viele andere Möglichkeiten: natives iOS und Android, C ++, generisches Web / JavaScript und jede andere Sprache, die REST unterstützt (Java, Python, wie Sie es nennen).

Firebase funktioniert in Szenarien, in denen die Konnektivität nicht garantiert ist. Wie CouchDB werden Änderungen lokal zwischengespeichert, wenn sie offline sind, und automatisch mit dem Back-End synchronisiert, wenn die Konnektivität wiederhergestellt wird. Beachten Sie, dass Firebase nicht als eigenständige, vollständig Offline-Lösung verwendet werden kann. Unter Android sind lokale Datenbanken beispielsweise auf 10 MB Speicherplatz beschränkt.

Firebase auf Google Cloud und GitHub

Firebase ist nicht als eigenständiges Produkt verfügbar, sondern nur als Teil des Cloud-Produktangebots von Google. Das Firebase GitHub-Repository enthält Quellcode für die SDKs und für verschiedene plattformspezifische Tools.

IBM Cloudant

Cloudant ist im Wesentlichen die von IBM gehostete Edition von CouchDB. Ursprünglich war Cloudant ein unabhängiges Unternehmen, das eine CouchDB-Edition namens „BigCouch“ anbot, die in der SoftLayer-Cloud von IBM gehostet wurde. Im Jahr 2014 erwarb IBM Cloudant vollständig als Teil des allgemeinen Vorstoßes von IBM in Richtung Analytics und Big Data. 

Cloudant vs. CouchDB

Cloudant soll mehr als eine gehostete Version von CouchDB sein. Cloudant bietet Funktionen, die in CouchDB selbst nicht ohne weiteres verfügbar sind, z. B. die nativ integrierte Volltextsuche. Die Volltextsuche in CouchDB erfordert normalerweise die Integration in externe Projekte. Daten können zwischen Cloudant und einer Instanz von CouchDB in beide Richtungen repliziert werden, sodass es relativ einfach ist, bei Bedarf zwischen beiden zu wechseln.

Einige der Verbesserungen von Cloudant an CouchDB haben ihren Weg zurück in das zugrunde liegende CouchDB-Projekt gefunden, einschließlich der horizontalen Skalierungsfunktion von CouchDB 2.0 und der Mango-Abfragesprachenschnittstelle. Aber nehmen Sie das nicht als Beweis dafür, dass Cloudant-Funktionen automatisch auf CouchDB übertragen werden.

Cloudant in der IBM Cloud

Cloudant ist in erster Linie ein Cloud-Angebot in der IBM Cloud, in dem es in Verbindung mit anderen IBM Cloud-Datenprodukten wie dashDB, DataWorks und Watson Analytics verwendet werden kann.

Cloudant Local

Eine Cloudant-Edition hinter der Firewall mit dem Namen Cloudant Local bietet dieselben Funktionen wie das Cloud-gehostete Angebot. Cloudant Local ist für die Ubuntu- und Red Hat-Versionen von x86 Linux sowie für IBMs eigenes System z verfügbar, auf dem Red Hat oder Suse ausgeführt wird. Entwickler können eine kostenlose Test- und Nur-Entwickler-Version in einem Docker-Image herunterladen.