Wydanie bazy danych libmdbx 0.11.7. Przeniesienie rozwoju na GitFlic po zablokowaniu na GitHubie

Wydano bibliotekę libmdbx 0.11.7 (MDBX) z implementacją wysokowydajnej, kompaktowej bazy danych typu klucz-wartość. Kod libmdbx jest rozpowszechniany na licencji OpenLDAP Public License. Wspierane są wszystkie aktualne systemy operacyjne i architektury, a także rosyjski Elbrus 2000.

Wydanie jest godne uwagi migracją projektu na serwis GitFlic po tym, jak 15 kwietnia 2022 roku administracja GitHub bez jakichkolwiek ostrzeżeń i wyjaśnień usunęła libmdbx wraz z wieloma innymi projektami, jednocześnie blokując dostęp wielu programistom związanym z firmami objętymi sankcjami USA. Z perspektywy użytkowników, wszystkie strony, repozytorium i forki projektu nagle zamieniły się w stronę „404”, bez możliwości jakiejkolwiek komunikacji i wyjaśnienia przyczyn.

Niestety utracono prawie wszystkie zgłoszenia, w których było wiele pytań z szczegółowymi odpowiedziami, a także nieco dyskusji. Utrata tych informacji jest jedyną obiektywną szkodą, jaką administracja GitHub udało się zadać projektowi. Częściowo kopie dyskusji pozostają dostępne w archiwum archive.org.

Utrata zbudowanych scenariuszy CI i infrastruktury (dostępnej dla projektów OpenSource bezpłatnie) zmusiła do rewizji, unifikacji i usunięcia niewielkiego długu technologicznego. Teraz CI został przywrócony prawie w poprzedniej formie, z wyjątkiem kompilacji i testów dla wszystkich wariantów BSD i Solaris. Co ciekawe, po działaniach ze strony GitHub nie wpłynęły żadne wyjaśnienia ani powiadomienia, z wyjątkiem przypomnienia o konieczności opłaty i prób pobrania pieniędzy.

Od momentu ostatnich wiadomości o wydaniu libmdbx v0.11.3, oprócz przywracania po działaniach GitHub, należy zauważyć następujące poprawki i ulepszenia:

  • Dodano obejście wykrytego efektu/defektu niekoherencji w połączonym cache'u stron i buforów w jądrze Linux. W systemach, gdzie cache stron i buforów jest rzeczywiście połączony, jądro nie ma sensu tracić pamięci na dwie kopie danych podczas zapisywania do już załadowanego do pamięci pliku. Dlatego zapisane dane stają się widoczne przez mapowanie w pamięci przed zakończeniem wywołania systemowego write(), nawet jeśli dane nie zostały jeszcze zapisane na dysku.

    Ogólnie rzecz biorąc, inne zachowanie nie jest racjonalne, ponieważ przy opóźnionym scalaniu i tak będzie konieczne zajęcie blokad dla list stron, skopiowanie danych lub korekta PTE. Dlatego niepisana zasada spójności obowiązywała od 1989 roku, kiedy to w SRV4 pojawiła się zintegrowana pamięć podręczna. W związku z tym wykrycie dziwnych awarii w obciążonych scenariuszach korzystania z libmdbx wymagało wielu prac. Najpierw nad reprodukcją problemu, a następnie nad weryfikacją hipotez i sprawdzaniem ulepszeń.

    Obecnie można z całą pewnością powiedzieć, że problem został wiarygodnie zidentyfikowany, zlokalizowany i niezawodnie rozwiązany, mimo całej złożoności i specyfiki scenariusza reprodukcji. Dodatkowo działanie mechanizmu omijania zostało potwierdzone przez jednego z programistów Erigon (Ethereum), w jego przypadku w wersji debug do działania zabezpieczenia objawiało się regresją z powodu nadmiernej kontroli assercji.

    Należy zauważyć, że w kontekście szerokiego zastosowania libmdbx w projektach roboczych, zapewnienie niezawodności działania jest zasadniczo ważniejsze niż ustalanie, czy to błąd, czy cecha, oraz czy można polegać na takiej spójności, a tym bardziej nie szukanie przyczyn niespójności wewnątrz jądra Linux. Dlatego chodzi o rozwiązanie problemu, który mógł dotyczyć użytkowników.

  • Wyeliminowano regres pojawiania się błędu EXDEV (Cross-device link) podczas gorącego kopiowania bazy danych bez kompresji na inną system plików, zarówno przez API, jak i narzędzie mdbx_copy.
  • Kris Zyp zaimplementował wsparcie dla libmdbx w Deno. Kai Wetlesen zrealizował pakowanie RPM dla Fedory. David Bouyssié opracował powiązania dla Scali.
  • Poprawiono przetwarzanie wartości określanej przez opcję MDBX_opt_rp_augment_limit przy przetwarzaniu ogromnych transakcji w dużych bazach danych. Wcześniej przez błąd mogły być podejmowane zbędne działania, co czasami wpływało na wydajność w realizacjach Ethereum (Erigon/Akula/Silkworm) i projektach Binance Chain.
  • Naprawiono wiele niedociągnięć, w tym w API C++. Wyeliminowano wiele problemów ze kompilacją w rzadkich i egzotycznych konfiguracjach. Pełna lista wszystkich znaczących poprawek jest dostępna w ChangeLog.
  • Ogółem wprowadzono 185 zmian w 89 plikach, dodano ≈3300 linii, usunięto ≈4100. Większość usunięć wynika z oczyszczenia z już niepotrzebnych plików technologicznych związanych z GitHubem i zależnymi usługami.

Historia libmdbx jest głębokim przetworzeniem 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, libmdbx kładzie duży nacisk na jakość kodu, stabilną pracę API, testowanie i automatyczne kontrole. 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 nieblokujące czytanie z liniowym skalowaniem w odniesieniu do rdzeni CPU. Obsługuje automatyczną kompaktyfikację, automatyczne zarządzanie rozmiarem bazy danych, szacowanie objętości zapytań w oparciu o zakres (range query estimation). Od 2016 roku projekt jest finansowany przez firmę Positive Technologies i od 2017 roku wykorzystywany jest w jej produktach.

Dla libmdbx oferowane jest rozwinięte API C++, a także wspierane przez entuzjastów powiązania z językami Rust, Haskell, Python, NodeJS, Ruby, Go, Nim, Deno, Scala.

Ź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