NoSQL-Besonderheiten: Die besten verglichenen Schlüsselwertdatenbanken

Die meisten Anwendungen benötigen eine gewisse Persistenz - eine Möglichkeit, die Daten zur sicheren Aufbewahrung außerhalb der Anwendung zu speichern. Die einfachste Methode besteht darin, Daten in das Dateisystem zu schreiben. Dies kann jedoch schnell zu einer langsamen und unhandlichen Methode zur Lösung des Problems werden. Eine vollständige Datenbank bietet eine leistungsstarke Möglichkeit zum Indizieren und Abrufen von Daten, kann jedoch auch zu viel des Guten sein. Manchmal ist alles, was Sie brauchen, eine schnelle Möglichkeit, eine Freiform-Information aufzunehmen, sie mit einem Etikett zu verknüpfen, sie irgendwo zu verstauen und sie im Handumdrehen wieder herauszuziehen.

Geben Sie den Schlüsselwertspeicher ein. Es handelt sich im Wesentlichen um eine NoSQL-Datenbank, die jedoch einen hochspezifischen Zweck und ein bewusst eingeschränktes Design aufweist. Seine Aufgabe besteht darin, Daten (einen Wert) aufzunehmen, eine Beschriftung (einen Schlüssel) darauf anzuwenden und sie entweder im Speicher oder in einem Speichersystem zu speichern, das für den schnellen Abruf optimiert ist. Anwendungen verwenden Schlüsselwertdatenbanken für alles, vom Zwischenspeichern von Objekten bis zur gemeinsamen Nutzung häufig verwendeter Daten zwischen Anwendungsknoten.

Viele relationale Datenbanken können als Schlüsselwertspeicher fungieren, aber das ähnelt ein wenig der Verwendung eines Sattelzuges für Lebensmittelgeschäfte. Es funktioniert, ist aber dramatisch ineffizient, und es gibt weitaus einfachere Möglichkeiten, das Problem zu lösen. Ein Schlüsselwertspeicher bietet wie andere NoSQL-Datenbanken gerade genug Infrastruktur für das einfache Speichern und Abrufen von Werten, lässt sich direkter in Anwendungen integrieren, die ihn verwenden, und lässt sich genauer auf die Anwendungsauslastung skalieren.

Vergleich der NoSQL-Datenbankfunktionen mit Schlüsselwerten

Fünf weit verbreitete Produkte (einschließlich eines Cloud-Dienstes) sind Ihre Überlegung wert. Sie werden explizit als Schlüsselwertdatenbanken in Rechnung gestellt oder bieten als zentrale Funktion die Speicherung von Schlüsselwerten. Ihre grundlegenden Unterschiede:

  • Hazelcast und Memcached tendieren zum Minimalismus und machen sich nicht einmal die Mühe, die Daten auf der Festplatte zu sichern.
  • Aerospike, Cosmos DB und Redis bieten umfassendere Funktionen, drehen sich aber immer noch um die Schlüsselwertmetapher.

Tabelle: Vergleich der NoSQL-Datenbankprodukte mit Schlüsselwert

L W M S I A O.

* Durch eine Implementierung durch einen Drittanbieter.

Schlüssel: = Linux, = Windows, = MacOS, = Solaris, = iOS, = Android, = Andere.
  Aerospike Hazelcast IMDG Microsoft Azure Cosmos DB Memcached Redis
Plattformen LWMO Java Nur Cloud LWMO LWMO
Aktuelle Version 3.14.1.1 3.9 N / A 1.5.1 4.0.1
Erstveröffentlichung 2012 2008 2017 2003 2009
Lizenz AGPL Apache 2 Proprietär BSD BSD
Festplattengesichert Ja Nein Ja Nein YesBSD
Clustering Ja Ja Ja Nein Ja
Sharding / Partitionierung Ja Ja Ja Nein Ja
Native Scripting Ja Java Ja Nein Ja
Transaktionen Pro Schlüssel Ja Ja Nein Ja
Einbettbar Ja*

Ja Nein Ja*

Ja*

Aerospike-Schlüsselwert-NoSQL-Datenbank im Detail

Wenn Redis auf Steroiden gespeichert ist, könnte man sagen, dass Aerospike Redis auf Steroiden ist. Aerospike ist wie Redis ein Schlüsselwertspeicher, der als persistente Datenbank oder als Datencache fungieren kann. Aerospike ist so konzipiert, dass es einfach zu gruppieren und zu skalieren ist, um die Arbeitslast von Unternehmen besser zu unterstützen.

Eigenschaften, die nur Aerospike bietet

