Couchbase-Test: Eine intelligente NoSQL-Datenbank

Jedes mittlere bis große Unternehmen benötigt eine Datenbank. Große multinationale Unternehmen benötigen häufig global verteilte Datenbanken, und wenn sie ihre Datenbank für Finanz- oder Inventaranwendungen verwenden, benötigen sie eine starke Konsistenz. Nur wenige Datenbanken können beide Anforderungen erfüllen.

Couchbase Server ist eine verteilte, flexible JSON-Dokumentendatenbank, die in einem lokalen Cluster stark konsistent ist. Couchbase Server unterstützt auch die datenübergreifende Replikation mit eventueller Konsistenz über Cluster hinweg. 

Couchbase Lite ist eine eingebettete mobile Datenbank, die offline arbeitet und online mit Couchbase Sync Gateway synchronisiert wird. Sync Gateway wird sowohl mit Couchbase Server als auch mit mehreren Couchbase Lite-Instanzen synchronisiert.

Couchbase Server kann lokal, in der Cloud, auf Kubernetes oder in Hybridkonfigurationen bereitgestellt werden. Es ist sowohl in Open Source- als auch in Enterprise-Versionen erhältlich.

Die Couchbase Server-Abfragesprache N1QL ist eine SQL-Obermenge, die für JSON-Dokumentdatenbanken mit Erweiterungen für die Analyse entwickelt wurde. Couchbase unterstützt auch den Zugriff auf Schlüsseldaten und die Volltextsuche.

Couchbase, das Unternehmen, das hinter der Datenbank steht, ist aus der Fusion von Membase (Hersteller einer speicherinternen zwischengespeicherten Schlüsselwertdatenbank) und CouchOne (Entwickler der Apache CouchDB-Dokumentendatenbank) im Jahr 2011 hervorgegangen. Das neue Unternehmen begann mit dem Schlüssel- Wertschicht, fügte 2012 die JSON-Dokumentschicht hinzu und fügte 2014 eine mobile Datenbank, 2015 SQL-ähnliche Abfragen, 2017 eine Volltextsuche und 2018 eine Analyse hinzu.

Couchbase-Alternativen und Konkurrenten

Zu den Alternativen zu Couchbase gehören MongoDB, eine weitere flexible Dokumentendatenbank. MongoDB kombiniert mit Redis zum Zwischenspeichern; Oracle Database, eine relationale High-End-Datenbank; und SQL Server, das relationale Datenbankangebot von Microsoft. Relationale Datenbanksysteme wurden für die Verwendung auf einzelnen, großen Servern entwickelt, und es ist schwierig, sie zu skalieren. MongoDB wurde für die Master-Slave-Replikation entwickelt, die ein wenig skaliert, aber Sharding benötigt, um gut skaliert zu werden. Redis hilft dabei, MongoDB zu beschleunigen, führt jedoch einen weiteren beweglichen Teil ein, der die Verwaltung der kombinierten Systeme erschweren kann.

Andere aktuelle Alternativen zu Couchbase sind CockroachDB, Azure Cosmos DB, Amazon Aurora, Aerospike, Amazon DocumentDB und Amazon DynamoDB. Ich habe in früheren Überprüfungen sowohl die relationalen als auch die NoSQL-Optionen erörtert.

Couchbase Server-Architektur

Couchbase Server führt mehrere Rollen aus: Datendienst, Indexdienst, Abfragedienst, Sicherheit, Replikation, Suche, Ereignis, Analyse und Verwaltung. Diese Dienste können jeweils auf einem oder mehreren Knoten ausgeführt werden.

Couchbase Server wurde nach drei Grundprinzipien entwickelt: Speicher- und netzwerkzentrierte Architektur, Workload-Isolation und ein asynchroner Ansatz für alles.

Schreibvorgänge werden in den Speicher übernommen, dann auf der Festplatte gespeichert und asynchron indiziert, ohne Lese- oder Schreibvorgänge zu blockieren. Die am häufigsten verwendeten Daten und Indizes werden für schnelle Lesevorgänge transparent im Speicher gespeichert. Diese starke Speichernutzung ist gut für Latenz und Durchsatz, erhöht jedoch die RAM-Anforderungen von Couchbase.

