Wydanie wbudowanej SGBD libmdbx 0.13

Opublikowano wydanie biblioteki libmdbx 0.13.1 (MDBX) z realizacją wydajnej, kompaktowej wbudowanej bazy danych klasy klucz-wartość. Kod libmdbx jest rozpowszechniany na licencji Apache 2.0. Wspierane są wszystkie aktualne systemy operacyjne i architektury, a także rosyjski Elbrus 2000. Dla libmdbx oferowane jest rozwinięte API dla C++, a także wsparcie dla języków Rust, Haskell, Python, NodeJS, Ruby, Go, Nim, Deno, Scala przez entuzjastów.

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:

  • Zmiana licencji na kod z OpenLDAP Public License na Apache 2.0.
  • Rozszerzenie API kursora o bardziej wygodne i oczywiste operacje pozycjonowania, analogicznie do warunków <, =, >, zarówno dla kluczy, jak i par klucz-wartość. Dodane funkcje mdbx_cursor_unbind() oraz mdbx_txn_release_all_cursors() do elastycznego zarządzania kursorami w scenariuszach ponownego użycia, aby zredukować koszty. Funkcje mdbx_cursor_scan() oraz mdbx_cursor_scan_from() do skanowania tabel z użyciem predykatu funkcjonalnego oraz zmniejszania związanych z tym kosztów.
  • Przebudowa kursorów w celu ujednolicenia zachowania, bardziej regularnego kodu oraz redukcji liczby gałęzi i operacji maszynowych.
  • Przeniesienie funkcjonalności narzędzia mdbx_chk do wewnątrz biblioteki w postaci funkcji mdbx_env_chk() do sprawdzania integralności struktury bazy danych, w tym z zaangażowaniem logiki aplikacji.
  • Opcja MDBX_opt_gc_time_limit dla bardziej elastycznej kontroli czasu wydawanego na wyszukiwanie sekwencji sąsiadujących wolnych stron w GC.
  • Zasadnicze zmniejszenie kosztów uruchamiania transakcji w scenariuszach z dużą liczbą uchwytów DBI dzięki opóźnionej/luznej inicjalizacji elementów tabel pomocniczych. W tym mechanizm wsparcia dla rozrzedzonych zestawów uchwytów DBI, zarządzany przez opcję budowy MDBX_ENABLE_DBI_SPARSE, która jest domyślnie włączona.
  • Zmniejszenie kosztów otwierania uchwytów DBI. W tym mechanizm opóźnionego zwalniania i wsparcia dla szybkiej ścieżki otwierania bez użycia blokad, zarządzany przez opcję budowy MDBX_ENABLE_DBI_LOCKFREE, która jest włączona domyślnie.
  • Wsparcie dla "parkowania" transakcji odczytujących z ich wypieraniem w celu przetworzenia starych zrzutów MVCC oraz zapobiegania problemom wywołanym przez wstrzymanie przetwarzania śmieci. Mechanizm parkowania i wypierania zaparkowanych transakcji jest zarówno uzupełnieniem, jak i prostszą w użyciu alternatywą dla wywołania Handle-Slow-Readers. Dla wygody funkcje mdbx_txn_park() i mdbx_txn_unpark() mają dodatkowe argumenty, umożliwiające zażądanie automatycznego "odparkowania" zaparkowanych i ponownego uruchomienia wypartych transakcji. Do narzędzia mdbx_copy dodano odpowiednie opcje -d i -p.
  • Wsparcie dla przywracania otwartego środowiska pracy z bazą danych w procesie potomnym po rozwidleniu procesu za pomocą mdbx_env_resurrect_after_fork().
  • Wsparcie dla zmiany nazw tabel za pomocą mdbx_dbi_rename() i mdbx_dbi_rename2(). Dodano funkcję mdbx_enumerate_tables() umożliwiającą uzyskiwanie informacji o nazwanych użytkowych tabelach.
  • Tryb działania MDBX_NOSTICKYTHREADS zamiast MDBX_NOTLS dla uproszczenia integracji z lekkimi wątkami, ich multiplikacji razem z transakcjami wątków systemu operacyjnego.
  • Dodano UUID do identyfikacji bazy danych, który jest dostępny w polu mi_dxbid struktury MDBX_envinfo uzyskiwanej za pomocą mdbx_env_info_ex(). Zrealizowano uzyskiwanie informacji o bazie danych bez jej otwierania za pomocą mdbx_preopen_snapinfo().
  • Wsparcie dla funkcji logowania zwrotnego bez funkcjonalności vprintf(), co znacznie ułatwia korzystanie z logowania w powiązaniach z innymi językami programowania.
  • Dodanie do API funkcji mdbx_txn_copy2pathname() i mdbx_txn_copy2fd().
  • Restrukturyzacja kodu źródłowego z refaktoryzacją.
  • Zastosowanie terminu "tabela" zamiast "subDb".
  • Ogłoszenie opcji MDBX_COALESCE i MDBX_NOTLS jako przestarzałych. Zastąpienie opcji kompilacji MDBX_USE_VALGRIND powszechnie akceptowaną ENABLE_MEMCHECK.

Ź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