Objavljeno je izdanje biblioteke libmdbx 0.13.1 (MDBX) sa implementacijom visoko performantne kompaktne ugrađene baze podataka klase ključ-vrednost. Kod libmdbx se distribuira pod Apache 2.0 licencom. Podržani su svi aktuelni operativni sistemi i arhitekture, uključujući ruski Elbrus 2000. Za libmdbx je dostupno razvijeno API za C++, kao i podržane entuzijastične veze s jezicima Rust, Haskell, Python, NodeJS, Ruby, Go, Nim, Deno, Scala.
Istorijski, libmdbx predstavlja duboku preradu DBMS LMDB i nadmašuje svog prethodnika u pouzdanosti, opsegu mogućnosti i performansama. U poređenju sa LMDB, libmdbx posvećuje veliku pažnju kvalitetu koda, stabilnom radu API-ja, testiranju i automatskim proverama. Isporučuje se alat za proveru integriteta strukture baze podataka sa nekim mogućnostima obnavljanja. Tehnološki, libmdbx nudi ACID, strogu serijalizaciju promena i neblokirajuće čitanje s linearnim skaliranjem po CPU jezgrama. Podržava automatsku kompaktifikaciju, automatsko upravljanje veličinom baze podataka, procenu obima uzoraka po opsegu (range query estimation).
Glavne spremembe:
- Promena licence za kod sa OpenLDAP Public License na Apache 2.0.
- Proširenje API-a kursora s primernijim 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 ponovnog korišćenja radi smanjenja troškova. Funkcije mdbx_cursor_scan() i mdbx_cursor_scan_from() za skeniranje tabela koristeći funkcionalni predikat i smanjenje povezanih troškova.
- Prepravka kursora za ujednačavanje ponašanja, redovniji kod, smanjenje broja grananja i mašinskih operacija.
- Prenos funkcionalnosti 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 potrošenog na pronalaženje sekvenci susednih slobodnih stranica u GC.
- Znatno zmanjšanje stroškov zagonov transakcij v scenarijih z velikim številom DBI-hendov, zahvaljujoč zakasnjenemu/leni začetku elementov pomožnih tabel. Vključno z mehanizmom podpore redčenih nizov DBI-hendov, upravljanim z možnostjo gradnje MDBX_ENABLE_DBI_SPARSE, ki je privzeto omogočena.
- Zmanjšanje stroškov za odpiranje DBI-hendov. Vključno z mehanizmom zakasnjenega sproščanja in podpore hitre poti odpiranja brez uporabe zaklepanja, upravljanim z možnostjo gradnje MDBX_ENABLE_DBI_LOCKFREE, ki je privzeto omogočena.
- Podpora za „parkiranje“ bralnih transakcij z njihovo izrinjanjem zaradi predelave starih MVCC-slik in preprečevanje težav, ki jih povzroča zaustavitev predelave odpadkov. Mehanizem parkiranja in izrinjanja parkiranih transakcij je tako dodatek kot enostavnejša alternativa klicu Handle-Slow-Readers. Za udobje imata funkciji mdbx_txn_park() in mdbx_txn_unpark() dodatne argumente, ki omogočajo zahtevano samodejno „odparkiranje“ parkiranih in ponovni zagon izrinjenih transakcij. V orodje mdbx_copy so dodane ustrezne možnosti -d in -p.
- Podpora za obnavljanje odprte okolja dela z Bazo podatkov v podrejenem procesu po razcepu/pospešenju procesa preko mdbx_env_resurrect_after_fork().
- Podpora za preimenovanje tabel preko mdbx_dbi_rename() in mdbx_dbi_rename2(). Dodana funkcija mdbx_enumerate_tables() za pridobivanje informacij o poimenovanih uporabniških tabelah.
- Način delovanja MDBX_NOSTICKYTHREADS namesto MDBX_NOTLS za poenostavitev integracije z lahkimi nitmi/multiplexiranje z osrednjimi transakcijami operacijskega sistema.
- Za identifikacijo baze podatkov je bil dodan UUID, ki je dostopen na polju mi_dxbid strukture MDBX_envinfo, pridobljenega preko mdbx_env_info_ex(). Uresničena je bila pridobitev informacij o bazi podatkov brez njene odprtosti preko mdbx_preopen_snapinfo().
- Podpora za funkcije dnevnikovanja povratnih klicev brez funkcionalnosti vprintf(), kar znatno poenostavi uporabo dnevnikovanja v povezavah z drugimi programskimi jeziki.
- Dodajanje funkcij v API mdbx_txn_copy2pathname() in mdbx_txn_copy2fd().
- Restrukturiranje izvorne kode z refaktorizacijo.
- Uporaba izraza „tabela“ namesto „subDb“.
- Opozorilo na zastarele možnosti MDBX_COALESCE in MDBX_NOTLS. Zamenjava gradbenih možnosti MDBX_USE_VALGRIND z običajno ENABLE_MEMCHECK.
Izvor: opennet.ru