Couchbase Server kann jeden seiner Dienste unabhängig skalieren, um sie effizienter zu gestalten. Der Abfragedienst kann von mehr CPU-Ressourcen profitieren, der Indexdienst kann SSDs verwenden und der Datendienst kann mehr RAM verwenden. Couchbase nennt diese mehrdimensionale Skalierung (MDS) und ist eine der Unterscheidungsmerkmale von Couchbase Server.

Durch asynchrone Vorgänge kann Couchbase Server das Blockieren von Schreib-, Lese- oder Abfragen vermeiden. Der Entwickler kann bei Bedarf Haltbarkeit und Konsistenz gegen Latenz abwägen.

Das Couchbase JSON-Datenmodell unterstützt sowohl grundlegende als auch komplexe Datentypen: Zahlen, Zeichenfolgen, verschachtelte Objekte und Arrays. Sie können Dokumente erstellen, die normalisiert oder denormalisiert sind. Couchbase Server benötigt oder unterstützt keine Schemas. Im Gegensatz dazu benötigt MongoDB keine Schemas, kann diese jedoch unterstützen und durchsetzen, wenn der Entwickler dies wünscht.

Wie ich später ausführlicher erläutern werde, können Sie über vier Mechanismen auf Couchbase Server-Dokumente zugreifen: Schlüsselwert, SQL-basierte Abfragen, Volltextsuche und JavaScript-Eventing. Wenn Ihre JSON-Dokumente über Unterdokumente oder Arrays verfügen, können Sie mithilfe von Pfadausdrücken direkt darauf zugreifen, ohne das gesamte Dokument übertragen und analysieren zu müssen. Das Ereignismodell kann bei Datenänderungen ( OnUpdate) oder Timern ausgelöst werden . Darüber hinaus können Sie durch Synchronisierung mit Couchbase Mobile auf Couchbase Server-Dokumente zugreifen.  

Couchbase Server ist in Buckets, vBuckets, Knoten und Cluster organisiert. Buckets enthalten JSON-Dokumente. vBuckets sind im Wesentlichen Shards, die automatisch auf Knoten verteilt werden. Knoten sind physische oder virtuelle Maschinen, auf denen einzelne Instanzen von Couchbase Server gehostet werden. Cluster sind Gruppen von Knoten. Die synchrone Replikation erfolgt zwischen den Knoten in einem Cluster.

Bereitstellungsoptionen für Couchbase Server

Sie können Couchbase Server lokal, in der Cloud und auf Kubernetes installieren. Couchbase Server Enterprise Edition kann kostenlos entwickelt und getestet werden und ist im Abonnement für die Produktion erhältlich. Die Open Source Couchbase Server Community Edition ist für alle Zwecke kostenlos. Abgesehen von einigen ausgelassenen Funktionen ist Couchbase Server Community Edition API-kompatibel mit Couchbase Server Enterprise Edition.

Ich habe eine Cloud-Testfahrt auf der Google Cloud Platform erstellt, die mir (nach einer fünfminütigen Bereitstellungsverzögerung) einen Couchbase Server-Cluster mit drei Knoten und einen Sync Gateway-Knoten gab, die alle drei Stunden lang gültig waren. Ich brauchte ungefähr eine Stunde, um die vier Couchbase-Tutorials durchzuarbeiten, die mir das Gefühl gaben, den Server abzufragen.

Autonomer Couchbase-Bediener

