Veröffentlichung der Embedded-Datenbank libmdbx 0.13

Die Version 0.13.1 der libmdbx-Bibliothek (MDBX) wurde veröffentlicht, die eine hochperformante, kompakte Key-Value-Datenbank implementiert. Der Code von libmdbx wird unter der Apache 2.0 Lizenz verbreitet. Alle gängigen Betriebssysteme und Architekturen werden unterstützt, einschließlich des russischen Elbrus 2000. Für libmdbx steht ein umfangreiche API für C++ zur Verfügung, sowie von Enthusiasten unterstützte Bindings für die Sprachen Rust, Haskell, Python, NodeJS, Ruby, Go, Nim, Deno und Scala.

Historisch gesehen ist libmdbx eine umfassende Überarbeitung der Datenbank LMDB und übertrifft ihren Vorgänger hinsichtlich Zuverlässigkeit, Funktionsumfang und Leistung. Im Vergleich zu LMDB legt libmdbx großen Wert auf die Codequalität, stabile API-Funktionalität, Testing und automatisierte Überprüfungen. Mitgeliefert wird ein Dienstprogramm zur Überprüfung der Datenbankintegrität mit einigen Wiederherstellungsfunktionen. Technologisch bietet libmdbx ACID, strenge Serialisierung von Änderungen und nicht-blockierendes Lesen mit linearer Skalierung über die CPU-Kerne. Unterstützung für automatische Kompaktierung, automatisches Management der Datenbankgröße sowie Schätzung des Volumens bei Bereichsanfragen (range query estimation) werden ebenfalls bereitgestellt.

Wesentliche Änderungen:

  • Änderung der Lizenz des Codes von OpenLDAP Public License auf Apache 2.0.
  • Erweiterung der Cursor-API mit benutzerfreundlichen und offensichtlicheren Positionierungsoperationen, die den Bedingungen <, =, > sowohl für Schlüssel als auch für Schlüssel-Wert-Paare entsprechen. Die Funktionen mdbx_cursor_unbind() und mdbx_txn_release_all_cursors() wurden hinzugefügt, um eine flexible Verwaltung von Cursors in Wiederverwendungsszenarien zur Reduzierung des Overheads zu ermöglichen. Die Funktionen mdbx_cursor_scan() und mdbx_cursor_scan_from() wurden implementiert, um Tabellen mit einem funktionalen Prädikat zu scannen und den begleitenden Overhead zu minimieren.
  • Überarbeitung der Cursors zur Vereinheitlichung des Verhaltens, zur Schaffung eines konsistenteren Codes und zur Verringerung der Anzahl an Verzweigungen und Maschinenoperationen.
  • Die Übertragung der Funktionalität des mdbx_chk Tools in die Bibliothek in Form der Funktion mdbx_env_chk() zur Überprüfung der Integrität der Datenbankstruktur, einschließlich der Einbeziehung der Anwendungslogik.
  • Die Option MDBX_opt_gc_time_limit für eine flexiblere Kontrolle der Zeit, die für die Suche nach Sequenzen benachbarter freier Seiten im GC benötigt wird.
  • Deutliche Reduzierung der Betriebskosten beim Start von Transaktionen in Szenarien mit einer großen Anzahl von DBI-Handles durch verzögerte, bzw. lazy Initialisierung der Elemente der Hilfstabellen. Auch der Mechanismus zur Unterstützung spärlicher DBI-Handles, gesteuert durch die Build-Option MDBX_ENABLE_DBI_SPARSE, die standardmäßig aktiviert ist.
  • Reduzierung der Betriebskosten für das Öffnen von DBI-Handles. Einschließlich des Mechanismus zur verzögerten Freigabe und Unterstützung eines schnellen Öffnungswegs ohne die Verwendung von Sperren, gesteuert durch die Build-Option MDBX_ENABLE_DBI_LOCKFREE, die standardmäßig aktiviert ist.
  • Unterstützung der "Parkfunktionen" für lesende Transaktionen mit deren Verdrängung, um alte MVCC-Schnappschüsse zu verarbeiten und Probleme zu vermeiden, die durch die Unterbrechung des Garbage Collecting verursacht werden. Der Mechanismus für das Parken und Verdrängen von parkenden Transaktionen ist sowohl eine Ergänzung als auch eine einfachere Alternative zum Handle-Slow-Readers-Callback. Zur Erleichterung haben die Funktionen mdbx_txn_park() und mdbx_txn_unpark() zusätzliche Argumente, um die automatische "Entparkung" von parkenden und den Neustart verdrängter Transaktionen anzufordern. Entsprechende Optionen -d und -p wurden dem mdbx_copy-Utility hinzugefügt.
  • Unterstützung der Wiederherstellung einer offenen Datenbankumgebung in einem Kindprozess nach Forking/Splitting des Prozesses über mdbx_env_resurrect_after_fork().
  • Unterstützung der Umbenennung von Tabellen über mdbx_dbi_rename() und mdbx_dbi_rename2(). Eine Funktion mdbx_enumerate_tables() wurde hinzugefügt, um Informationen über benannte Benutzertabellen zu erhalten.
  • Betriebsmodus MDBX_NOSTICKYTHREADS anstelle von MDBX_NOTLS zur Vereinfachung der Integration mit leichten Threads und deren Multiplexierung zusammen mit Transaktionen im Betriebssystem.
  • Zur Identifizierung der Datenbank wurde eine UUID hinzugefügt, die im Feld mi_dxbid der Struktur MDBX_envinfo verfügbar ist, die durch mdbx_env_info_ex() abgerufen wird. Es wurde implementiert, Informationen über die Datenbank zu erhalten, ohne sie zu öffnen, durch mdbx_preopen_snapinfo().
  • Unterstützung von Callback-Logging-Funktionen ohne die Funktionalität von vprintf(), was die Verwendung des Loggings in Bindungen zu anderen Programmiersprachen erheblich erleichtert.
  • Hinzufügung der Funktionen mdbx_txn_copy2pathname() und mdbx_txn_copy2fd() zur API.
  • Restrukturierung des Quellcodes mit Refactoring.
  • Verwendung des Begriffs „Tabelle“ anstelle von „subDb“.
  • Die Optionen MDBX_COALESCE und MDBX_NOTLS wurden als veraltet erklärt. Die Build-Option MDBX_USE_VALGRIND wurde durch die allgemein akzeptierte ENABLE_MEMCHECK ersetzt.

Quelle: opennet.ru

Zuverlässiges Webhosting mit DDoS-Schutz, VPS- und VDS-Server kaufen 🔥 Zuverlässiges Webhosting mit DDoS-Schutz, VPS- und VDS-Server kaufen | ProHoster