A biblioteca libmdbx 0.11.3 (MDBX) lanzouse coa implementación dunha base de datos de clave-valor incorporada compacta de alto rendemento. O código libmdbx está licenciado baixo a licenza pública OpenLDAP. Todos os sistemas operativos e arquitecturas actuais son compatibles, así como o ruso Elbrus 2000. A finais de 2021, libmdbx utilízase como backend de almacenamento nos dous clientes de Ethereum máis rápidos: Erigon e o novo "Shark", que, segundo os datos dispoñibles. información, é o cliente de Ethereum de maior rendemento.
Historicamente, libmdbx é un profundo redeseño do DBMS LMDB e supera o seu proxenitor en termos de fiabilidade, conxunto de funcións e rendemento. En comparación con LMDB, libmdbx pon moito énfase na calidade do código, a estabilidade da API, as probas e as comprobacións automatizadas. Ofrécese unha utilidade para comprobar a integridade da estrutura da base de datos con algunhas opcións de recuperación.
En canto á tecnoloxía, libmdbx ofrece ACID, serialización de cambios fortes e lecturas sen bloqueo con escalado lineal nos núcleos da CPU. Admítense a compactación automática, a xestión automática do tamaño da base de datos e a estimación de consulta de intervalos. Desde 2016, o proxecto está financiado por Positive Technologies e utilízase nos seus produtos desde 2017.
libmdbx ofrece unha API de C++, así como ligazóns de linguaxe compatibles con entusiastas para Rust, Haskell, Python, NodeJS, Ruby, Go e Nim.
Principais novidades, melloras e correccións engadidas desde a noticia anterior do 11 de outubro:
- A API de C++ considérase lista para o seu uso.
- A actualización dos datos de GC ao realizar grandes transaccións acelerouse significativamente, o que é especialmente importante cando se usa libmdbx no ecosistema de Ethereum.
- A sinatura interna do formato da base de datos foi modificada para admitir a actualización automática, que é totalmente transparente para os usuarios. Isto permítelle eliminar as mensaxes falsas positivas sobre a corrupción da base de datos cando se usan versións desactualizadas da biblioteca para ler transaccións rexistradas polas versións actuais.
- Engadíronse as funcións mdbx_env_get_syncbytes(), mdbx_env_get_syncperiod() e mdbx_env_get_syncbytes(). Engadiuse compatibilidade para a operación MDBX_SET_UPPERBOUND.
- Elimináronse todas as advertencias ao construír con todos os compiladores compatibles en modos C++ 11/14/17/20. A compatibilidade cos compiladores legados está garantida: clang a partir da 3.9, gcc a partir da 4.8, incluíndo a montaxe mediante cdevtoolset-9 para CentOS/RHEL 7.
- Corrixiuse a posibilidade de que se producise un conflito de metapáxina despois de cambiar manualmente a unha metapáxina específica mediante a utilidade mdbx_chk.
- Corrixiuse un erro MDBX_PROBLEM inesperado que se devolvía ao sobrescribir as metapáxinas antigas.
- Corrixiuse o devolver MDBX_NOTFOUND en caso de coincidencia inexacta ao procesar unha solicitude MDBX_GET_BOTH.
- Corrixiuse un erro de compilación en Linux na ausencia de ficheiros de cabeceira con descricións de interfaces co núcleo.
- Corrixiuse un conflito entre a bandeira interna MDBX_SHRINK_ALLOWED e a opción MDBX_ACCEDE.
- Elimináronse varias comprobacións de afirmacións innecesarias.
- Corrixiuse o retorno inesperado de MDBX_RESULT_TRUE da función mdbx_env_set_option().
- En total, realizáronse máis de 90 cambios en 25 ficheiros, engadíronse ~1300 liñas e elimináronse ~600.
Fonte: opennet.ru