ĂshtĂ« publikuar versioni i parĂ« stabil i projektit TidesDB, i cili zhvillon njĂ« bibliotekĂ« pĂ«r ruajtjen e tĂ« dhĂ«nave nĂ« formatin çelĂ«s/vlerĂ«. Projekti mund tĂ« pĂ«rdoret si njĂ« motor i vetĂ«-rĂ«nĂ«, ose pĂ«r t'u integruar nĂ« aplikacione. NjĂ« nga mundĂ«sitĂ« kyçe tĂ« theksuara Ă«shtĂ« mbĂ«shtetje pĂ«r transaksionet ACID dhe optimizimi pĂ«r ruajtjen efektive tĂ« tĂ« dhĂ«nave nĂ« memorien Flash dhe RAM. Kodi Ă«shtĂ« shkruar nĂ« gjuhĂ«n C dhe shpĂ«rndahet nĂ«n licencĂ«n MPL 2.0. NdĂ«rlidhjet janĂ« pĂ«rgatitur pĂ«r gjuhĂ«t C++, Go, Java, Python, Rust, Lua dhe JavaScript.
Për ruajtjen e të dhënave përdoret struktura LSM-tree (përcaktimi i çelësit anën e lubrifikimit të regjistrit), e cila garanton performancë të lartë jo vetëm gjatë leximit, por gjithashtu gjatë kryerjes së operacioneve të shkruara dhe ndryshimeve të të dhënave. Operacionet e leximit nuk bllokojnë shkruarjen dhe leximin e të dhënave, ndërsa operacionet e shkruarjes bllokojnë vetëm familjen e kolonave në të cilën po kryhet shkruarja. Për një përshpejtim të shtuar të leximit, mbështeten indekset dhe përmirësimi duke përdorur bloom-filtër (lejon verifikimin e përfshirjes në një grup, duke toleruar definimin e gabuar të mungesës së një elementi, por duke përjashtuar humbjen e një elementi ekzistues).
Ka njĂ« mbĂ«shtetje tĂ« plotĂ« pĂ«r transaksionet ACID, duke lejuar ndĂ«rhyrje atomike qĂ« pĂ«rfshijnĂ« familjet e kolonave dhe, kur tĂ« jetĂ« e nevojshme, tĂ«rheqjen atomike tĂ« operacioneve. TĂ« dhĂ«nat mund tĂ« ruhen nĂ« format tĂ« kompresuar me zgjedhjen e algoritmit tĂ« kompresimit nĂ« lidhje me familjen e kolonave. ĂshtĂ« e mundur tĂ« vendosen bllokime nĂ« nivelin e familjeve tĂ« veçanta tĂ« kolonave dhe paketimin e ruajtjes nĂ« modin paralel pa bllokimin e operacioneve me bazĂ«n e tĂ« dhĂ«nave.
Funksionalitetet kryesore:
- MbĂ«shtetje pĂ«r familjet e kolonave (Column Families) â grupe tĂ« izoluara tĂ« tĂ« dhĂ«nave nĂ« formatin çelĂ«s/vlerĂ«. PĂ«r çdo familje kolone pĂ«rdoren memtable, SSTable dhe log WAL tĂ« veta.
- Transaksionet ACID, të cilat përfshijnë disa operacione me familjet e kolonave.
- Optimizimi për qasjen paralel në të dhëna.
- Mbështetje për iteratorë dyanshëm, duke lejuar kalimin e çelësave/vlerave përpara ose prapa në raport me pozitat e zgjedhura në ruajtje, duke përdorur metodën e renditjes fillestare.
- Mbështetje për shtimin e funksioneve të krahasimit të çelësave. Prania e funksioneve të brendshme të krahasimit memcmp, string dhe numeric.
- Përmbajtja e logut të operacioneve (WAL, Write-Ahead Log) dhe rikuperimi automatik i memtable (ruajtja në RAM) nga ky log gjatë nisjes.
- Përdorimi i Bloom-filtrave për minimizimin e kërkesave ndaj ruajtësit përmes verifikimit të pranisë së çelësit përpara leximit nga SSTable (ruajtja e përhershme).
- Mbështetje për algoritmat Snappy, LZ4 dhe ZSTD për kompresimin e regjistrave në SSTable dhe logun WAL.
- Mundësia e përcaktimit të kohës së jetës së regjistrave (TTL) dhe përjashtimi automatik i regjistrave të skaduar.
- Tre mënyra të sinkronizimit të të dhënave në RAM me ruajtjen e përhershme: NONE (më e shpejtë), BACKGROUND (e balancuar), FULL (më e besueshme).
- Mundësia e konfigurimit të madhësisë së memtable, metodave të kompresimit, bloom-filtrave, mënyrës së sinkronizimit dhe parametrave të paketimit për çdo familje kolone.
- API i thjeshtë C, që kthen 0 kur operacioni është kryer me sukses dhe -1 kur ka ndodhur një gabim.
- Përdorimi i SBHA (Sorted Binary Hash Array) për kërkimin e shpejtë të të dhënave në SSTable, duke lejuar përcaktimin e offset-eve të blloqeve me çelësa pa bërë skanime të plota.
- Format kompakt dhe portativ të përfaqësimit të bazës, i cili mbështet versionimin.
- Mekanizma të brendshëm për kontrollin e integritetit, identifikimin e dëmtimeve të të dhënave dhe rikuperimin.
Burimi: opennet.ru
