cobalt
Ein eingebetteter LSM-Key-Value-Store in Zig. Frische Schreibvorgänge landen in einer WAL-gestützten Skiplist, werden in unveränderliche SSTables geschrieben, und Platz wird durch Leveled-Compaction zurückgewonnen.
Ein eingebetteter LSM-Schlüssel-Wert-Speicher in Zig. Frische Schreibvorgänge landen in einer WAL-gestützten Skiplist, werden dann in unveränderliche SSTables geleert, und Leveled Compaction gewinnt den Platz zurück. Es ist das Fundament, auf dem moderne Datenbanken stehen.
Einführung
Die modernen Datenbanken, die Sie täglich benutzen, haben fast immer dieselbe Engine-Form darunter. cobalt existiert, damit diese Form aufhört, eine Blackbox zu sein: Es implementiert den gesamten LSM-Schreibpfad vom Log bis zur Compaction, in Zig, einer Sprache, die Ihnen kein einziges Byte und keine Allokation verbirgt.
Das ist keine weitere Datenbank für die Produktion, sondern eine in ihre Teile zerlegte Engine, in der jede Entscheidung sichtbar ist. Sobald Sie WAL, Memtable, SSTable und Compaction selbst schreiben, hören RocksDB und Cassandra auf, Magie zu sein, und werden zu vertrauten Varianten derselben Idee.
Warum LSM und kein B-Baum
Klassische Datenbanken schreiben an Ort und Stelle und aktualisieren B-Baum-Seiten, was zufällige Schreibvorgänge über die Platte bedeutet. LSM geht den anderen Weg: Jeder Schreibvorgang ist ein Anhängen. Neue Daten landen in einer In-Memory-Struktur, während ältere Schichten unveränderlich auf der Platte liegen. Das macht Schreibvorgänge schnell und sequenziell, denn sequenzielle Schreibvorgänge sind genau das, was eine Platte am liebsten mag.
Der Preis ist klar und bewusst: Dieselben Daten können an mehreren Stellen zugleich liegen und müssen später zusammengeführt werden. Die ganze Kunst von LSM besteht darin, diese Schuld im Hintergrund abzuzahlen, ohne die Schreibvorgänge zu bremsen, die sie erzeugen.
Der Schreibpfad, Schritt für Schritt
ein Schreibvorgang trifft zuerst das Log, also überlebt er ein plötzliches Abschalten, bevor er irgendwo anders landet.
frische Daten sitzen in einer sortierten In-Memory-Struktur, bereit für schnelle Lesevorgänge.
wenn der Speicher voll wird, wird die Skiplist in eine unveränderliche, sortierte Datei auf der Platte geleert.
Leveled Compaction führt Dateien über Ebenen zusammen, verwirft überschriebene Versionen und gewinnt Platz zurück.
Die Reihenfolge dieser Schritte ist kein Zufall. Das WAL kommt zuerst, gerade weil es Dauerhaftigkeit garantiert, bevor die Daten den flüchtigen Speicher erreichen. Wäre die Reihenfolge umgekehrt, würde ein Stromausfall zwischen dem Speicher-Schreibvorgang und dem Log stillen Datenverlust bedeuten.
Compaction ist das Herz, das eine funktionierende LSM von einer unterscheidet, die mit der Zeit erstickt. Ohne sie türmen sich SSTable-Dateien endlos, und ein Lesevorgang muss immer mehr Schichten durchsehen. Leveled Compaction führt sie über Ebenen zusammen, wirft dabei überschriebene Versionen hinaus und gewinnt den von toten Daten belegten Platz zurück.
Dieselbe Engine-Form, WAL plus Memtable plus SSTable plus Compaction, finden Sie in RocksDB, LevelDB und Cassandra. Der Unterschied zwischen ihnen ist meist die Feinabstimmung derselben Bausteine, nicht eine andere Architektur.
Das Ende der Blackbox
Der größte Gewinn von cobalt ist nicht der Speicher selbst, sondern dass große Datenbanken aufhören, ein Rätsel zu sein. Sobald Sie den ganzen Weg vom Anhängen an das Log bis zum Zurückgewinnen von Platz in der Compaction gegangen sind, wissen Sie genau, warum LSM beim Schreiben schnell ist und wo es das beim Lesen bezahlt.
Die Engine-Schichten und wo sie noch leben
| Schicht | Rolle | Wo noch |
|---|---|---|
| WAL | Schreibdauerhaftigkeit | jede ernsthafte Datenbank |
| Memtable (Skiplist) | frische Daten im Speicher | RocksDB, LevelDB |
| SSTable | unveränderliche Dateien auf der Platte | Cassandra, LevelDB |
| Compaction | Platzrückgewinnung, Zusammenführen | RocksDB, Cassandra |
Weitere Projekte
Weitere Projekte aus derselben Kategorie - sehen Sie, wie wir ähnliche Herausforderungen angehen.
Haben Sie ein ähnliches Projekt?
Melden Sie sich - ein Angebot ist kostenlos und kommt innerhalb einer Stunde.