Vieles in Aerospike spiegelt sowohl andere Schlüsselwertspeicher als auch andere NoSQL-Datenbanken wider. Daten werden über Schlüssel gespeichert und abgerufen, und die Daten können in einer Reihe grundlegender Datentypen gespeichert werden, darunter 64-Bit-Ganzzahlen, Zeichenfolgen, Floats mit doppelter Genauigkeit und binäre Rohdaten, die aus einer Reihe gängiger Programmiersprachen serialisiert wurden.

Aerospike kann auch Daten in komplexen Typen speichern - Wertelisten , Sammlungen von Schlüssel-Wert-Paaren, die als Karten bezeichnet werden, und Geodaten im GeoJSON-Format. Aerospike kann eine native Verarbeitung von Geodaten durchführen, um beispielsweise durch einfaches Ausführen einer Abfrage zu bestimmen, welche in der Datenbank gespeicherten Standorte am nächsten beieinander liegen. Dies macht es zu einer attraktiven Option für Entwickler von Anwendungen, die auf den Standort angewiesen sind.

In Aerospike gespeicherte Daten können in mehreren hierarchischen Containern organisiert werden. Einige NoSQL-Systeme sind dokumentenorientiert, was bedeutet, dass Daten in einer Art Objekt, typischerweise JSON, gekapselt sind. Bei Aerospike ähneln Container in etwa Dokumenten, weisen jedoch Funktionen und Verhaltensweisen auf, die für Aerospike spezifisch sind. Mit jeder Art von Container können Sie unterschiedliche Verhaltenseigenschaften für die darin enthaltenen Daten festlegen.

Beispielsweise bestimmt die oberste Ebene von Containern, Namespaces, ob die Daten auf der Festplatte, im RAM oder in beiden gespeichert sind. ob die Daten im Cluster oder über Cluster hinweg repliziert werden; und wann oder wie Daten abgelaufen oder vertrieben werden. Über Namespaces können Entwickler mit Aerospike die Daten, auf die am häufigsten zugegriffen wird, im Speicher speichern, um eine möglichst schnelle Antwort zu erhalten.

Wie Aerospike mit Speicher und Clustering umgeht

Aerospike kann seine Daten in nahezu jedem Dateisystem speichern, wurde jedoch speziell für die Nutzung von SSDs geschrieben. Erwarten Sie jedoch nicht, Aerospike auf einer alten SSD fallen zu lassen, und erwarten Sie gute Ergebnisse. Die Entwickler von Aerospike führen eine Liste der zugelassenen SSD-Geräte und haben ein Tool namens ACT erstellt, um die Leistung von SSD-Speichergeräten unter Aerospike-Workloads zu bewerten.

Aerospike verwendet, wie die meisten NoSQL-Systeme, eine Shared-Nothing-Architektur für Replikation und Clustering. Aerospike hat keine Hauptknoten und kein manuelles Sharding. Jeder Knoten ist identisch. Die Daten werden zufällig auf die Knoten verteilt und automatisch neu ausgeglichen, um Engpässe zu vermeiden. Wenn Sie möchten, können Sie Regeln festlegen, wie aggressiv Daten neu ausgeglichen werden. Sie können mehrere Cluster konfigurieren, die in verschiedenen Netzwerksegmenten oder sogar verschiedenen Rechenzentren ausgeführt werden, um miteinander zu synchronisieren.

Scripting in Aerospike

Wie bei Redis können Entwickler mit Aerospike Lua-Skripte oder UDFs (benutzerdefinierte Funktionen) schreiben, die in der Aerospike-Engine ausgeführt werden. Sie können UDFs zum Lesen oder Ändern von Datensätzen verwenden. Am besten verwenden Sie diese jedoch, um schreibgeschützte Hochgeschwindigkeitsoperationen zur Kartenreduzierung über Sammlungen oder „Streams“ von Datensätzen auf mehreren Knoten hinweg durchzuführen.

Wo bekomme ich Aerospike?

Die Community Edition von Aerospike kann direkt von der Aerospike-Website heruntergeladen werden. Dies umfasst Server-Editionen für Linux, Desktop-Versionen für Apple MacOS und Microsoft Windows, Cloud-Editionen für Amazon EC2, Azure und Google Compute Engine sowie Docker-Container. Die Enterprise Edition von Aerospike ist über das Schnellstartprogramm von Aerospike verfügbar, das eine unbegrenzte 90-Tage-Testversion bietet.

Der Quellcode ist auf GitHub verfügbar.

Hazelcast IMDG-Schlüsselwert-NoSQL-Datenbank ausführlich

