Wydanie wbudowanej bazy danych libmdbx 0.13.3

Opublikowana wersja biblioteki libmdbx 0.13.3 (MDBX) z realizacją wydajnej, kompaktowej bazy danych typu klucz-wartość. Kod libmdbx jest udostępniany na licencji Apache 2.0. Wspierane są wszystkie aktualne systemy operacyjne i architektury, w tym rosyjski Elbrus 2000. Dla libmdbx oferowane jest rozbudowane API dla C++, a także wspierane przez entuzjastów wiązania do języków Rust, Haskell, Python, NodeJS, Ruby, Go, Nim, Deno, Scala.

Historia libmdbx to głęboka przeróbka bazy danych LMDB, która przewyższa swojego poprzednika pod względem niezawodności, zestawu funkcjonalności i wydajności. W porównaniu do LMDB, libmdbx kładzie duży nacisk na jakość kodu, stabilność pracy API, testowanie i automatyczne kontrole. Dostarczane jest narzędzie do sprawdzania integralności struktury bazy danych z pewnymi możliwościami odzyskiwania. Technologicznie libmdbx oferuje ACID, ścisłą serializację zmian i nieblokujące odczyty z liniowym skalowaniem obciążenia na rdzeniach CPU. Wspierana jest automatyczna kompaktyfikacja, automatyczne zarządzanie rozmiarem bazy danych oraz szacowanie objętości zapytań w zakresie (range query estimation).

Główne zmiany:

  • Gałąź 0.13.x uzyskała status stabilny. Rozpoczęto rozwój gałęzi 0.14.x.
  • W API C dodano funkcję mdbx_cursor_count_ex(), która umożliwia uzyskanie zarówno liczby wielowartościowych odpowiadających bieżącemu kluczowi, jak i informacji o zagnieżdżonym drzewie przechowującym te wartości.
  • W API C++ dodano metodę mdbx::txn::make_broken(), analogiczną do mdbx_txn_break().
  • W narzędziach mdbx_copy, mdbx_drop, mdbx_dump, mdbx_load, mdbx_stat wprowadzono rejestrowanie błędów, ostrzeżeń i ważnych komunikatów od libmdbx.
  • Zmiana zachowania:
    • Po włączeniu profilowania zbieracza śmieci (kompilacja z opcją MDBX_ENABLE_PROFGC=ON) teraz zliczane są koszty czasu CPU na scalanie list stron, tj. na działanie funkcji pnl_merge().
    • W narzędziu testującym wartość trybu danych została zmieniona z data.dups na data.multi.
    • Udoskonalono kontrolę długości klucza wewnątrz cursor_seek().
    • Jeśli za pośrednictwem mdbx_env_set_option(MDBX_opt_txn_dp_limit) użytkownik nie określił wartości, to limit stron brudnych jest dostosowywany przy uruchomieniu każdej niezagnieżdżonej transakcji zapisu, w oparciu o dostępną pamięć RAM i rozmiar bazy danych.
    • W trybie MDBX_NOSTICKYTHREADS dozwolone jest commit/abort zagnieżdżonych transakcji z dowolnego wątku.
    • Podczas próby uruchomienia zagnieżdżonych transakcji w trybie MDBX_WRITEMAP rejestrowane są zdarzenia i zwracany jest błąd MDBX_INCOMPATIBLE.
    • W API C++ w konstruktorach/inicjalizatorach oraz metodach związanych z tworzeniem geometrii Bazy Danych domyślnie używane są tylko wartości domyślne.
    • Wewnątrz mdbx_env_set_geometry() zaktualizowano heurystyki do dobierania parametrów geometrii bazy danych, które zostały określone przez użytkownika jako «domyślne».
  • Poprawki:
    • Usunięto regresję blokady mutexa podczas próby ponownego zamknięcia deskryptora dbi, w tym podczas próby jawnego zamknięcia deskryptora po usunięciu związanej z nim tabeli.
    • Usunięto regresję stanu zagnieżdżonego/dupsort wskaźnika po wstawieniu danych w trybie MDBX_APPEND.
    • Wsparcie dla uzyskiwania boot_id podczas pracy wewnątrz kontenera LXC.
    • Usunięto błąd niewłaściwej obsługi próby uruchomienia zagnieżdżonej czytającej transakcji. Teraz w takich sytuacjach zwracany jest błąd MDBX_EINVAL, ponieważ zagnieżdżenie jest obsługiwane tylko dla transakcji odczytu-zapisu.
    • Usunięto regresję SIGSEGV przy dostępie do zerowego adresu podczas pracy w trybie tylko do odczytu bez użycia pliku LCK, na przykład przy umieszczaniu Bazy Danych na nośniku dostępnym tylko do odczytu.

Źródło: opennet.ru

Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS 🔥 Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS | ProHoster