Der autonome Couchbase-Operator, der nur in Enterprise Edition unterstützt wird, bietet eine native Integration von Couchbase Server mit Open Source Kubernetes und Red Hat OpenShift. Der Operator erweitert die Kubernetes-API, indem er eine benutzerdefinierte Ressourcendefinition erstellt und sich als benutzerdefinierter Couchbase Server-Controller registriert, um Couchbase Server-Cluster zu verwalten. Dies reduziert den Entwicklungsaufwand für die Ausführung von Couchbase-Clustern auf Kubernetes und ermöglicht die Automatisierung der Verwaltung gängiger Couchbase Server-Aufgaben wie Konfiguration, Erstellung, Skalierung und Wiederherstellung von Couchbase Server-Clustern. Der Betreiber arbeitet auch mit dem Azure Kubernetes-Dienst, dem Amazon Elastic Kubernetes-Dienst und der Google Kubernetes Engine zusammen.

Datenübergreifende Replikation (XDCR)

Wie bereits erwähnt, führt Couchbase Server eine synchrone Replikation durch und weist eine starke Konsistenz innerhalb eines Clusters auf. Es führt eine asynchrone Aktiv-Aktiv-Replikation über Cluster, Rechenzentren und Verfügbarkeitszonen hinweg durch, um hohe Schreiblatenzen zu vermeiden. Mit XDCR kann Couchbase eine global verteilte Datenbank sein, auf Kosten einer möglichen (und nicht starken) Konsistenz zwischen Clustern.

Basic XDCR wird in allen Couchbase Server-Editionen unterstützt. XDCR-Filterung, Drosselung und zeitstempelbasierte Konfliktlösung sind alle Funktionen der Enterprise Edition.

Couchbase-Abfragetools

Sie können Couchbase Server mit einem Schlüssel abfragen, um den zugehörigen Wert abzurufen. Dies kann ein JSON-Dokument oder ein Blob sein. Sie können es auch mit der SQL-ähnlichen N1QL-Sprache oder mit einer Volltextsuche abfragen. Sowohl N1QL- als auch Volltextabfragen werden schneller ausgeführt, wenn der Bucket Indizes zur Unterstützung der Abfrage enthält.

N1QL

N1QL, ausgesprochen „Nickel“, ähnelt stark dem Standard-SQL mit Erweiterungen für JSON. Ich fand es viel einfacher zu lernen als die Aggregationspipeline von MongoDB, da ich SQL seit Jahrzehnten verwende.

Es gibt tatsächlich zwei ähnliche Varianten von N1QL: eine für den Couchbase Server Query-Dienst und eine für den Analytics-Dienst, bei dem es sich um eine Enterprise Edition-Funktion handelt. N1QL for Analytics basiert auf SQL ++.

Einige der N1QL Erweiterungen sind USE KEYS, NEST, UNNEST, und MISSING. USE KEYSund USE HASHsind Abfragehinweise für JOINs. NESTund UNNESTArrays packen und entpacken. MISSINGist eine JSON-spezifische Alternative zu NULL; IS NOT MISSINGbedeutet, dass ein bestimmter Wert vorhanden oder NULLin einem Dokument vorhanden ist. Das Schlüsselwort für Werte, die sind NOT MISSINGund NOT NULLsind KNOWN. N1QL-Abfragen können Pfade verwenden, die auch für Volltextsuchen gelten.

Volltextsuche

Couchbase unterstützt externe Volltextsuchmaschinen wie Solr, verfügt jedoch auch über eine eigene Go-basierte Volltextsuchmaschine, Bleve. Bleve ist sowohl in Couchbase Mobile als auch in Couchbase Server enthalten und unterstützt die meisten erwarteten Suchsyntaxen.

Couchbase SDKs

Alle wichtigen Couchbase-Dienste werden für die Programmierung über das SDK bereitgestellt. SDKs sind für C / C ++, .Net (C #, F # und Visual Basic .Net), Go, Java, Node.js, PHP, Python und Scala verfügbar.

Zusätzlich zu den SDKs bietet Couchbase eine enge Integration in verschiedene Frameworks: Spring Data, .NET LINQ und Couchbases eigenes ODM Nooman.js ODM. In der folgenden Beispielabfrage wird beispielsweise Linq2Couchbase verwendet:

{

     Server = neue Liste {neuer Uri ("// localhost: 8091 /")}

});

