cobalt

Un stockage clé–valeur embarqué de type LSM en Zig. Les écritures récentes vont dans une skiplist adossée à un WAL, sont vidées vers des SSTables immuables, et l'espace est récupéré par leveled compaction.

cobalt
TL;DR

Un magasin clé-valeur LSM embarqué en Zig. Les écritures fraîches atterrissent dans une skiplist adossée à un WAL, sont ensuite vidangées vers des SSTables immuables, et le leveled compaction récupère l'espace. C'est le fondement sur lequel reposent les bases de données modernes.

Introduction

Les bases de données modernes que vous utilisez chaque jour ont presque toujours la même forme de moteur en dessous. cobalt existe pour que cette forme cesse d'être une boîte noire : il implémente tout le chemin d'écriture LSM du journal au compaction, en Zig, un langage qui ne vous cache pas un seul octet ni une seule allocation.

Ce n'est pas une base de données de plus pour la production mais un moteur démonté en pièces où chaque décision est visible. Une fois que vous écrivez vous-même le WAL, la memtable, la SSTable et le compaction, RocksDB et Cassandra cessent d'être magiques et deviennent des variantes familières de la même idée.

Pourquoi LSM et pas un B-arbre

Les bases classiques écrivent sur place, en mettant à jour des pages de B-arbre, ce qui signifie des écritures aléatoires sur le disque. LSM va dans l'autre sens : chaque écriture est un ajout. Les nouvelles données atterrissent dans une structure en mémoire tandis que les couches plus anciennes reposent immuables sur le disque. Cela rend les écritures rapides et séquentielles, car les écritures séquentielles sont exactement ce qu'un disque aime le plus.

Le coût est clair et délibéré : les mêmes données peuvent vivre à plusieurs endroits à la fois et doivent être fusionnées plus tard. Tout l'art du LSM consiste à payer cette dette en arrière-plan sans ralentir les écritures qui la créent.

Le chemin d'écriture, étape par étape

1
WAL

une écriture touche d'abord le journal, donc elle survit à une coupure soudaine avant d'atterrir ailleurs.

2
Skiplist

les données fraîches se tiennent dans une structure en mémoire triée, prête pour des lectures rapides.

3
SSTable

quand la mémoire se remplit, la skiplist est vidangée vers un fichier immuable et trié sur le disque.

4
Compaction

le leveled compaction fusionne les fichiers entre niveaux, jette les versions écrasées et récupère l'espace.

L'ordre de ces étapes n'est pas accidentel. Le WAL vient en premier justement parce qu'il garantit la durabilité avant que les données n'atteignent la mémoire volatile. Si l'ordre était inversé, une panne de courant entre l'écriture en mémoire et le journal signifierait une perte de données silencieuse.

Le compaction est le cœur qui distingue un LSM qui fonctionne d'un qui s'étouffe avec le temps. Sans lui, les fichiers SSTable s'empilent à l'infini et une lecture doit parcourir de plus en plus de couches. Le leveled compaction les fusionne entre niveaux, en rejetant au passage les versions écrasées et en récupérant l'espace occupé par les données mortes.

i
À noter

La même forme de moteur, WAL plus memtable plus SSTable plus compaction, est ce que vous trouvez dans RocksDB, LevelDB et Cassandra. La différence entre eux est surtout le réglage des mêmes briques, pas une architecture différente.

La fin de la boîte noire

Le plus grand bénéfice de cobalt n'est pas le magasin lui-même mais que les grandes bases de données cessent d'être un mystère. Une fois que vous avez parcouru tout le chemin de l'ajout au journal jusqu'à la récupération d'espace dans le compaction, vous savez exactement pourquoi LSM est rapide en écriture et où il le paie en lecture.

Les couches du moteur et où elles vivent aussi

CoucheRôleAilleurs
WALdurabilité de l'écrituretoute base sérieuse
Memtable (skiplist)données fraîches en mémoireRocksDB, LevelDB
SSTablefichiers immuables sur le disqueCassandra, LevelDB
Compactionrécupération d'espace, fusionRocksDB, Cassandra

Plus de projets

D'autres réalisations de la même catégorie - découvrez comment nous abordons des défis similaires.

Vous avez un projet similaire ?

Contactez-nous - le devis est gratuit et arrive sous une heure.