Hazelcast wird als "In-Memory-Datenraster" bezeichnet. Dies ist im Wesentlichen eine Möglichkeit, RAM- und CPU-Ressourcen auf mehreren Computern zu bündeln, damit Datensätze auf diese Computer verteilt und im Speicher bearbeitet werden können.

NoSQL-Datenbanken bieten Funktionen für Schlüsselwerte, Grafiken oder Dokumente. Hazelcast konzentriert sich auf Schlüsselwertfunktionen und legt Wert auf einen schnellen Zugriff auf verteilte Daten. Laut Hersteller kann es auch als Alternative zu Produkten wie Pivotal Gemfire, Software Terracotta und Oracle Coherence verwendet werden.

Hazelcast kann als verteilter Dienst ausgeführt oder direkt in eine Java-Anwendung eingebettet werden. Clients sind für Java, Scala, .Net, C / C ++, Python und Node.js verfügbar, und einer für Go ist in Arbeit.

Einzigartige Funktionen von Hazelcast

Hazelcast basiert auf Java und verfügt über ein Java-zentriertes Ökosystem. Auf jedem Knoten in einem Hazelcast-Cluster wird eine Instanz der Hazelcast-Kernbibliothek IMDG auf der JVM ausgeführt. Wie Hazelcast mit Daten arbeitet, ist auch eng mit den Sprachstrukturen von Java verknüpft. Die Map-Oberfläche von Java wird beispielsweise von Hazelcast verwendet, um Schlüsselwertspeicher bereitzustellen. Wie bei Memcached wird nichts auf die Festplatte geschrieben. Alles wird jederzeit gespeichert.

Ein Vorteil, den Hazelcast in einer verteilten Umgebung bieten kann, ist "Near Cache", bei dem häufig angeforderte Objekte auf den Server migriert werden, der die Anforderungen stellt. Auf diese Weise können die Anforderungen direkt im Speicher auf demselben System ausgeführt werden, ohne dass ein Roundtrip über das Netzwerk erforderlich ist.

Abgesehen von Schlüssel-Wert-Paaren können Sie über Hazelcast viele andere Arten von Datenstrukturen speichern und verteilen. Einige sind einfache Implementierungen von Java-Objekten wie Map. Andere sind spezifisch für Hazelcast. MultiMap ist beispielsweise eine Variante des Schlüsselwertspeichers, bei der mehrere Werte unter demselben Schlüssel gespeichert werden können. Diese Funktionen ermöglichen es, einige Verhaltensweisen anderer NoSQL-Systeme zu emulieren, z. B. das Organisieren von Daten in Dokumenten. Der Schwerpunkt liegt jedoch auf Strukturen, mit denen Daten schnell verteilt und abgerufen werden können.

Wie Hazelcast mit Clustering umgeht

Hazelcast-Cluster haben kein Master / Slave-Setup. Alles ist Peer-to-Peer. Daten werden automatisch gesplittert und auf alle Mitglieder des Clusters verteilt. Sie können auch bestimmte Clustermitglieder als "Lite" festlegen, die zunächst keine Daten enthalten, später jedoch zu Vollmitgliedern befördert werden können. Auf diese Weise können einige Knoten ausschließlich zur Berechnung oder zur schrittweisen Verteilung von Daten über einen Cluster verwendet werden, während diese online geschaltet werden.

Hazelcast kann auch sicherstellen, dass Vorgänge nur fortgesetzt werden, wenn mindestens eine bestimmte Anzahl von Knoten online ist. Sie müssen dieses Verhalten jedoch manuell konfigurieren und es funktioniert nur für bestimmte Datenstrukturen. Ab Hazelcast Version 3.9 können Sie Datenstrukturen in einem Cluster neu konfigurieren, ohne sie zuerst offline schalten zu müssen.

Wo bekomme ich Hazelcast?

Hazelcast kann direkt von der Hazelcast-Website heruntergeladen werden. Es wird normalerweise als Sammlung von Java-JAR-Dateien bereitgestellt. Docker-Bilder sind auch in der offiziellen Docker-Registrierung verfügbar.

Sie können die Enterprise Edition von Hazelcast direkt von Hazelcast herunterladen. Sie können auch einen 30-Tage-Testschlüssel für Hazelcast erhalten.

Gespeicherte NoSQL-Datenbank mit Schlüsselwert in der Tiefe

Memcached ist ungefähr so ​​einfach und schnell wie das Speichern von Schlüsselwerten. Memcached wurde ursprünglich als Beschleunigungsschicht für die Blogging-Plattform LiveJournal geschrieben und ist seitdem ein allgegenwärtiger Bestandteil von Web-Technologie-Stacks. Wenn Sie viele kleine Datenfragmente haben, die einem einfachen Schlüssel zugeordnet werden können und nicht zwischen Cache-Instanzen repliziert werden müssen, ist Memcached das richtige Werkzeug.

