Llançament del DBMS incrustat d'alt rendiment libmdbx 0.10

Després de tres mesos de desenvolupament, es va llançar libmdbx 0.10.0 (MDBX), que implementava una base de dades de valor-clau incrustada compacta i d'alt rendiment. El codi libmdbx té llicència sota la llicència pública OpenLDAP. libmdbx és una profunda reelaboració del SGBD LMDB i, segons els desenvolupadors, és superior al seu avantpassat en fiabilitat, gamma de capacitats i rendiment. S'afirma que libmdbx és fins a un 20% més ràpid que LMDB en escenaris CRUD i fins a un 30% més ràpid si els controls interns estan desactivats quan es construeix libmdbx a un nivell comparable a LMDB.

Libmdbx ofereix ACID, serialització de canvis forts i lectures sense bloqueig amb escala lineal als nuclis de la CPU. A libmdbx, es presta molta atenció a la qualitat del codi, al funcionament estable de l'API, a les proves i a les comprovacions automàtiques. S'admeten la compactació automàtica, la gestió automàtica de la mida de la base de dades, un format de base de dades únic per a conjunts de 32 i 64 bits i l'estimació de consultes d'interval. Es proporciona una utilitat per comprovar la integritat de l'estructura de la base de dades amb algunes capacitats de recuperació. Des del 2016, el projecte està finançat per Positive Technologies i s'utilitza en els seus productes des del 2017, i les sancions imposades pel govern dels EUA a Positive Technologies no tenen cap impacte notable.

Principals innovacions, millores i correccions afegits des de la darrera versió:

  • Hi ha disponible una enquadernació Ruby de Mahlon E. Smith i una versió de prova de les enquadernacions Python de Noel Kuntze, i s'han actualitzat les enquadernacions GoLang d'Alexey Sharov.
  • Per al mode "MDBX_WRITEMAP", quan les dades de la base de dades es canvien directament a la memòria RAM, s'implementa un "vessament transparent" de pàgines de base de dades modificades al disc. Ara, després de la finalització de cada operació, aquestes pàgines estan immediatament a punt per escriure al disc i el nucli del sistema operatiu pot esborrar les pàgines modificades al disc de manera independent, i la transacció no requerirà la seva modificació. Com a resultat, en escenaris ocupats amb memòria RAM insuficient, el volum d'operacions del disc es pot reduir fins a 2 vegades.
  • S'ha implementat el desallotjament de còpies d'ombra de pàgines modificades sense utilitzar durant molt de temps, amb preferència per al desallotjament de pàgines amb valors grans/llargs, que en la gran majoria dels escenaris es modifiquen només una vegada per transacció. El resultat és un trànsit de disc reduït i un rendiment millorat en escenaris amb transaccions molt grans.
  • S'ha implementat un mode "intel·ligent" per dividir pàgines en inserir claus. Ara, en inserir seqüències ordenades, les pàgines s'omplen completament automàticament i, en altres casos, l'arbre està més òptimment equilibrat. Com a resultat, de mitjana, les pàgines de la base de dades s'omplen de manera més òptima i l'arbre B està més equilibrat, la qual cosa té un efecte positiu en el rendiment.
  • S'han afegit estadístiques d'operacions amb pàgines, que permeten estimar amb precisió el cost de modificar operacions amb la base de dades.
  • S'han corregit més d'una dotzena d'errors i errors, inclosos: problemes amb la construcció amb MinGW, utilitzant `std::filesystem::path' a iOS <= 13.0, construcció orientada a versions anteriors de Windows, etc.
  • En total, s'han fet més de 200 canvis a 66 fitxers, s'han afegit ~6500 línies, 4500 s'han eliminat.

Per separat, m'agradaria destacar l'elecció del projecte Turbo-Geth (una forquilla turbo de Go-Ethereum) libmdbx com a nou backend d'emmagatzematge, i també agrair a l'equip del projecte (especialment Alexey Sharov, Artyom Vorotnikov i Alexey Akhunov) pel seu gran ajuda per provar en casos d'ús extrems. En particular, es va descobrir i eliminar un defecte en el control de lectura anticipada/emmagatzematge en memòria cau, que va provocar una degradació del rendiment en escenaris difícils de reproduir amb bases de dades grans.

Font: opennet.ru

Afegeix comentari