Megjelent a TidesDB projekt első stabil verziója, amely egy kulcs/érték adat tároló könyvtár fejlesztésével foglalkozik. A projekt önállóan futtatható motoraként vagy alkalmazásokba integrálva használható. Kulcsfontosságú lehetőségei közé tartozik az ACID tranzakciók támogatása és az adatok hatékony tárolásának optimalizálása Flash tárolókon és a memóriában. A kód C nyelven készült, és MPL 2.0 licenc alatt terjesztik. Készültek kötődések C++, Go, Java, Python, Rust, Lua és JavaScript nyelvekhez.
Az adatok tárolásához LSM-fa (naplózott, strukturált fák egyesítésével) struktúrával járul hozzá, amely biztosítja magas teljesítmény nemcsak az olvasás, hanem az írási és módosítási műveletek végrehajtása során is. Az olvasási műveletek nem blokkolják az adatok írását és olvasását, míg az írási műveletek csak az érintett oszlopcsaládokat blokkolják. A gyorsabb olvasás érdekében indexek és bloom szűrők alapú cache támogatás áll rendelkezésre (amelyek lehetővé teszik a halmazokba való tartozást, elismerve a hamis hiányzó elemeket, de kizárják a meglévő elemek kihagyását).
Teljes támogatás elérhető az ACID tranzakciókhoz, amelyek lehetővé teszik az oszlopcsaládokat átfogó változtatások atomatikus végrehajtását, és szükség esetén az operációk atomatikus visszavonását. Az adatok tömörített formában tárolhatók, a tömörítési algoritmus az oszlopcsaládhoz kapcsolható. Lehetőség van blokkolások beállítására az egyes oszlopcsaládok szintjén és a tároló csomagolására párhuzamos módban anélkül, hogy blokkolná az adatbázis műveleteit.
Főbb funkciók:
- Oszlopcsaládok (Column Families) támogatása — elkülönített adathalmazon alapuló kulcs/érték formátumban. Minden oszlopcsalád saját memtable, SSTable és WAL naplóval rendelkezik.
- ACID tranzakciók, amelyek több műveletet ölelnek fel oszlopcsaládokkal.
- Optimalizálás párhuzamos adateléréshez.
- Támogatja a kétirányú iterátorokat, amelyek lehetővé teszik a kulcs/érték párok előre vagy hátra történő bejárását a tárolásban választott pozíciótól kezdve, az eredetileg megadott rendezési módszert használva.
- Támogatja a saját kulcs-összehasonlító funkciók hozzáadását. Beépített összehasonlító funkciók elérhetők: memcmp, string és numeric.
- A műveletek naplózása (WAL, Write-Ahead Log) és a memtable (a memória tárolója) automatikus helyreállítása ebből a naplóból indításkor.
- Bloom-szűrők használata a tárolás minimalizálása érdekében kulcsok jelenlétének ellenőrzésével az SSTable (állandó tárolás) olvasása előtt.
- Snappy, LZ4 és ZSTD algoritmusok támogatása az SSTable tárolóban és WAL-naplóban lévő rekordok tömörítéséhez.
- A rekordok élettartamának (TTL) meghatározásának és a lejárt rekordok automatikus kizárásának lehetősége.
- Három adat-szinkronizálási mód az OZR és az állandó tárolás között: NONE (leggyorsabb), BACKGROUND (kiegyensúlyozott), FULL (legmegbízhatóbb).
- A memtable méretének, a tömörítési módszereknek, a bloom-szűrőknek, az adatszinkronizálás módjának és a csomagolási paraméterek beállításának lehetősége minden oszlopcsalád esetében.
- Egyszerű C API, amely 0-t ad vissza a művelet sikeres végrehajtása esetén, és -1-et hibánál.
- SBHA (Sorted Binary Hash Array) használata az SSTable-ben található adatok gyors keresésére, lehetővé téve a kulcsok blokk elmozdulásainak meghatározását teljes átkutatás nélkül.
- Kompakt, hordozható bináris formátum a tárolás bemutatásához, amely támogatja a verzionálást.
- Beépített integritás-ellenőrző mechanizmusok, adatkárosodások meghatározása és helyreállítás.
Forrás: opennet.ru
