ludodesign - Fotolia

Key-Value-SSDs: Schneller als klassischer Blockspeicher

Key-Value-SSDs gelten als vielversprechend bei Leistung und Speicherverwaltung – aber wie setzt man sie ein? Was spricht für sie im Vergleich zum klassischen Blockspeicher?

Das Interesse an Key-Value-SSDs hat stark zugenommen. Doch was macht sie besser als den traditionellen Blockspeicher, der seit Jahrzehnten etabliert ist?

Diese Laufwerke bieten nicht nur eine Steigerung der Systemleistung, sondern auch eine Vereinfachung der Softwarearchitektur. Key-Value-SSDs bieten daher klare Vorteile, bringen jedoch auch neue Herausforderungen mit sich.

Key und Value erklärt

NoSQL-Datenbanken organisieren ihre Daten typischerweise in Schlüssel-Wert-Paaren (Key-Value-Pairs). Dieser Datenansatz ist besonders effektiv für unstrukturierte Daten, da der Schlüssel (Key) auf einen Wert (Value) verweist, dessen Größe variabel sein kann – von wenigen Bytes bis zu mehreren Gigabytes in der Zukunft. Ein wichtiger Aspekt dabei ist, dass jeder Schlüssel eindeutig sein muss, während die Werte unterschiedlich lang sein können.

NoSQL-Datenbanken, die in verschiedenen Formaten arbeiten, nutzen diese Flexibilität, um Daten effizient zu speichern und zu verwalten. Dieser Ansatz passt gut zu modernen Speicheranforderungen, da er den Umgang mit unstrukturierten Daten vereinfacht.

Warum braucht es spezielle SSDs für Key-Value-Daten?

In den meisten Computersystemen erfordert eine NoSQL-Datenbank eine zusätzliche Schicht, um die Key-Value-Paare in das traditionelle Blockformat zu übersetzen, das von den meisten Computer- und Dateisystemen verwendet wird. Diese Übersetzung wird in mehreren Schritten durchgeführt: Zuerst durch den Key-Value-Store, dann durch das Dateisystem und zuletzt durch die LBA-Tabelle (Logical Block Addresses) des Speichersystems.

Das Dateisystem verwaltet die Dateien auf dem Speicher, und die Blockschicht übersetzt die Dateinamen in Blöcke – 512 Byte oder 4.000 Byte – auf dem physischen Blockspeichergerät. Auf diese Weise wird die Datei den verfügbaren Blöcken auf der Festplatte zugeordnet. Das Hostsystem verwaltet die Tabelle mit logischen Blöcken, um die Datei dem verfügbaren Speicherplatz auf dem Blockspeichergerät zuzuordnen.

Diese zusätzliche Übersetzungsfunktion stellt bei Festplatten (HDDs) in der Regel kein großes Problem dar, da die Latenz der HDDs selbst deutlich größer ist als die der Übersetzungsoperationen. Bei SSDs, die wesentlich schnellere Zugriffszeiten bieten, wurden diese Übersetzungsverzögerungen jedoch zu einem signifikanten Engpass.

Um dieses Problem zu lösen, wurde die Idee einer Key-Value-SSD entwickelt. Diese SSDs eliminieren die Notwendigkeit für aufwendige Übersetzungen, indem sie direkt in einem Format speichern, das mit dem Key-Value-Datenmodell kompatibel ist. Dies beschleunigt die Datenzugriffszeiten erheblich und reduziert die Systemlatenz.

Abbildung 1: Die blockbasierte Struktur einer Festplatte in der schematischen Darstellung.
Abbildung 1: Die blockbasierte Struktur einer Festplatte in der schematischen Darstellung.

Eine weitere Ebene in Abbildung 1 ist als KV-Speicher bezeichnet. Diese neue Funktion wurde notwendig, um das KV-Format der NoSQL-Anwendung an das vom Dateisystem erwartete Format anzupassen. Mit dieser neuen Ebene werden Adressen dreimal übersetzt, bevor sie den Speicher erreichen: zuerst durch den Schlüsselwertspeicher, dann durch das Dateisystem und schließlich durch die LBA-Tabelle. RocksDB und Ceph sind zwei beliebte Schlüsselwertspeicher, die diese Funktion erfüllen.

