Wydanie wysokowydajnego wbudowanego systemu DBMS libmdbx 0.11.3

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

Dodaj komentarz