var context = new BucketContext (ClusterHelper.GetBucket ("Reisebeispiel"));

var query = (aus a in context.Query ()

               wo a.Country == "Vereinigtes Königreich"

               Wählen Sie a).

               Nimm (10);

query.ToList (). ForEach (Console.WriteLine);

ClusterHelper.Close ();

Couchbase Mobile

Couchbase Mobile besteht aus zwei Teilen: Couchbase Lite, das auf einem mobilen Gerät ausgeführt wird, und Couchbase Sync Gateway, das auf einem Serverknoten ausgeführt wird. Couchbase Lite läuft unter iOS, Android, .Net und Xamarin und unterstützt die Sprachen Swift, Objective-C, Java, Kotlin und C ++.

Der folgende Java-Code definiert beispielsweise eine Abfrage, die unter Android ausgeführt werden soll:

Datenbank database = DatabaseManager.getDatabase ();

Query searchQuery = QueryBuilder

  .select (SelectResult.expression (Expression.property ("Flughafenname")))

  .from (DataSource.database (Datenbank))

  .wo(

    Expression.property ("Typ"). EqualTo (Expression.string ("Flughafen"))

      .und (Expression.property ("Flughafenname"). like (Expression.string (Präfix + "%")))

);

Couchbase-Benchmarks

Couchbase Server wurde zwar nicht bewertet, ein Drittanbieter (Altoros) hat dies jedoch mithilfe des YCSB-JSON- und Schlüsselwerttests sowie des TPCx-IoT-Tests durchgeführt. Die folgende Tabelle bezieht sich auf den JSON-Dokumentbenchmark. Wie Sie sehen können, hat Couchbase Server sowohl MongoDB als auch DataStax übertroffen. Sie können diese Benchmarks selbst erneut ausführen, da Altoros alle erforderlichen Skripte bereitgestellt hat.

Altoros

Insgesamt ist Couchbase Server eine gute NoSQL JSON-Dokumentendatenbank mit einer SQL-ähnlichen Abfragesprache und einer Volltextsuchmaschine, und Couchbase Mobile erweitert das Wertversprechen auf mobile Geräte. Ob Couchbase für Sie sinnvoll ist, hängt von Ihrer Anwendung und Ihren Anforderungen ab.

Wenn Sie die zuverlässige Schemastruktur einer relationalen Datenbank oder die Verbindungsorientierung einer Diagrammdatenbank benötigen, wird Couchbase nicht das tun, was Sie wollen. Wenn Sie jedoch eine global skalierbare Dokumentendatenbank benötigen, ist Couchbase eine gute Wahl.

- -

Kosten: Couchbase Server Community Edition: Kostenlos. Couchbase Server Enterprise Edition: Jahresabonnements werden nach Knoten berechnet und sind je nach den benötigten Kernen und dem RAM eines Knotens zu unterschiedlichen Preisen erhältlich. Entwicklungs- und Testknoten sind kostenlos. Cloud-Bereitstellungen der Enterprise Edition sind stundenweise verfügbar. Die typischen Softwarepreise für AWS für Couchbase Server betragen 0,662 USD / Knoten / Stunde und für das Mobile Sync Gateway 1,641 USD / Knoten / Stunde. Die Standardvorlage verwendet zunächst vier Serverknoten und zwei Synchronisierungsknoten mit automatischer Skalierung. Die Preise sind in Microsoft Azure und Google Cloud Platform in etwa vergleichbar. Sie können auch Ihre eigene Lizenz mitbringen und nur für die Cloud-Ressourcen bezahlen.

Plattform: Couchbase Server: Linux, Windows Server 2012 R2 und höher; Kubernetes, OpenShift; AWS, Azure, GCP. Entwicklung und Test von Couchbase Server: MacOS 10.11 und höher, Windows 10 Anniversary Update und höher; Docker. Couchbase Lite: iOS, Android, .Net. Couchbase Sync Gateway: Linux, Windows Server 2010 und höher, MacOS 10.12.6 und höher; AWS, Docker, OpenShift.