Objavljen je izdanje biblioteke libmdbx 0.13.1 (MDBX) koja implementira visoko performantnu kompaktnu ugrađenu bazu podataka tipa ključ-vrednost. Kod libmdbx se distribuira pod Apache 2.0 licencom. Podržani su svi aktuelni operativni sistemi i arhitekture, kao i ruski Elbrus 2000. Za libmdbx je dostupno razvijeno API za C++, kao i podržane veze za jezike Rust, Haskell, Python, NodeJS, Ruby, Go, Nim, Deno, Scala.
Historijski, libmdbx je duboka prerada DBMS-a LMDB i nadmašuje svog predka u pouzdanosti, spektrom mogućnosti i performansama. U usporedbi s LMDB, libmdbx pridaje veliku pažnju kvaliteti koda, stabilnom radu API-ja, testiranju i automatskim provjerama. Nudi se alat za provjeru cjelovitosti strukture Baze podataka s nekim mogućnostima oporavka. Tehnološki, libmdbx nudi ACID, strogu serijalizaciju promjena i neblokirajuće čitanje s linearno skalabilnim procesorima.
Glavne promjene:
- Promena licence za kod sa OpenLDAP Public License na Apache 2.0.
- Proširenje API-a kursorima sa pogodnijim i očiglednijim operacijama pozicioniranja prema uslovima <, =, > kako za ključeve, tako i za parove ključ-vrednost. Dodate su funkcije mdbx_cursor_unbind() i mdbx_txn_release_all_cursors() za fleksibilno upravljanje kursorima u scenarijima ponovne upotrebe radi smanjenja troškova. Funkcije mdbx_cursor_scan() i mdbx_cursor_scan_from() za skeniranje tabela korišćenjem funkcionalnog predikata i smanjenjem pratećih troškova.
- Redizajn kursorima za unifikaciju ponašanja, regulisanje koda i smanjenje broja razgranata i mašinskih operacija.
- Premestiti funkcionalnost alata mdbx_chk unutar biblioteke u obliku funkcije mdbx_env_chk() za proveru integriteta strukture Baze podataka, uključujući uključivanje logike aplikacije.
- Opcija MDBX_opt_gc_time_limit za fleksibilniju kontrolu vremena trošenog na pretragu sekvenci susednih slobodnih stranica u GC.
- Značajno smanjenje troškova pokretanja transakcija u scenarijima sa velikim brojem DBI handlers, zahvaljujući odloženoj/lenjivoj inicijalizaciji elemenata pomoćnih tabela. Uključujući mehanizam podrške za razređene skupove DBI handlera, upravljan opcijom kompilacije MDBX_ENABLE_DBI_SPARSE, koja je uključena po defaultu.
- Smanjenje troškova otvaranja DBI handlera. Uključujući mehanizam odloženog oslobađanja i podrške brzog otvaranja bez korišćenja zaključavanja, upravljan opcijom kompilacije MDBX_ENABLE_DBI_LOCKFREE, koja je uključena po defaultu.
- Podrška za „parkiranje“ čitajućih transakcija uz njihovo uklanjanje radi obrade starih MVCC-snimaka i sprječavanje problema uzrokovanih pauzom u obradi smeća. Mehanizam parkiranja i uklanjanja parkiranih transakcija služi kao dopuna i jednostavnija alternativna opcija za povratni poziv Handle-Slow-Readers. Za praktičnost, funkcije mdbx_txn_park() i mdbx_txn_unpark() imaju dodatne argumente koji omogućuju zahtjev za automatskim „odparkiranjem“ i ponovnim pokretanjem uklonjenih transakcija. U alat mdbx_copy dodane su odgovarajuće opcije -d i -p.
- Podrška za vraćanje otvorenog radnog okruženja baze podataka u dječjem procesu nakon grananja/razdvajanja procesa putem mdbx_env_resurrect_after_fork().
- Podrška za preimenovanje tablica putem mdbx_dbi_rename() i mdbx_dbi_rename2(). Dodana funkcija mdbx_enumerate_tables() za dobivanje informacija o imenovanim korisničkim tablicama.
- Način rada MDBX_NOSTICKYTHREADS umjesto MDBX_NOTLS radi pojednostavljenja integracije s laganim nitima/multiplexiranjem njih zajedno s transakcijama osnovnog operativnog sustava.
- Za identifikaciju baze podataka dodan je UUID dostupan u polju mi_dxbid strukture MDBX_envinfo, dobivenoj putem mdbx_env_info_ex(). Implementirano je dobivanje informacija o bazi podataka bez njenog otvaranja putem mdbx_preopen_snapinfo().
- Podrška za funkcije dnevničkog poziva bez funkcionalnosti vprintf(), što znatno olakšava korištenje dnevničkog zapisa u vezama s drugim programskim jezicima.
- Dodavanje funkcija u API mdbx_txn_copy2pathname() i mdbx_txn_copy2fd().
- Restrukturiranje izvornog koda uz refaktoriranje.
- Korištenje termina „tablica“ umjesto „subDb“.
- Objavljivanje opcija MDBX_COALESCE i MDBX_NOTLS kao zastarjelih. Zamjena opcije za izgradnju MDBX_USE_VALGRIND u općeprihvaćenu ENABLE_MEMCHECK.
Izvor: opennet.ru
