La premiĂšre version stable du projet TidesDB a Ă©tĂ© publiĂ©e, dĂ©veloppant une bibliothĂšque pour le stockage de donnĂ©es au format clĂ©/valeur. Le projet peut ĂȘtre utilisĂ© comme un moteur autonome ou intĂ©grĂ© dans des applications. Parmi les fonctionnalitĂ©s clĂ©s, on note le support des transactions ACID et l'optimisation pour un stockage efficace des donnĂ©es sur des disques flash et en mĂ©moire vive. Le code est Ă©crit en C et est distribuĂ© sous la licence MPL 2.0. Des wrappers ont Ă©tĂ© prĂ©parĂ©s pour les langages C++, Go, Java, Python, Rust, Lua et JavaScript.
Pour le stockage des données, une structure LSM-tree (arbre log-structured avec fusion) est utilisée, garantissant une haute performance non seulement lors de la lecture, mais aussi lors de l'exécution d'opérations d'écriture et de modification des données. Les opérations de lecture ne bloquent pas l'écriture et la lecture des données, tandis que les opérations d'écriture bloquent uniquement la famille de colonnes dans laquelle l'écriture est effectuée. Pour un accélération supplémentaire des lectures, des index et un cache basé sur des filtres de Bloom sont supportés (permettant de vérifier l'appartenance à un ensemble, admettant une fausse déclaration d'absence d'un élément, mais excluant le passage d'un élément existant).
Un support complet des transactions ACID est disponible, permettant d'apporter des modifications atomiques couvrant des familles de colonnes et, si nĂ©cessaire, d'annuler atomiquement les opĂ©rations. Les donnĂ©es peuvent ĂȘtre stockĂ©es sous forme compressĂ©e avec le choix de l'algorithme de compression liĂ© Ă la famille de colonnes. Il est possible d'appliquer des verrous au niveau de familles de colonnes individuelles et de packer le stockage en mode parallĂšle sans bloquer l'exĂ©cution des opĂ©rations sur la base de donnĂ©es.
Fonctionnalités principales :
- Support des familles de colonnes (Column Families) â ensembles de donnĂ©es isolĂ©s au format clĂ©/valeur. Pour chaque famille de colonnes, des memtables, SSTables et journaux WAL distincts sont utilisĂ©s.
- Transactions ACID couvrant plusieurs opérations avec des familles de colonnes.
- Optimisation pour l'accÚs parallÚle aux données.
- Support des itérateurs bidirectionnels permettant de parcourir des paires clé/valeur en avant ou en arriÚre par rapport à une position donnée dans le stock, en utilisant une méthode de tri précisée au départ.
- Support de l'ajout de ses propres fonctions de comparaison de clés. Présence de fonctions de comparaison intégrées comme memcmp, string et numeric.
- Journalisation des opérations (WAL, Write-Ahead Log) et restauration automatique du memtable (stockage en mémoire) à partir de ce journal lors du démarrage.
- Utilisation de filtres Bloom pour minimiser les accÚs au stockage grùce à la vérification de la présence de clés avant la lecture depuis SSTable (stockage permanent).
- Support des algorithmes Snappy, LZ4 et ZSTD pour la compression des enregistrements dans le stockage SSTable et le journal WAL.
- Possibilité de définir le temps de vie des enregistrements (TTL) et d'exclure automatiquement les enregistrements expirés.
- Trois modes de synchronisation des données en RAM avec le stockage permanent : NONE (le plus rapide), BACKGROUND (équilibré), FULL (le plus fiable).
- Possibilité de configurer la taille du memtable, les méthodes de compression, les filtres Bloom, le mode de synchronisation et les paramÚtres de packaging pour chaque famille de colonnes.
- API C simple, retournant 0 en cas de réussite de l'opération et -1 en cas d'erreur.
- Utilisation de SBHA (Sorted Binary Hash Array) pour une recherche rapide des données dans SSTable, permettant de déterminer les offsets des blocs de clés sans scanner l'intégralité.
- Format binaire portable compact pour la représentation de la base de données, supportant le versionnement.
- Mécanismes intégrés de contrÎle d'intégrité, de détection des dommages de données et de récupération.
Source : opennet.ru
