Inhaltsverzeichnis:
Video: Microsoft Azure OpenDev—June 2017 2024
Es gibt Zeiten, in denen Sie einen High-Speed-Zugriff mit Schlüsselwertstil auf Daten in einer relationalen Datenbank bereitstellen möchten. Diese Datenbank könnte beispielsweise Berkeley DB (Java Edition für Voldemort) oder MySQL sein.
Die Bereitstellung eines Schlüsselwert-ähnlichen Zugriffs auf Daten erfordert, dass ein Schlüsselwert-Speicher direkt über eine dieser anderen Datenbanken geschichtet wird. Grundsätzlich verwenden Sie eine andere Datenbank als Speicherschicht und nicht eine Kombination aus einem Dateisystem für die Speicherung und einer Aufnahmepipeline zum Kopieren von Daten aus einer relationalen Datenbank.
Dieser Prozess vereinfacht die Bereitstellung eines Hochgeschwindigkeits-Schlüsselwertspeichers bei gleichzeitiger Verwendung einer traditionellen relationalen Datenbank für die Speicherung.
Speichermodule ändern
Unterschiedliche Workloads erfordern unterschiedliche Speichermodule und Leistungsmerkmale. Aerospike eignet sich hervorragend für eine hohe Aufnahme. Redis eignet sich hervorragend für hohe Lesezahlen. Jede ist um einen bestimmten Anwendungsfall herum aufgebaut.
Voldemort geht einen anderen Weg. Anstatt den Schlüsselwert-Speicher als separate Ebene der Datenverwaltung zu behandeln, behandelt Voldemort den Schlüsselwert-Speicher als eine API und fügt eine In-Memory-Caching-Schicht hinzu, was bedeutet, dass Sie an das Back-End anschließen können, das am meisten Sinn macht. für Ihre besonderen Bedürfnisse.
Wenn Sie eine einfache Plattenspeicherschicht wünschen, können Sie die Berkeley DB Java Edition-Speicher-Engine verwenden. Wenn Sie stattdessen relationale Daten speichern möchten, können Sie MySQL als Back-End für Voldemort verwenden.
Diese Funktion in Kombination mit benutzerdefinierten Datentypen ermöglicht es Ihnen, die einfache Store / Retrieval-API eines Schlüsselwert-Speichers zu verwenden, um Informationen in einem anderen Back-End-Speicher zurückzusetzen und direkt zwischenzuspeichern.
Dieser Ansatz steht im Gegensatz zu dem üblichen Ansatz, separate Datenbanken zu haben - eine in, sagen wir, Oracle für Transaktionsdaten und eine andere in Ihrem Schlüsselwert-Speicher (zum Beispiel Riak). Bei diesem zweistufigen Ansatz müssen Sie Code entwickeln, um Daten zum Caching von einer Ebene zur anderen zu verschieben. Bei Voldemort gibt es eine kombinierte Ebene - Ihre Datenschicht -, sodass der zusätzliche Code redundant ist.
Zwischenspeichern von Daten im Speicher
Voldemort verfügt über einen integrierten Cache im Arbeitsspeicher, der die Auslastung der Speicher-Engine verringert und die Abfrageleistung erhöht. Sie müssen keine separate Caching-Schicht wie Redis oder das Data-Caching-Produkt der Coherence-Java-Anwendung von Oracle verwenden.
Die Fähigkeit, Hochgeschwindigkeits-Storage-Tiering mit Caching bereitzustellen, ist der Grund, warum LinkedIn Voldemort für bestimmte Hochleistungs-Anwendungsfälle verwendet.
Mit Voldemort erhalten Sie das Beste aus beiden Welten - eine Speicher-Engine für Ihre genauen Datenanforderungen und einen Hochgeschwindigkeits-In-Memory-Cache, um die Belastung dieser Engine zu reduzieren.Außerdem erhalten Sie eine einfache Speicher / Abruf-Semantik für den Schlüsselwert store auf Ihrer Speicher-Engine.
Bewertung von Voldemort
In den Harry Potter Büchern hielt Lord Voldemort eine Menge Magie in sich, sowohl gut als auch schlecht, obwohl er sie benutzte, um Muggel zu terrorisieren. Die Voldemort-Datenbank kann, wie sich herausstellt, auch große Datenmengen speichern, aber sie kann überall von Datenmagiern genutzt werden!
Voldemort ist immer noch ein Produkt in der Entwicklung. Viele Teile fehlen noch, daher unterstützt sie nicht die Vielfalt der Speicher-Engines, die Sie erwarten könnten. Dieser Fokus für Voldemorts Entwickler-Community liegt wahrscheinlich daran, dass Voldemort in der Java-Programmiersprache gebaut ist, die einen JNI-Connector (Java Native Interface) für die Integration in die meisten C- oder C ++ - basierten Datenbanken benötigt.
Voldemort verfügt jedoch über eine gute Integration in Serialisierungsframeworks. Zu den unterstützten Frameworks gehören Java-Serialisierung, Avro, Thrift und Protokollpuffer. Dies bedeutet, dass die bereitgestellten API-Wrapper mit der vertrauten Serialisierungsmethode jeder Programmiersprache übereinstimmen, was die Entwicklung von Anwendungen intuitiv macht.
Voldemort behandelt die Konsistenz nicht so gut wie andere Systeme. Voldemort verwendet den Read Repair -Ansatz, bei dem inkonsistente Versionsnummern für denselben Datensatz beim Lesen festgelegt werden, anstatt beim Schreiben konstant zu bleiben.
Es gibt auch keine sekundäre Indexierung oder Abfrageunterstützung. Voldemort erwartet, dass Sie die Funktionen der zugrunde liegenden Speicher-Engine verwenden, um diesen Anwendungsfall zu bewältigen. Außerdem verfügt Voldemort nicht über native Datenbank-Trigger oder ein Alerting- oder Ereignisverarbeitungs-Framework, mit dem eines erstellt werden kann.
Wenn Sie einen Schlüsselwertspeicher benötigen, der hochverfügbar ist, partitioniert ist, in Java läuft und unterschiedliche Speicher-Backends verwendet, dann ist Voldemort vielleicht für Sie geeignet.