Llançament del DBMS incrustat d'alt rendiment libmdbx 0.10.4 i libfpta 0.3.9

Les biblioteques libmdbx 0.10.4 (MDBX) es van llançar amb la implementació d'una base de dades de valor-clau incrustada compacta d'alt rendiment i la biblioteca associada libfpta 0.3.9 (FPTA), que implementa una representació tabular de dades amb índexs secundaris i compostos. a sobre de MDBX. Ambdues biblioteques es distribueixen sota llicències aprovades per OSI. Tots els sistemes operatius i arquitectures actuals són compatibles, així com el Russian Elbrus 2000.

Històricament, libmdbx és una profunda reelaboració del SGBD LMDB i és superior al seu avantpassat en fiabilitat, conjunt de funcions i rendiment. En comparació amb LMDB, libmdbx posa molt èmfasi en la qualitat del codi, l'estabilitat de l'API, les proves i les comprovacions automatitzades. Es proporciona una utilitat per comprovar la integritat de l'estructura de la base de dades amb algunes capacitats de recuperació.

Pel que fa a la tecnologia, libmdbx ofereix ACID, serialització de canvis forts i lectures sense bloqueig amb escala lineal als nuclis de la CPU. S'admeten la compactació automàtica, la gestió automàtica de la mida de la base de dades i l'estimació de consultes d'interval. Des del 2016, els projectes estan finançats per Positive Technologies i des del 2017 s'utilitzen en els seus productes.

libmdbx ofereix una API C++, així com enllaços de llenguatge compatibles amb entusiastes per a Rust, Haskell, Python, NodeJS, Ruby, Go i Nim. Per a libfpta, només la descripció de l'API està disponible públicament en forma de fitxer de capçalera C/C++.

Principals innovacions, millores i correccions afegides des de la notícia anterior del 9 de maig:

  • Permet compilacions reproduïbles.
  • S'ha corregit un error a causa del qual, en circumstàncies molt rares, es podia produir un bucle/congelació durant una transacció compromesa. El problema va ser identificat pels especialistes de Positive Tecnologies durant les proves internes dels seus propis productes.
  • Les proves s'han millorat i s'han ampliat els escenaris de proves per comprovar tots els estats no isomòrfics accessibles de l'arbre de la pàgina i el contingut del GC dins de la base de dades.
  • A l'API de C++, s'ha corregit un "noexcept" addicional, s'han afegit sobrecàrregues addicionals per al mètode "cursor::erase()", la implementació dels buffers s'ha estalviat l'ús de "std::string" per garantir l'alineació. (rellevant per a CLANG libstdc++).
  • S'ha eliminat una regressió en l'algorisme de vessament de pàgines brutes (expulsió selectiva de pàgines de base de dades modificades) que es va manifestar per un error inesperat MDBX_PROBLEM en canviar dades en transaccions enormes.
  • Es va realitzar una prova de fase amb l'addició d'una sèrie de controls per garantir l'estabilitat en cas de dany intencionat a la base de dades.
  • S'han solucionat els problemes d'advertiments menors UndefinedBehaviorSanitizer i Coverity Scan.
  • S'ha solucionat la comprovació de la marca interna obsoleta i ja no utilitzada "P_DIRTY" a les pàgines imbricades dins d'imatges de base de dades creades per versions anteriors de la biblioteca.
  • En els scripts CMake, s'ha millorat la cerca de components del compilador necessaris per a LTO (optimització del temps d'enllaç).
  • S'ha augmentat el nombre màxim de lectors simultanis a 32767.
  • Rendiment millorat quan s'utilitza Valgrind i AddressSanitizer.
  • A Windows, s'ha eliminat l'ús recursiu del bloqueig SRW quan es treballa en mode MDBX_NOTLS (sense utilitzar l'emmagatzematge local de fils), s'ha corregit la generació de bootid si l'hora del sistema ha canviat, s'ha millorat la detecció WSL1 i WSL2 i la capacitat de S'ha afegit obrir una base de dades al Pla 9 muntada mitjançant DrvFS.
  • En total, s'han fet més de 160 canvis a 57 fitxers, s'han afegit ~5000 línies, 2500 s'han eliminat.

M'agradaria agrair especialment a l'equip del projecte Erigon (ecosistema Ethereum) la seva assistència en proves en escenaris d'ús extrem. És significatiu que en cinc mesos des del llançament de libmdbx v0.10.0, amb un volum de base de dades d'1-2 TB a cada instal·lació d'Erigon (utilitzada en el 7% dels nodes d'Ethereum), només es van rebre tres informes de corrupció de bases de dades, tots que es va produir per causes externes, i no per errors de programari: en dos casos la causa van ser errors de RAM, en el tercer un error en el restabliment de dades en una configuració específica del subsistema d'emmagatzematge mitjançant BTRFS.

Font: opennet.ru

Afegeix comentari