Als SSDs auf den Markt kamen, stellten Programmierer fest, dass die durch diese aufeinanderfolgenden Übersetzungen verursachten Verzögerungen einen erheblichen Teil der Speicherlatenzen ausmachten. Die Festplatten waren nicht das Problem, da ihre eigene Latenz größer war als die durch diese Übersetzungsschritte hinzugefügte Latenz. Bei SSDs war dies jedoch nicht mehr der Fall, und die Übersetzungsverzögerungen rückten zunehmend in den Fokus.

Um dieses Problem zu lösen, wurde die Idee einer Schlüsselwert-SSD entwickelt. Es machte keinen Sinn, all diese Übersetzungen durchzuführen, um die Daten im HDD-Stil zu formatieren, wenn sie gar nicht auf eine HDD gelangen. Daher gewann die Idee, eine SSD als Schlüsselwertspeichergerät zu verwalten, an Popularität. Das Ergebnis war eine Zusammenlegung der Schnittstelle zwischen der Anwendung und der SSD, wie in Abbildung 2 dargestellt.

Abbildung 2: Der Unterschied zwischen Key-Value-SSDs und blockbasierten Festplatten grafisch gargestellt.
Abbildung 2: Der Unterschied zwischen Key-Value-SSDs und blockbasierten Festplatten grafisch gargestellt.

Da die Daten der Anwendung nun dem vom Speichergerät gewünschten Format entsprechen, wird der Datenzugriff wesentlich schneller. Dieser Prozess hat jedoch noch weitere Vorteile.

Abkehr vom Blockmodell

Key-Value-Speichergeräte können ihre internen Daten viel effizienter verwalten als Blockspeicher, was sie ideal für Computational Storage (computergestütztes Speichern und Verarbeiten von Daten) macht. Bei Blockspeichern wird eine Datei in Blockgrößen (zum Beispiel 512 Byte oder 4 KB) unterteilt, und der Host muss die Zuordnung der Blöcke zu den Dateien verwalten. Nur der Host weiß, welcher Block zu welcher Datei gehört.

Stellen wir uns zwei Dateien vor: A und B. Beide Dateien werden in Blöcke unterteilt und in verschiedenen verfügbaren Speichermedien verteilt. Nach Schreibvorgängen oder Löschungen kann die Zuordnung der Blöcke nahezu zufällig werden.

Abbildung 3: Ein typisches Beispiel für zwei in Blöcke unterteilte Dateien.
Abbildung 3: Ein typisches Beispiel für zwei in Blöcke unterteilte Dateien.

Wenn ein Computational-Storage-Gerät innerhalb einer dieser beiden Dateien nach einem bestimmten Muster suchen möchte, muss der Host dem Speichergerät zunächst mitteilen, in welchen Blöcken gesucht werden soll. Eine Tabelle dieser Blöcke muss vom Host an das Speichergerät übertragen werden.

Da der Schlüsselwertspeicher die Platzierung der Daten des Werts intern verwaltet, weiß er automatisch, wo sich ein gesamter Wert befindet. Der Host muss sich daran nicht beteiligen. Wenn das schlüsselwertbasierte Computational Storage nach einem Muster innerhalb eines Werts suchen möchte, sucht es einfach in seinen eigenen internen Zuordnungstabellen, um herauszufinden, wo der Wert gespeichert ist, und durchsucht diesen Bereich.

Es gibt noch weitere Anwendungsmöglichkeiten. Wenn beispielsweise ein Unternehmen umzieht, könnte das Schlüsselwert-Computational-Storage angewiesen werden, alle alten Adressen des Hauptsitzes in den Unternehmensdokumenten in die neue Adresse umzuwandeln. Das Gerät könnte noch wesentlich komplexere Vorgänge ausführen. Einige Systeme nutzen diesen Ansatz bereits, um einzelne Dateien zu verschlüsseln oder zu komprimieren.

