Biblioteka libmdbx 0.11.3 (MDBX) została wydana wraz z implementacją wysokowydajnej, kompaktowej, wbudowanej bazy danych klucz-wartość. Kod libmdbx jest objęty licencją publiczną OpenLDAP. Obsługiwane są wszystkie obecne systemy operacyjne i architektury, a także rosyjski Elbrus 2000. Pod koniec 2021 roku libmdbx jest używany jako backend pamięci masowej w dwóch najszybszych klientach Ethereum - Erigon i nowym „Shark”, który zgodnie z dostępnymi Information, jest klientem Ethereum o najwyższej wydajności.
Historycznie rzecz biorąc, libmdbx jest głęboką przeróbką systemu LMDB DBMS i przewyższa swojego przodka pod względem niezawodności, zestawu funkcji i wydajności. W porównaniu do LMDB, libmdbx kładzie duży nacisk na jakość kodu, stabilność API, testowanie i automatyczne kontrole. Dostarczone jest narzędzie do sprawdzania integralności struktury bazy danych z pewnymi możliwościami odzyskiwania.
Z technologicznego punktu widzenia libmdbx oferuje ACID, serializację silnych zmian i nieblokujący odczyt z liniowym skalowaniem pomiędzy rdzeniami procesora. Obsługiwane jest automatyczne kompaktowanie, automatyczne zarządzanie rozmiarem bazy danych i szacowanie zapytań o zakres. Od 2016 roku projekt jest finansowany przez firmę Positive Technologies, a od 2017 roku jest stosowany w jej produktach.
libmdbx oferuje interfejs API C++, a także obsługiwane przez entuzjastów powiązania językowe dla Rust, Haskell, Python, NodeJS, Ruby, Go i Nim.
Najważniejsze innowacje, ulepszenia i poprawki dodane od czasu poprzedniej wiadomości z 11 października:
- Interfejs API C++ jest uważany za gotowy do użycia.
- Aktualizacja danych GC przy dokonywaniu ogromnych transakcji została znacznie przyspieszona, co jest szczególnie ważne w przypadku korzystania z libmdbx w ekosystemie Ethereum.
- Zmieniono wewnętrzny podpis formatu bazy danych, aby obsługiwał automatyczną aktualizację, która jest całkowicie niezauważalna dla użytkowników. Pozwala to wyeliminować fałszywie pozytywne komunikaty o uszkodzeniu bazy danych, gdy do odczytu transakcji zarejestrowanych przez aktualne wersje używane są nieaktualne wersje biblioteki.
- Dodano funkcje mdbx_env_get_syncbytes(), mdbx_env_get_syncperiod() i mdbx_env_get_syncbytes(). Dodano obsługę operacji MDBX_SET_UPPERBOUND.
- Wszystkie ostrzeżenia podczas budowania ze wszystkimi obsługiwanymi kompilatorami w trybach C++ 11/14/17/20 zostały wyeliminowane. Zapewniona jest kompatybilność ze starszymi kompilatorami: clang od 3.9, gcc od 4.8, łącznie z montażem przy użyciu cdevtoolset-9 dla CentOS/RHEL 7.
- Naprawiono możliwość konfliktu metastron po ręcznym przełączeniu na określoną metastronę za pomocą narzędzia mdbx_chk.
- Naprawiono nieoczekiwany błąd MDBX_PROBLEM zwracany podczas nadpisywania starszych metastron.
- Naprawiono zwracanie MDBX_NOTFOUND w przypadku niedokładnego dopasowania podczas przetwarzania żądania MDBX_GET_BOTH.
- Naprawiono błąd kompilacji w systemie Linux w przypadku braku plików nagłówkowych z opisami interfejsów z jądrem.
- Naprawiono konflikt pomiędzy flagą wewnętrzną MDBX_SHRINK_ALLOWED a opcją MDBX_ACCEDE.
- Wyeliminowano kilka niepotrzebnych kontroli asercji.
- Naprawiono nieoczekiwany zwrot MDBX_RESULT_TRUE z funkcji mdbx_env_set_option().
- W sumie wprowadzono ponad 90 zmian w 25 plikach, dodano ~1300 linii, usunięto ~600.
Źródło: opennet.ru