Po pięciu latach prac opublikowano drugiego kandydata do wydania libmdbx 1.0

Dostępny do testowania druga wersja kandydata na wydania biblioteki libmdbx z implementacją wysokowydajnej, kompaktowej bazy danych wbudowanej klasy klucz-wartość. Obecna wersja (0.5) jest wydaniem technicznym, które oznacza zakończenie wszelkich poprawek i przejście do fazy publicznego testowania oraz stabilizacji, z późniejszym utworzeniem pierwszego pełnoprawnego wydania biblioteki. Kod libmdbx rozpowszechniany na licencji OpenLDAP Public License.

Biblioteka MDBX jest znaczącą przeróbką od LMDB — transakcyjnej wbudowanej SGBD klasy 'klucz-wartość' opartej na drzewie B+ bez wstępnej rejestrowania, która pozwala na konkurencyjne i efektywne działanie procesów wielowątkowych z lokalnie współdzieloną (nie sieciową) bazą danych. MDBX jest szybsza i bardziej niezawodna niż LMDB, jednocześnie zachowując wszystkie kluczowe możliwości swojego przodka, takie jak ACID i nieblokujące odczyty z liniowym skalowaniem w zależności od rdzeni CPU.

Najważniejsze różnice MDBX w porównaniu do LMDB:

  • Zasadniczo większą uwagę poświęca się jakości kodu, testowaniu i automatycznym kontrolom.
  • Znacznie większa kontrola podczas pracy, od weryfikacji parametrów po wewnętrzną audyt struktur baz danych.
  • Auto-kompaktowanie i automatyczne zarządzanie rozmiarem bazy danych.
  • Jednolity format bazy danych dla 32-bitowych i 64-bitowych kompilacji.
  • Ocena objętości zapytań na podstawie zakresów (range query estimation).
  • Wsparcie dla kluczy o dwukrotnie większych rozmiarach i wybierany przez użytkownika rozmiar strony bazy danych.

Wydany kandydat na wersję libmdbx jest wynikiem decyzji podjętej w sierpniu 2019 roku o podziale projektów MDBX i MithrilDB. W libmdbx postanowiono zlikwidować (racjonalny) maksymalny dług techniczny i ustabilizować bibliotekę. W rzeczywistości w tym kierunku wykonano 2-3 razy więcej, niż pierwotnie oceniano i planowano:

  • Zaimplementowano wsparcie dla macOS oraz platform "drugiego poziomu": FreeBSD, Solaris, DragonFly BSD, OpenBSD, NetBSD. Wsparcie dla AIX i HP-UX może być dodane w razie potrzeby.
  • Przeprowadzono sanację kodu za pomocą Undefined Behavior Sanitizer i Address Sanitizer, usunięto wszystkie ostrzeżenia podczas kompilacji z "-Wpedantic", wszystkie ostrzeżenia Coverity Static Analyzer itd.
  • Aktualizacja opisu API.
  • Scalanie (amalgamacja) kodu źródłowego dla wygody integracji.
  • Wsparcie dla CMake.
  • Wsparcie dla zagnieżdżonych transakcji.
  • Użycie bootid do określenia faktu ponownego uruchomienia systemu operacyjnego (brudne zatrzymanie bazy danych).
  • Liczenie updated/old pages i rozszerzone informacje o transakcjach.
  • Opcja MDBX_ACCEDE do połączenia z już otwartą bazą danych w trybie zgodności.
  • Użycie Blokady OFD w przypadku ich dostępności.
  • Gorące kopie zapasowe w pipe.
  • Specjalistyczny zoptymalizowany algorytm wewnętrznego sortowania (do 2-3 razy szybszy niż „qsort()” i do 30% szybszy niż „std::sort()”).
  • Zwiększona maksymalna długość klucza.
  • Automatyczne zarządzanie read ahead (strategią buforowania plików bazy danych w pamięci).
  • Bardziej agresywna i szybka auto-kompaktyfikacja.
  • Bardziej optymalna strategia łączenia stron drzewa B+.
  • Kontrola nielokalnych systemów plików (NFS, Samba itd.) w celu zapobiegania uszkodzeniu bazy danych przy niewłaściwym użyciu.
  • Rozszerzony zestaw testów.

Rozwój 'następnej' wersji libmdbx będzie kontynuowany w ramach oddzielnego projektu MithrilDB, podczas gdy wektor rozwoju 'bieżącej' wersji MDBX jest ukierunkowany na zamrożenie zestawu funkcji i stabilizację. Decyzja podjęta została z trzech powodów:

  • Całkowita niekompatybilność: aby wdrożyć wszystkie planowane funkcje w MithrilDB, potrzebny jest inny (niekompatybilny) format plików bazy danych oraz inne (niekompatybilne) API.
  • Nowy kod źródłowy: dla kodu źródłowego MithrilDB zapewniona jest niezależność licencyjna od LMDB, a sam projekt planowany jest do publikacji na innej licencji (zatwierdzonej OSI licencją Apache 2.0, a nie OpenLDAP Public License).
  • Podział pozwala uniknąć potencjalnych nieporozumień, wprowadzić większą pewność i zapewnić niezależność rozwoju projektów.

MithrilDB, tak jak MDBX, również opiera się na drzewie B+ i również będzie się odznaczał najwyższą wydajnością, eliminując jednocześnie szereg zasadniczych wad MDBX i LMDB. W szczególności zniknie problem 'długich odczytów', objawiający się jako 'nabrzmiewanie' bazy danych z powodu blokady przetwarzania danych przez długie transakcje odczytu. Wśród nowych możliwości MithrilDB należy wyróżnić:

  • Wsparcie dla umieszczania baz danych na różnych nośnikach: HDD, SSD i pamięci nieulotnej.
  • Optymalne strategie dla „cennych” i „mało cennych”, dla „gorących”, „ciepłych” i „zimnych” danych.
  • Wykorzystanie drzewa Merkle do kontroli integralności bazy danych.
  • Opcjonalne wykorzystanie WAL oraz znacznie wyższa wydajność w scenariuszach intensywnego zapisu i zapewnienia integralności danych.
  • Leniwe opóźnione zapisywanie danych na dyskach.

Ź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