La publication de la bibliothĂšque libmdbx 0.13.1 (MDBX) avec la mise en Ćuvre d'une base de donnĂ©es intĂ©grĂ©e, compacte et performante de type clĂ©-valeur. Le code libmdbx est distribuĂ© sous la licence Apache 2.0. Toutes les systĂšmes d'exploitation et architectures actuels sont pris en charge, y compris le Elbrus 2000 russe. Pour libmdbx, une API avancĂ©e pour C++ est proposĂ©e, ainsi que des liaisons soutenues par des enthousiastes pour les langages Rust, Haskell, Python, NodeJS, Ruby, Go, Nim, Deno, Scala.
Historiquement, libmdbx est une réécriture approfondie du SGBD LMDB et surpasse son prĂ©dĂ©cesseur en termes de fiabilitĂ©, de fonctionnalitĂ©s et de performances. Par rapport Ă LMDB, libmdbx accorde une grande importance Ă la qualitĂ© du code, Ă la stabilitĂ© de l'API, aux tests et aux vĂ©rifications automatiques. Un utilitaire de vĂ©rification de l'intĂ©gritĂ© de la structure de la base de donnĂ©es est fourni avec certaines capacitĂ©s de rĂ©cupĂ©ration. Sur le plan technologique, libmdbx propose ACID, une sĂ©rialisation stricte des modifications et une lecture non-bloquante avec une scalabilitĂ© linĂ©aire sur les cĆurs CPU. La compactage automatique est pris en charge, ainsi que la gestion automatique de la taille de la base de donnĂ©es, et l'estimation du volume des Ă©chantillons par plages (estimation des requĂȘtes de plage).
Principales modifications :
- Changement de la licence du code de OpenLDAP Public License Ă Apache 2.0.
- Extension de l'API des curseurs avec des opérations de positionnement plus pratiques et évidentes similaires aux conditions <, =, >, tant pour les clés que pour les paires clé-valeur. Ajout des fonctions mdbx_cursor_unbind() et mdbx_txn_release_all_cursors() pour une gestion flexible des curseurs dans des scénarios de réutilisation afin de réduire les frais généraux. Fonctions mdbx_cursor_scan() et mdbx_cursor_scan_from() pour parcourir les tables en utilisant un prédicat fonctionnel et réduire les frais généraux associés.
- Rework des curseurs pour unifier le comportement, rendre le code plus régulier et diminuer le nombre de branches et d'opérations machine.
- Transfert de la fonctionnalité de l'outil mdbx_chk dans la bibliothÚque sous forme de fonction mdbx_env_chk() pour vérifier l'intégrité de la structure de la base de données, y compris l'implication de la logique de l'application.
- Option MDBX_opt_gc_time_limit pour un contrÎle plus flexible du temps consacré à la recherche de séquences de pages libres adjacentes dans le GC.
- Diminution significative des frais généraux lors du lancement de transactions dans des scénarios avec de nombreux handles DBI, grùce à l'initialisation différée/paresseuse des éléments des tables de service. Inclus, le mécanisme de soutien des ensembles épars de handles DBI, géré par l'option de compilation MDBX_ENABLE_DBI_SPARSE, qui est activée par défaut.
- Réduction des frais généraux à l'ouverture des handles DBI. Inclut, le mécanisme de libération différée et de support pour un chemin d'ouverture rapide sans verrouillage, géré par l'option de compilation MDBX_ENABLE_DBI_LOCKFREE, qui est activée par défaut.
- Support for "parking" read transactions by evicting them for the purpose of processing old MVCC snapshots and preventing issues caused by garbage collection suspension. The parking and eviction mechanism for parked transactions serves as both an addition and a simpler alternative to the Handle-Slow-Readers callback. For convenience, the functions mdbx_txn_park() and mdbx_txn_unpark() have additional arguments that allow requesting automatic un-parking of parked transactions and restarting evicted transactions. The mdbx_copy utility has been updated with the corresponding options -d and -p.
- Support for restoring the open working environment with the database in a child process after forking/splitting the process using mdbx_env_resurrect_after_fork().
- Support for renaming tables using mdbx_dbi_rename() and mdbx_dbi_rename2(). Added the function mdbx_enumerate_tables() to retrieve information about named user tables.
- MDBX_NOSTICKYTHREADS operating mode instead of MDBX_NOTLS to simplify integration with lightweight threads/multiplexing them with operating system thread transactions.
- A UUID for database identification has been added to the mi_dxbid field of the MDBX_envinfo structure, obtained via mdbx_env_info_ex(). Information about the database can now be retrieved without opening it by using mdbx_preopen_snapinfo().
- Support for callback logging functions without vprintf() functionality, significantly simplifying logging usage in bindings to other programming languages.
- Addition of the mdbx_txn_copy2pathname() and mdbx_txn_copy2fd() functions to the API.
- Restructuring of the source code with refactoring.
- Use of the term "table" instead of "subDb."
- Options MDBX_COALESCE and MDBX_NOTLS declared obsolete. Replacement of the assembly option MDBX_USE_VALGRIND with the commonly accepted ENABLE_MEMCHECK.
Source : opennet.ru
