Byl zveřejněn první stabilní vydání projektu TidesDB, který rozvíjí knihovnu pro ukládání dat ve formátu klíč/hodnota. Projekt může být používán jako samostatně spustitelný engine nebo pro integraci do aplikací. Mezi klíčové vlastnosti patří podpora ACID transakcí a optimalizace pro efektivní ukládání dat na Flash pamětech a v operační paměti. Kód je napsán v jazyce C a distribuován pod licencí MPL 2.0. Obalové kódy jsou připraveny pro jazyky C++, Go, Java, Python, Rust, Lua a JavaScript.
Pro ukládání dat je použita struktura LSM-tree (logicky strukturované stromy se slučováním), která zajišťuje vysoký výkon nejen při čtení, ale i při provádění operací zápisu a změny dat. Operace čtení neblokují zápis a čtení dat, zatímco operace zápisu blokují pouze rodinu sloupců, ve které se zápis provádí. Pro další zrychlení čtení jsou podporovány indexy a cachování na bázi bloom filtrů (umožňují zkontrolovat přítomnost ve většině a povolují falešné určení chybějícího prvku, ale vylučují přeskočení existujícího prvku).
Existuje plná podpora ACID transakcí, které umožňují atomické provádění změn zahrnujících rodiny sloupců a v případě potřeby atomické vracení operací. Data mohou být ukládána v komprimované podobě s výběrem algoritmu komprese v závislosti na rodině sloupců. Je možné nastavit zámky na úrovni jednotlivých rodin sloupců a balení úložiště v paralelním režimu bez blokování provádění operací s databází.
Hlavní funkce:
- Podpora rodin sloupců (Column Families) — izolované sady dat ve formátu klíč/hodnota. Pro každou rodinu sloupců se používají vlastní memtable, SSTable a WAL log.
- ACID transakce zahrnující více operací s rodinami sloupců.
- Optimalizace pro paralelní přístup k datům.
- Podpora oboustranných iterátorů, které umožňují procházet páry klíč/hodnota dopředu nebo dozadu vzhledem k vybrané pozici v úložišti, přičemž se používá původně určená metoda třídění.
- Podpora přidávání vlastních funkcí porovnávání klíčů. Přítomnost vestavěných funkcí porovnávání memcmp, string a numeric.
- Záznam operací (WAL, Write-Ahead Log) a automatické obnovení memtable (paměťové úložiště) z tohoto záznamu při spuštění.
- Použití Bloom filtrů k minimalizaci přístupů k úložišti prostřednictvím kontroly existence klíče před čtením z SSTable (trvalé úložiště).
- Podpora algoritmů Snappy, LZ4 a ZSTD pro kompresi záznamů v úložišti SSTable a WAL.
- Možnost definovat dobu životnosti záznamů (TTL) a automaticky vylučovat neplatné záznamy.
- Tři režimy synchronizace dat v RAM s trvalým úložištěm: NONE (nejrychlejší), BACKGROUND (vyvážený), FULL (nejspolehlivější).
- Možnost nastavení velikosti memtable, metod komprese, bloom filtrů, režimu synchronizace a parametrů balení pro každou rodinu sloupců.
- Jednoduché C API, vracející 0 při úspěšném provedení operace a -1 při chybě.
- Použití SBHA (Sorted Binary Hash Array) pro rychlé vyhledávání dat v SSTable, umožňující určování posunů bloků s klíči bez úplného prohledávání.
- Kompaktní přenosný binární formát prezentace databáze, podporující versioning.
- Vestavěné mechanismy kontroly integrity, určování poškození dat a obnovení.
Zdroj: opennet.ru
