A fost publicat versiunea 0.13.1 a bibliotecii libmdbx (MDBX) cu implementarea unei baze de date încorporate, compactă și de înaltă performanță, de tip cheie-valoare. Codul libmdbx este distribuit sub licența Apache 2.0. Sunt acceptate toate sistemele de operare și arhitecturile actuale, precum și Elbrus 2000 din Rusia. Pentru libmdbx, este disponibil un API dezvoltat pentru C++, precum și legături susținute de entuziaști pentru limbajele Rust, Haskell, Python, NodeJS, Ruby, Go, Nim, Deno și Scala.
Istoric, libmdbx este o reproiectare profundă a SGBD-ului LMDB și îl depășește pe acesta în ceea ce privește fiabilitatea, setul de funcționalități și performanță. Comparativ cu LMDB, libmdbx acordă o mare atenție calității codului, funcționării stabile a API-ului, testării și verificărilor automate. Este disponibil un utilitar pentru verificarea integrității structurii BD cu unele funcții de restaurare. Din punct de vedere tehnologic, libmdbx oferă ACID, serializarea strictă a modificărilor și citiri neblocate cu scalare liniară pe nuclee CPU. Este suportată auto-compacția, gestionarea automată a dimensiunii BD și estimarea volumului de interogări pe intervale (range query estimation).
Modificări principale:
- Schimbarea licenței codului de la OpenLDAP Public License la Apache 2.0.
- Extinderea API-ului cursorilor cu operații de poziționare mai convenabile și evidente, analog condițiilor <, =, > atât pentru chei, cât și pentru perechile cheie-valoare. Au fost adăugate funcțiile mdbx_cursor_unbind() și mdbx_txn_release_all_cursors() pentru gestionarea flexibilă a cursorilor în scenarii de reutilizare, pentru reducerea cheltuielilor generale. Funcțiile mdbx_cursor_scan() și mdbx_cursor_scan_from() pentru scanarea tabelelor utilizând un predicat funcțional și reducerea cheltuielilor adiționale asociate.
- Reproiectarea cursorilor pentru unificarea comportamentului, un cod mai regulat, și reducerea numărului de ramificări și operații de mașină.
- Mutarea funcționalității utilitarului mdbx_chk în biblioteca în sine, sub formă de funcție mdbx_env_chk(), pentru a verifica integritatea structurii bazei de date, inclusiv prin implicarea logicii aplicației.
- Opțiunea MDBX_opt_gc_time_limit pentru un control mai flexibil al timpului consumat pentru căutarea secvențelor de pagini libere adiacente în GC.
- Reducerea semnificativă a cheltuielilor generale la inițierea tranzacțiilor în scenariile cu un număr mare de handle-uri DBI, prin inițierea amânată / leneșă a elementelor din tabelele de sistem. De asemenea, mecanismul de suport pentru seturi sparse de handle-uri DBI, gestionat de opțiunea de construcție MDBX_ENABLE_DBI_SPARSE, care este activată implicit.
- Reducerea cheltuielilor generale la deschiderea handle-urilor DBI. De asemenea, mecanismul de eliberare amânată și suportul pentru calea rapidă de deschidere fără utilizarea blocajelor, gestionat de opțiunea de construcție MDBX_ENABLE_DBI_LOCKFREE, care este activat implicit.
- Suport pentru „parcarea” tranzacțiilor de citire cu dezactivarea acestora în favoarea procesării instantelor MVCC vechi și prevenirea problemelor cauzate de suspendarea colectării deșeurilor. Mecanismul de parcare și de dezactivare a tranzacțiilor parcate este atât un complement, cât și o alternativă mai simplă de utilizare față de apelul Handle-Slow-Readers. Pentru comoditate, funcțiile mdbx_txn_park() și mdbx_txn_unpark() au argumente suplimentare, care permit solicitarea „deparcării” automate a tranzacțiilor parcate și reluarea tranzacțiilor dezactivate. Opțiunile corespunzătoare -d și -p au fost adăugate utilitarului mdbx_copy.
- Suport pentru restaurarea unui mediu deschis de lucru cu baza de date într-un proces fiu după ramificarea/împărțirea procesului prin mdbx_env_resurrect_after_fork().
- Suport pentru redenumirea tabelelor prin mdbx_dbi_rename() și mdbx_dbi_rename2(). A fost adăugată funcția mdbx_enumerate_tables() pentru obținerea informațiilor despre tabelele utilizatorilor cu nume.
- Modul de operare MDBX_NOSTICKYTHREADS în loc de MDBX_NOTLS pentru simplificarea integrării cu firele ușoare/multiplexarea acestora împreună cu tranzacțiile sistemului de operare.
- Pentru identificarea bazei de date, un UUID a fost adăugat și este disponibil în câmpul mi_dxbid al structurii MDBX_envinfo, obținută prin mdbx_env_info_ex(). S-a implementat obținerea informațiilor despre baza de date fără a o deschide prin mdbx_preopen_snapinfo().
- Suport pentru funcțiile de logging cu callback fără funcționalitatea vprintf(), ceea ce facilitează semnificativ utilizarea logging-ului în limbaje de programare diferite.
- Adăugarea în API a funcțiilor mdbx_txn_copy2pathname() și mdbx_txn_copy2fd().
- Restructurarea codului sursă cu refactoring.
- Folosirea termenului „tabel” în loc de „subDb”.
- Declararea ca fiind depreciate a opțiunilor MDBX_COALESCE și MDBX_NOTLS. Înlocuirea opțiunii de compilare MDBX_USE_VALGRIND cu opțiunea acceptată ENABLE_MEMCHECK.
Sursa: opennet.ro
