Den första stabila versionen av TidesDB-projektet har publicerats, som utvecklar ett bibliotek för lagring av data i formatet nyckel/vÀrde. Projektet kan anvÀndas som en fristÄende motor eller för integrering i applikationer. Bland de viktigaste egenskaperna nÀmns stöd för ACID-transaktioner och optimering för effektiv lagring av data pÄ Flash-minnen och i RAM. Koden Àr skriven pÄ C och distribueras under MPL 2.0-licensen. Bindningar har förberetts för sprÄken C++, Go, Java, Python, Rust, Lua och JavaScript.
För lagring av data anvÀnds en LSM-tree-struktur (log-strukturerat trÀd med sammanslagning), som sÀkerstÀller hög prestanda inte bara vid lÀsning, utan ocksÄ vid utförande av skriv- och Àndringsoperationer. LÀsoperationer blockerar inte skrivning och lÀsning av data, medan skrivoperationer blockerar endast den kolumnfamilj dÀr skrivningen utförs. För ytterligare accelerering av lÀsningen stöds indexering och caching baserat pÄ bloom-filter (som möjliggör kontroll av medlemsskap i en mÀngd, med en viss risk för falska negativa, men utesluter att ett existerande element missas).
Det finns fullstÀndigt stöd för ACID-transaktioner, vilket möjliggör atomÀra Àndringar som omfattar kolumnfamiljer, och vid behov atomÀra ÄterstÀllningar av operationer. Data kan lagras i komprimerad form med val av komprimeringsalgoritm kopplad till kolumnfamiljen. Det Àr möjligt att sÀtta lÄs pÄ nivÄn av specifika kolumnfamiljer och packning av lagret i parallell utan att blockera utförandet av operationer med databasen.
Key features:
- Stöd för kolumnfamiljer (Column Families) â isolerade uppsĂ€ttningar av data i formatet nyckel/vĂ€rde. För varje kolumnfamilj anvĂ€nds sina egna memtable, SSTable och WAL-logg.
- ACID-transaktioner som omfattar flera operationer med kolumnfamiljer.
- Optimering för parallell Ätkomst till data.
- Stöd för tvÄvÀgsiteratorer, som möjliggör iterering av nyckel/vÀrde-par framÄt eller bakÄt frÄn en vald position i lagret, med hjÀlp av en initialt definierad sorteringsmetod.
- Stöd för att lÀgga till egna jÀmförelsefunktioner för nycklar. Inbyggda jÀmförelsefunktioner sÄsom memcmp, string och numeric finns.
- Loggning av operationer (WAL, Write-Ahead Log) och automatisk ÄterstÀllning av memtable (minnesbaserat lagringsutrymme) frÄn denna logg vid start.
- AnvÀndning av Bloom-filter för att minimera Ätkomsten till lagringen genom att kontrollera förekomsten av nyckeln före lÀsning frÄn SSTable (permanent lagring).
- Stöd för algoritmerna Snappy, LZ4 och ZSTD för komprimering av poster i SSTable-lagringen och WAL-logg.
- Möjlighet att definiera livstid för poster (TTL) och automatisk uteslutning av förfallna poster.
- Tre lÀgen för datasykronisering i RAM med permanent lagring: NONE (snabbast), BACKGROUND (balanserad), FULL (mest tillförlitlig).
- Möjlighet att konfigurera storleken pÄ memtable, komprimeringsmetoder, bloom-filter, synkroniseringslÀge och paketeringsparametrar för varje kolumnfamilj.
- Ett enkelt C API som returnerar 0 vid framgÄng och -1 vid fel.
- AnvÀndning av SBHA (Sorted Binary Hash Array) för snabb databasgenomsökning i SSTable, vilket möjliggör bestÀmning av offset för block med nycklar utan fullstÀndig skanning.
- Kompakt, bÀrbart binÀrt format för databasrepresentation med versionsstöd.
- Inbyggda mekanismer för integritetskontroll, felidentifiering och ÄterstÀllning.
KĂ€lla: opennet.ru