Geringere Schreibverstärkung

Flash-basierte SSDs unterliegen einem Verschleißprozess, da die Speicherzellen mit jeder Schreiboperation abgenutzt werden. Ein spezielles Phänomen in SSDs ist die Schreibverstärkung (Write Amplification), bei der eine einzelne Schreiboperation zu mehreren internen Schreibvorgängen auf den Flash-Speicherchips führt. Leider muss der Flash-Speicher auch gelöscht werden, bevor er überschrieben werden kann. Die minimale Löschgröße ist ein relativ großer Flash-Speicherblock, der sich von der LBA-Blockgröße eines Blockspeichergeräts unterscheidet.

Daher muss der interne SSD-Controller von Zeit zu Zeit gültige Daten verschieben, wobei dieser Bedarf mit zunehmender Auslastung des Geräts steigt. Bei dieser Schreibverstärkung kann ein einzelner Schreibvorgang auf die SSD zu mehreren internen Schreibvorgängen auf die Flash-Chips führen, was deren Lebensdauer verkürzt.

Key-Value-Speichergeräte können dies besser umgehen, indem sie größere, zusammenhängende Flash-Bereiche verwalten. Im Gegensatz zu traditionellen SSDs, die Daten über verschiedene Blöcke hinweg verteilen, verwalten Key-Value-SSDs zusammenhängende Datenblöcke und reduzieren dadurch die Notwendigkeit für häufige Verschiebungen von Daten innerhalb des Speichers. Wenn Daten gelöscht werden, erfolgt dies blockweise, ohne dass eine aufwendige Garbage Collection notwendig wird. Dies verringert die Schreibverstärkung und verlängert somit die Lebensdauer der SSD.

Einschränkungen und Standards

Obwohl Unternehmen wie Samsung Key-Value-SSDs demonstriert haben, sind diese noch nicht allgemein verfügbar. Bei der Einführung wird erwartet, dass diese Technologie zunehmend an Bedeutung gewinnt, sobald der Markt diese neue Speichertechnik akzeptiert.

Es gibt jedoch noch einige Herausforderungen. Ein wesentlicher Aspekt ist, dass für die optimale Leistung eines Key-Value-SSDs in einem System auch Softwareanpassungen erforderlich sind. Viele allgemeine Softwareprodukte sind noch nicht für die Nutzung von Key-Value-Speichern optimiert, was die Implementierung erschwert. Die Anpassung könnte mehrere Jahre in Anspruch nehmen.

Ein weiterer wichtiger Aspekt ist, dass bei Key-Value-SSDs die Daten nicht in-place verändert werden können. Wenn ein Wert geändert werden muss, wird der gesamte Wert neu gespeichert. Diese Einschränkung bedeutet, dass Programme nicht nur Teile eines Wertes lesen können, um die I/O-Anfragen zu minimieren – eine Technik, die häufig zur Leistungsoptimierung genutzt wird, jedoch nicht ganz sauber ist.

Die Unterstützung von Key-Value-Speichergeräten wird weiterhin vom NVMe-Protokoll profitieren, da es die einzigen SSDs betrifft, die auch Key-Value-Speichertechnologien unterstützen. In Zukunft könnte die NVMe-Spezifikation weiter angepasst werden, um die maximale Schlüsselgröße und Wertgröße zu erweitern. Der NVMe-Protokollstandard enthält bereits eine Key-Value Command Set Specification, die es ermöglicht, Schlüssel von 1 bis 16 Byte sowie Werte von wenigen Byte bis zu mehreren Megabytes zu verwalten.

Die Storage Networking Industry Association (SNIA) hat ebenfalls eine Key-Value Storage API Specification veröffentlicht, um die Kommunikation zwischen Anwendungen und Key-Value-SSDs zu standardisieren.

Erfahren Sie mehr über Flash Storage und SSD