Wydanie wysoko wydajnej wbudowanej bazy danych libmdbx 0.10.4 i libfpta 0.3.9

Wydano biblioteki libmdbx 0.10.4 (MDBX), które wdrażają wysokowydajną, kompaktową bazę danych wbudowaną klasy klucz-wartość, oraz powiązaną bibliotekę libfpta 0.3.9 (FPTA), realizującą na bazie MDBX tabelaryczne przedstawienie danych z indeksami wtórnymi i złożonymi. Obie biblioteki są dystrybuowane na licencjach zatwierdzonych przez OSI. Obsługiwane są wszystkie aktualne systemy operacyjne oraz architektury, w tym rosyjski Elbrus 2000.

Historycznie libmdbx jest gruntowną przebudową bazy danych LMDB i przewyższa swojego poprzednika pod względem niezawodności, zestawu możliwości i wydajności. W porównaniu z LMDB, w libmdbx z dużą uwagą podchodzi się do jakości kodu, stabilności API, testowania i automatycznych kontroli. Dostarczana jest narzędzie do sprawdzania integralności struktury bazy danych z pewnymi możliwościami przywracania.

Technologicznie libmdbx oferuje ACID, ścisłą serializację zmian oraz odczyt bez blokowania z liniowym skalowaniem na rdzeniach CPU. Obsługuje automatyczną kompaktyfikację, automatyczne zarządzanie rozmiarem bazy danych, ocenę objętości zapytań w zakresie (range query estimation). Od 2016 roku projekt jest finansowany przez firmę Positive Technologies i od 2017 roku wykorzystywany w jej produktach.

Dla libmdbx oferowane jest API w C++, a także wspierane przez entuzjastów powiązania z językami Rust, Haskell, Python, NodeJS, Ruby, Go, Nim. Dla libfpta publicznie dostępny jest tylko opis API w postaci pliku nagłówkowego C/C++.

Główne nowości, poprawki i zmiany, które zostały dodane po poprzedniej wiadomości z 9 maja:

  • Zapewniono możliwość reprodukowalnych kompilacji.
  • Usunięto błąd, który w bardzo rzadkich okolicznościach podczas zatwierdzania transakcji mógł powodować zakleszczenie/zawieszenie. Problem został zidentyfikowany przez specjalistów z Positive Technologies podczas wewnętrznych testów własnych produktów.
  • Zaktualizowano testy i rozszerzono scenariusze testowe w celu weryfikacji wszystkich osiągalnych nieizomorficznych stanów drzewa stron i zawartości GC wewnątrz bazy danych.
  • W API C++ poprawiono zbędne „noexcept”, dodano dodatkowe przeciążenia dla metody „cursor::erase()”, a implementacja buforów została pozbawiona użycia „std::string” w celu zapewnienia wyrównania (istotne dla CLANG libstdc++).
  • Usunięto regres w algorytmie spillowania brudnych stron (selektywne wypieranie zmienionych stron Bazy Danych), co objawiało się rzadkim, nieoczekiwanym błędem MDBX_PROBLEM podczas zmiany danych w ogromnych transakcjach.
  • Przeprowadzono kontrolę za pomocą fazowania, dodając szereg weryfikacji dla zapewnienia stabilności podczas celowego uszkodzenia Bazy Danych.
  • Usunięto drobne ostrzeżenia UndefinedBehaviorSanitizer i problemy zgłoszone przez Coverity Scan.
  • Poprawiono weryfikację przestarzałej i już nieużywanej wewnętrznej flagi „P_DIRTY” w wbudowanych stronach w obrazach Bazy Danych stworzonych przez starsze wersje biblioteki.
  • W skryptach CMake poprawiono wyszukiwanie komponentów kompilatora niezbędnych do LTO (optymalizacji w czasie linkowania).
  • Maksymalna liczba jednoczesnych czytelników zwiększona do 32767.
  • Przyspieszono działanie przy użyciu Valgrind i AddressSanitizer.
  • Na Windows usunięto rekurencyjne korzystanie z SRW-lock podczas pracy w trybie MDBX_NOTLS (bez użycia lokalnego przechowywania wątków), poprawiono generację bootid w przypadku zmiany czasu systemowego, poprawiono detekcję WSL1 i WSL2, dodano możliwość otwierania Bazy Danych w Plan 9 zamontowanej za pośrednictwem DrvFS.
  • Łącznie wprowadzono ponad 160 zmian w 57 plikach, dodano ~5000 linii, usunięto ~2500.

Szczególne podziękowania dla zespołu projektu Erigon (ekosystem Ethereum) za pomoc w testowaniu w ekstremalnych scenariuszach użytkowania. Warto zauważyć, że w ciągu pięciu miesięcy od wydania libmdbx v0.10.0, przy objętości Bazy Danych 1-2 TB w każdej instalacji Erigon (używanej na 7% węzłów Ethereum), otrzymano tylko trzy zgłoszenia o uszkodzeniu Bazy Danych, wszystkie spowodowane przyczynami zewnętrznymi, a nie błędami oprogramowania: w dwóch przypadkach przyczyną były awarie RAM, a w trzecim błąd zerowania danych w specyficznej konfiguracji podsystemu przechowywania z użyciem BTRFS.

Ź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