Den første stabile udgave af TidesDB-projektet, der udvikler et bibliotek til lagring af data i nøgle/værdi-format, er offentliggjort. Projektet kan anvendes som en selvstændig motor eller til indbygning i applikationer. Blandt de centrale funktioner bemærkes støtte til ACID-transaktioner og optimering til effektiv datalagring på flash-lagringsenheder og i RAM. Koden er skrevet i C og distribueres under MPL 2.0-licensen. Bindings er forberedt til C++, Go, Java, Python, Rust, Lua og JavaScript.
Data lagres ved hjælp af en LSM-tree-struktur (log-struktureret træ med sammensmeltning), der sikrer høj ydeevne ikke kun ved læsning, men også ved udførelse af skrive- og ændringsoperationer. Læsninger blokerer ikke for skrivning og læsning af data, mens skriveoperationer kun blokerer for den kolonnefamilie, hvor skrivningen finder sted. For at fremskynde læsning understøttes indekser og caching baseret på bloom-filtre (som tillader kontrol af medlemskab i en mængde, med mulighed for falsk negativ, men udelukker overspring af eksisterende elementer).
Der er fuld støtte til ACID-transaktioner, der muliggør atomære ændringer dækker kolonnefamilier, og at operationer kan atomært rulles tilbage om nødvendigt. Data kan opbevares i komprimeret form med valg af komprimeringsalgoritme tilknyttet kolonnefamilien. Det er muligt at indstille låse på niveauet for enkeltstående kolonnefamilier og pakke lagringen i parallel uden at blokere udførelsen af databaseoperationer.
Hovedfunktioner:
- Støtte til kolonnefamilier (Column Families) - isolerede datasæt i nøgle/værdi-format. Hver kolonnefamilie bruger sin egen memtable, SSTable og WAL-log.
- ACID-transaktioner, der dækker flere operationer med kolonnefamilier.
- Optimering til parallel adgang til data.
- Støtte til bi-dirigerede iteratorer, der gør det muligt at iterere over nøgle/værdi-par fremad eller bagud i forhold til en valgt position i lageret, ved at bruge en oprindeligt angivet sorteringsmetode.
- Støtte til tilføjelse af brugerdefinerede sammenligningsfunktioner for nøgler. Indbyggede sammenligningsfunktioner som memcmp, string og numeric er tilgængelige.
- Logføring af operationer (WAL, Write-Ahead Log) og automatisk genopretning af memtable (hukommelseslager) fra denne log ved opstart.
- Brug af Bloom-filtre til at minimere opkald til lageret ved at tjekke for nøglen før læsning fra SSTable (permanent lager).
- Understøttelse af algoritmerne Snappy, LZ4 og ZSTD til kompression af poster i SSTable og WAL-loggen.
- Mulighed for at definere levetiden for poster (TTL) og automatisk udelukkelse af udløbne poster.
- Tre data-synkroniseringsmetoder i RAM med permanent lager: NONE (hurtigste), BACKGROUND (afbalanceret), FULL (mest pålidelige).
- Mulighed for at konfigurere størrelsen på memtable, kompressionsmetoder, bloom-filtre, synkroniseringsmetode og pakkemuligheder for hver kolonnefamilie.
- Enkel C API, der returnerer 0 ved succesfuld udførelse af operationen og -1 ved fejl.
- Brug af SBHA (Sorted Binary Hash Array) til hurtig datafindering i SSTable, der gør det muligt at bestemme offset for blokke med nøgler uden fuld scanning.
- Kompakt bærbart binært format til databaserepræsentation, der understøtter versionering.
- Indbyggede mekanismer til kontrol af dataintegritet, fejldetektion og genopretning.
Kilde: opennet.ru
