Wydano bibliotekę libmdbx 0.11.3 (MDBX) z implementacją wysokowydajnej, kompaktowej bazy danych typu klucz-wartość. Kod libmdbx jest rozpowszechniany na licencji OpenLDAP Public License. Wspierane są wszystkie aktualne systemy operacyjne i architektury, w tym także rosyjski Elbrus 2000. Na koniec 2021 roku libmdbx jest wykorzystywane jako backend przechowywania w dwóch najszybszych klientach Ethereum — Erigon oraz nowej „Akuli”, która według dostępnych informacji jest najwydajniejszym klientem Ethereum.
Historia libmdbx jest głębokim przetworzeniem bazy danych LMDB i przewyższa swojego poprzednika pod względem niezawodności, zestawu możliwości i wydajności. W porównaniu z LMDB, libmdbx kładzie duży nacisk na jakość kodu, stabilną pracę API, testowanie i automatyczne kontrole. Dostarczana jest narzędzie do sprawdzania integralności struktury bazy danych z pewnymi możliwościami przywracania.
Technologicznie libmdbx oferuje ACID, ścisłą serializację zmian oraz ni Blockingowe odczyty z liniowym skalowaniem w zależności od rdzeni CPU. Wspierana jest automatyczna kompaktyfikacja, automatyczne zarządzanie rozmiarami bazy danych oraz szacowanie objętości zapytań w zakresie (range query estimation). Od 2016 roku projekt jest finansowany przez firmę Positive Technologies i od 2017 roku jest używany w jej produktach.
Dla libmdbx oferowane jest API w C++, a także wspierane przez entuzjastów powiązania z językami Rust, Haskell, Python, NodeJS, Ruby, Go, Nim.
Główne nowości, ulepszenia i poprawki dodane po wcześniejszej wiadomości z 11 października:
- API w C++ uznawane jest za gotowe do użycia.
- Zaktualizowano dane GC przy rejestracji dużych transakcji, co jest szczególnie istotne przy używaniu libmdbx w ekosystemie Ethereum.
- Zmieniono wewnętrzną sygnaturę formatu bazy danych z wsparciem dla automatycznej aktualizacji, która jest całkowicie przezroczysta dla użytkowników. Dzięki temu można wyeliminować fałszywe pozytywne komunikaty o uszkodzeniu bazy danych, gdy starsze wersje bibliotek są używane do odczytu transakcji zarejestrowanych przez aktualne wersje.
- Dodano funkcje mdbx_env_get_syncbytes(), mdbx_env_get_syncperiod() oraz mdbx_env_get_syncbytes(). Dodano wsparcie dla operacji MDBX_SET_UPPERBOUND.
- Usunięto wszystkie ostrzeżenia podczas kompilacji we wszystkich wspieranych kompilatorach w trybach C++ 11/14/17/20. Zapewnia pełną zgodność z przestarzałymi kompilatorami: clang od wersji 3.9, gcc od wersji 4.8, w tym kompilacja za pomocą sdevtoolset-9 dla CentOS/RHEL 7.
- Usunięto możliwość konfliktu stron meta po ręcznym przełączeniu na określoną stronę meta za pomocą narzędzia mdbx_chk.
- Poprawiono zwracanie nieoczekiwanej błędnej wiadomości MDBX_PROBLEM przy nadpisywaniu przestarzałych stron meta.
- Poprawiono zwrot MDBX_NOTFOUND w przypadku nieprecyzyjnego dopasowania podczas przetwarzania zapytania MDBX_GET_BOTH.
- Usunięto błąd kompilacji na Linuxie przy braku plików nagłówkowych z opisami interfejsów z jądrem.
- Poprawiono kolizję między wewnętrzną flagą MDBX_SHRINK_ALLOWED a opcją MDBX_ACCEDE.
- Usunięto kilka zbędnych sprawdzeń assert.
- Naprawiono niespodziewany zwrot MDBX_RESULT_TRUE z funkcji mdbx_env_set_option().
- Łącznie wprowadzono ponad 90 zmian w 25 plikach, dodano około 1300 linii, usunięto około 600.
Źródło: opennet.ru