Einzigartige Funktionen von Memcached

Memcached wird am häufigsten zum Zwischenspeichern von Abfragen aus einer Datenbank und zum ausschließlichen Speichern der Ergebnisse im Speicher verwendet. In dieser Hinsicht ist es anders als bei vielen anderen NoSQL-Datenbanken, ob mit Schlüsselwerten oder auf andere Weise, da sie Daten in einer dauerhaften Form speichern. 

Memcached sichert seinen Datenspeicher nicht auf irgendetwas. Alle Schlüssel werden nur im Speicher gespeichert, sodass sie bei jedem Zurücksetzen der Memcached-Instanz oder des Servers, auf dem sie gehostet wird, verdampfen. Daher kann Memcached nicht wirklich als Ersatz für eine NoSQL-Datenbank verwendet werden.

Es kann jedoch mit hoher Geschwindigkeit verwendet werden, um häufig verwendete Daten zu speichern, deren Abfrage aus einer Quelle um Größenordnungen länger dauern kann.

Alle Daten, die in einen Binärdatenstrom serialisiert werden können, können in Memcached gespeichert werden. Die Werte können so eingestellt werden, dass sie nach einer bestimmten Zeit oder bei Bedarf ablaufen, indem die Schlüssel auf die Werte einer Anwendung verwiesen werden. Die Menge an Speicher, die Sie für eine bestimmte Instanz von Memcached verwenden, liegt ganz bei Ihnen. Mehrere Server können Memcached nebeneinander ausführen, um die Last zu verteilen. Darüber hinaus skaliert Memcached linear mit der Anzahl der in einem System verfügbaren Kerne, da es sich um eine Multithread-Anwendung handelt.

Die meisten gängigen Programmiersprachen haben Client-Bibliotheken für Memcached. Zum Beispiel libmemcachederlaubt es C und C ++ Programme zu arbeiten direkt mit Memcached - Instanzen. Außerdem kann Memcached in C-Programme eingebettet werden.

Wie Memcached mit Clustering umgeht

Obwohl Sie mehrere Instanzen von Memcached ausführen können, sei es auf demselben Server oder auf mehreren Knoten in einem Netzwerk, gibt es keinen automatischen Verbund oder keine automatische Synchronisierung von Daten zwischen Instanzen. Die in eine Memcached-Instanz eingefügten Daten sind nur für diesen Instanzzeitraum verfügbar.

Wo man Memcached bekommt

Der Quellcode von Memcached kann von GitHub und von der offiziellen Memcached-Website heruntergeladen werden. Linux-Binärdateien sind für die meisten Linux-Distributionen in den Repositorys verfügbar. Windows-Benutzer können es direkt aus dem Quellcode erstellen. Einige inoffizielle Binärdateien wurden in der Vergangenheit erstellt, scheinen jedoch nicht zuverlässig verfügbar zu sein.

Microsoft Azure Cosmos DB-Schlüsselwert-NoSQL-Datenbank im Detail

Die meisten Datenbanken haben ein übergeordnetes Paradigma: Dokumentenspeicher, Schlüsselwertspeicher, breiter Spaltenspeicher, Diagrammdatenbank usw. Nicht so Azure Cosmos DB. Cosmos DB wurde aus der NoSQL-Datenbank von Microsoft als Service DocumentDB abgeleitet und ist der Versuch von Microsoft, eine einzelne Datenbank zu erstellen, die mehrere Paradigmen verwenden kann.

Funktionen, die nur in Azure Cosmos DB verfügbar sind

Cosmos DB verwendet ein sogenanntes Atom-Record-Sequence-Speichersystem, um verschiedene Datenmodelle zu unterstützen. Atome sind primitive Typen wie Zeichenfolgen, Ganzzahlen und Boolesche Werte. Datensätze sind Sammlungen von Atomen, wie Strukturen in C. Sequenzen sind Arrays von Atomen oder Datensätzen.

Cosmos DB verwendet diese Bausteine, um das Verhalten mehrerer Datenbanktypen zu replizieren. Es kann das Verhalten von Tabellen in herkömmlichen relationalen Datenbanken reproduzieren. Es kann aber auch die Funktionalität von Datentypen reproduzieren, die in NoSQL-Systemen zu finden sind - schemenlose JSON-Dokumente (DocumentDB und MongoDB) und Diagramme (Gremlin, Apache TinkerPop).