Wydanie wbudowanej bazy danych libmdbx 0.13.2

Opublikowano wydanie biblioteki libmdbx 0.13.2 (MDBX) z realizacją wysoko wydajnej kompaktowej wbudowanej bazy danych klasy klucz-wartość. Kod libmdbx jest rozpowszechniany na licencji Apache 2.0. Obsługiwane są wszystkie aktualne systemy operacyjne i architektury, w tym rosyjski Elbrus 2000. Dla libmdbx oferowane jest rozwinięte API dla C++, a także wspierane przez entuzjastów powiązania z językami 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:

  • Przyspieszono aktualizację GC przy zwrocie/wkładaniu list stron w skomplikowanych scenariuszach. Poprawiono i aktywowano wcześniej wyłączony eksperymentalny tryb korekty zwrotnej. To zasadniczo poprawiło zbieżność (zmniejszyło liczbę prób ponownych) oraz wyeliminowało defekt prowadzący do 'zapętlenia' podczas zatwierdzania transakcji (z powrotem błędu MDBX_PROBLEM) w rzadkich specyficznych warunkach.
  • W skryptach budowania CMake włączono standard C23.
  • Dodano makra T dla par funkcji char/wchar_t.
  • W API C++ dodano wsparcie dla zagnieżdżonych transakcji zapisujących.
  • Zrealizowano przejście na drugą edycję specyfikacji semantycznego wersjonowania (‘Semantic Versioning 2’) i zapewniono eksport informacji o wersji do VERSION.json.
  • Aby zapewnić reprodukowalność budów, dodano wsparcie dla zmiennej środowiskowej SOURCE_DATE_EPOCH. Wsparcie dla MDBX_BUILD_TIMESTAMP zostało zachowane, a ta zmienna ma priorytet.
  • Dodano możliwość podawania dodatkowych informacji o budowie libmdbx za pomocą opcji MDBX_BUILD_METADATA. Aktualnie podawane informacje są po prostu dołączane do biblioteki jako wartość mdbx_build.metadata, a w przyszłości będą również używane przy formowaniu pakietów itp.
  • Dodano logowanie błędów zwracanych z API. Teraz wystarczy ustawić poziom logowania MDBX_LOG_DEBUG (do logowania błędów z wyjątkiem MDBX_NOTFOUND) lub MDBX_LOG_TRACE (do logowania wszystkich błędów oraz MDBX_RESULT_TRUE).
  • Zmiana zachowania:
    • Dodano metodę mdbx::cursor::get_multiple_samelength() i zmieniono nazwę mdbx::txn::put_multiple_samelength().
    • Dla jednorodności API C++ przy wykonywaniu operacji MDBX_GET_MULTIPLE teraz również zwracana jest wartość samego klucza.
    • Dla stałych wymiarowych mdbx::env::geometry typ podstawowy zmieniono z bezznakowego size_t na znakowy intptr_t.
    • Wybór pomiędzy używaniem ntdll a CRT teraz jest dokonywany tylko po wyraźnym wyłączeniu API C++.
    • Zapewnione jest zwalnianie pamięci zablokowanych/przerwanych transakcji odczytu przekazywanych do mdbx_txn_commit(). Umowa API wymaga, aby takie transakcje były zwalniane za pomocą mdbx_txn_abort(), przez co funkcja mdbx_txn_commit() zwracała błąd w takich przypadkach, nie niszcząc samych transakcji. Prowadziło to do wycieków pamięci z powodu błędów w aplikacjach, co skłoniło do zmiany zachowania.
    • Użycie makra __deprecated_enum, jeśli jest zdefiniowane.
    • Podczas budowy za pomocą CMake wybór standardu języka C jest teraz realizowany z uwzględnieniem CMAKE_C_STANDARD.

Ź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