Objavljeno je prvo stabilno izdanje projekta TidesDB, biblioteke za pohranjivanje podataka ključ/vrijednost. Projekat se može koristiti kao samostalni mehanizam ili ugrađen u aplikacije. Ključne karakteristike uključuju podršku za ACID transakcije i optimizacije za efikasno pohranjivanje podataka na fleš diskovima i u RAM-u. Kod je napisan u C-u i distribuiran pod MPL 2.0 licencom. Veze su razvijene za C++, Go, Java, Python, Rust, Lua i JavaScript.
Za pohranjivanje podataka koristi se struktura LSM-stabla (log-strukturirano stablo sa spajanjem), koja pruža Visoke performanse Ne samo prilikom čitanja, već i prilikom pisanja i modificiranja podataka. Operacije čitanja ne blokiraju operacije čitanja ili pisanja, a operacije pisanja blokiraju samo porodicu kolona u kojoj se pisanje vrši. Indeksi i keširanje zasnovano na Bloom filteru su podržani za dodatnu brzinu čitanja (oni omogućavaju provjere uključivanja skupa, dozvoljavajući lažno pozitivan rezultat za nedostajući element, ali isključujući izostavljanje postojećeg elementa).
Dostupna je puna podrška za ACID transakcije, što omogućava atomske promjene u porodicama kolona i, ako je potrebno, atomsko vraćanje na prethodno stanje. Podaci se mogu pohraniti komprimirani, s izborom algoritama kompresije specifičnih za svaku porodicu kolona. Brave se mogu postaviti na nivou porodice kolona, a pakiranje pohrane može se izvoditi paralelno bez blokiranja operacija baze podataka.
Osnovne mogućnosti:
- Podrška za porodice kolona - izolovani skupovi podataka ključ/vrijednost. Svaka porodica kolona koristi svoju vlastitu memtable, SSTable i WAL log.
- ACID transakcije koje obuhvataju više operacija porodica kolona.
- Optimizacija za paralelni pristup podacima.
- Podrška za dvosmjerne iteratore, što vam omogućava iteraciju kroz parove ključ/vrijednost naprijed ili nazad u odnosu na datu poziciju u skladištu, koristeći unaprijed definiranu metodu sortiranja.
- Podrška za dodavanje prilagođenih funkcija poređenja ključeva. Dostupne su ugrađene funkcije poređenja za memcmp, string i numeričke vrijednosti.
- Održavanje dnevnika unaprijed pisanja (WAL) i automatsko vraćanje memtable (RAM memorije) iz ovog dnevnika pri pokretanju.
- Korištenje Bloom filtera za minimiziranje pristupa disku provjerom prisutnosti ključa prije čitanja iz SSTable-a (trajna pohrana).
- Podrška za Snappy, LZ4 i ZSTD algoritme za kompresiju zapisa u SSTable pohrani i WAL dnevniku.
- Mogućnost definiranja vremena trajanja (TTL) za zapise i automatsko isključivanje isteklih zapisa.
- Tri načina sinhronizacije podataka u RAM-u s perzistentnom pohranom: NIJEDAN (najbrži), POZADINSKI (uravnotežen), POTPUNI (najpouzdaniji).
- Mogućnost prilagođavanja veličine memtable, metoda kompresije, Bloom filtera, načina sinhronizacije i parametara pakiranja za svaku porodicu kolona.
- Jednostavan C API koji vraća 0 u slučaju uspjeha i -1 u slučaju greške.
- Korištenje SBHA (Sorted Binary Hash Array) za brzo pretraživanje podataka u SSTable-u, omogućava određivanje pomaka blokova s ključevima bez potpunog skeniranja.
- Kompaktni, prenosivi format binarne reprezentacije baze podataka koji podržava verzioniranje.
- Ugrađeni mehanizmi za kontrolu integriteta, otkrivanje i oporavak oštećenja podataka.
izvor: opennet.ru
