A fost publicată versiunea bibliotecii libmdbx 0.13.2 (MDBX) cu implementarea unei baze de date încorporate de tip cheie-valoare, de înaltă performanță și compactă. Codul libmdbx este distribuit sub licența Apache 2.0. Sunt suportate toate sistemele de operare și arhitecturile actuale, inclusiv Elbrus 2000 din Rusia. Pentru libmdbx, este propus un API dezvoltat pentru C++, precum și legături suportate de entuziaști pentru limbajele Rust, Haskell, Python, NodeJS, Ruby, Go, Nim, Deno, 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:
- A fost accelerată actualizarea GC în timpul returnării/împlasării listelor de pagini în scenarii complexe. A fost îmbunătățit și activat un mod experimental de corectare a feedback-ului, care a îmbunătățit semnificativ convergența (a redus numărul de tentative repetate) și a eliminat un defect care ducea la „cicluri” în timpul confirmării tranzacțiilor (cu retourarea erorii MDBX_PROBLEM) în condiții specifice rare.
- În scripturile de construire CMake a fost inclus standardul C23.
- Au fost adăugate macro T pentru funcții pereche char/wchar_t.
- În API-ul C++ a fost adăugat suport pentru tranzacții de scriere încorporate.
- S-a realizat trecerea la a doua ediție a specificației de versionare semantică („Semantic Versioning 2”) și s-a asigurat exportul informațiilor despre versiune în VERSION.json.
- Pentru reproducibilitatea construcțiilor, a fost adăugat suport pentru variabila de mediu SOURCE_DATE_EPOCH. Suportul pentru MDBX_BUILD_TIMESTAMP este păstrat și această variabilă are prioritate.
- A fost adăugată posibilitatea de a specifica informații suplimentare despre construcția libmdbx prin opțiunea MDBX_BUILD_METADATA. Informațiile specificate sunt acum incluse în cadrul bibliotecii ca valoare mdbx_build.metadata și ulterior vor fi folosite și la formarea pachetelor etc.
- A fost adăugat logare pentru erorile returnate din API. Acum, este suficient să se seteze nivelul de logare MDBX_LOG_DEBUG (pentru logarea erorilor, cu excepția MDBX_NOTFOUND) sau MDBX_LOG_TRACE (pentru logarea tuturor erorilor, inclusiv MDBX_RESULT_TRUE).
- Schimbarea comportamentului:
- A fost adăugată metoda mdbx::cursor::get_multiple_samelength() și a fost redenumită mdbx::txn::put_multiple_samelength().
- Pentru uniformitatea API-ului C++, în timpul operației MDBX_GET_MULTIPLE, acum se returnează și valoarea cheii în sine.
- Pentru constantele dimensionale mdbx::env::geometry, tipul de bază a fost schimbat din size_t fără semn în intptr_t semnat.
- Alegerea utilizării ntdll în loc de CRT se face acum doar atunci când API-ul C++ este dezactivat explicit.
- Memoria pentru tranzacțiile de citire anulate/interupte, care sunt transmise în mdbx_txn_commit(), este acum eliberată. Acordul API-ului cere ca aceste tranzacții să fie eliberate prin mdbx_txn_abort(), astfel încât funcția mdbx_txn_commit() să returneze o eroare în aceste cazuri, fără a distruge tranzacțiile în sine. Acest lucru a dus la scurgeri de memorie din cauza erorilor în aplicații, ceea ce a determinat schimbarea comportamentului.
- Utilizarea macro-ului __deprecated_enum, dacă este definit.
- Când se compilează prin CMake, alegerea standardului de limbaj C este acum conformă cu CMAKE_C_STANDARD.
Sursa: opennet.ro
