biblioteka libmdbx jest znacząco przeprojektowanym następcą LMDB – niezwykle wydajnej, kompaktowej, wbudowanej bazy danych klucz-wartość.
Obecna wersja v0.5 jest wydaniem technicznym, oznacza zakończenie wszelkich ulepszeń i przejście do fazy publicznych testów końcowych i stabilizacji, z późniejszym utworzeniem pierwszego pełnego wydania biblioteki.
LMDB jest dość dobrze znanym transakcyjnym osadzonym systemem DBMS opartym na kluczu i wartości drzewo B+ без proaktywne rejestrowanie, co umożliwia rójowi procesów wielowątkowych konkurencyjną i niezwykle efektywną pracę z lokalnie udostępnianą (nie sieciową) bazą danych. Z kolei MDBX jest szybszy i bardziej niezawodny niż LMDB, natomiast libmdbx zachowuje wszystkie kluczowe cechy swojego przodka, takie jak ACID i nieblokujące odczyty z liniowym skalowaniem pomiędzy rdzeniami procesora, a także dodaje kilka nowych.
Opis różnic i ulepszeń libmdbx w stosunku do LMDB zasługuje na osobny artykuł (który ma zostać opublikowany na Habré i Medium). W tym miejscu należy wymienić najważniejsze i najbardziej zauważalne:
- Zasadniczo większą uwagę poświęca się jakości kodu, testowaniu i automatycznym kontrolom.
- Wyraźnie większa kontrola podczas pracy, od sprawdzania parametrów po wewnętrzny audyt struktur baz danych.
- Automatyczne kompaktowanie i automatyczne zarządzanie rozmiarem bazy danych.
- Pojedynczy format bazy danych dla zestawów 32-bitowych i 64-bitowych.
- Oszacowanie liczebności próby według przedziałów (estymacja zapytania o zakres).
- Obsługa kluczy dwa razy większych niż naleśniki i wybierany przez użytkownika rozmiar strony bazy danych.
Wersja Release Candidate jest wynikiem decyzji (patrz poniżej) o oddzieleniu projektów MDBX i MithrilDB z sierpnia 2019. Jednocześnie libmdbx zdecydowało się wyeliminować (racjonalny) maksymalny dług techniczny i ustabilizować bibliotekę. Tak naprawdę w wyznaczonym kierunku zrobiono 2-3 razy więcej, niż początkowo szacowano i planowano:
- Zaimplementowano obsługę Mac OS i platform drugiej warstwy: FreeBSD, Solaris, DragonFly BSD, OpenBSD, NetBSD. W razie potrzeby można dodać obsługę systemów AIX i HP-UX.
- Kod został oczyszczony przy użyciu Unknown Behaviour Sanitizer i Address Sanitizer, wszystkie ostrzeżenia podczas budowania za pomocą -Wpedantic, wszystkie ostrzeżenia Coverity Static Analyzer itp. zostały wyeliminowane.
- Aktualizacja Opisy API.
- Połączenie kodu źródłowego w celu ułatwienia osadzania.
- Udziel wsparcia.
- Obsługa transakcji zagnieżdżonych.
- Użycie bootid do ustalenia, czy system operacyjny został ponownie uruchomiony (brudne zatrzymanie bazy danych).
- Kompleksowe zliczanie zaktualizowanych/starych stron i rozszerzone informacje o transakcjach.
- Opcja MDBX_ACCEDE do łączenia się z już otwartą bazą danych w trybie kompatybilnym.
- Używać Blokada OFD kiedy dostępny.
- Gorąca kopia zapasowa w rurze.
- Specjalistyczny zoptymalizowany algorytm sortowania wewnętrznego (do 2-3 razy szybszy niż qsort() i do 30% szybszy niż std::sort()).
- Zwiększono maksymalną długość klucza.
- Automatyczna kontrola odczytu z wyprzedzeniem (strategia buforowania plików bazy danych w pamięci).
- Bardziej agresywne i szybsze samozagęszczanie.
- Bardziej optymalna strategia łączenia stron drzewa B+.
- Kontrola nielokalnych systemów plików (NFS, Samba itp.), aby zapobiec uszkodzeniu bazy danych w przypadku nieprawidłowego użycia.
- Rozszerzono zestaw testów.
Rozwój „następnej” wersji libmdbx będzie kontynuowany jako odrębny projekt MithrilDB, podczas gdy wektor rozwoju „bieżącej” wersji MDBX ma na celu zamrożenie zestawu funkcji i jego stabilizację. Decyzję tę podjęto z trzech powodów:
- Całkowicie niezgodny: MithrilDB wymaga innego (niekompatybilnego) formatu pliku bazy danych i innego (niekompatybilnego) API do wdrożenia wszystkich planowanych funkcji.
- Nowy kod źródłowy: Kod źródłowy MithrilDB został uniezależniony na licencji od LMDB, a publikacja samego projektu planowana jest na innej licencji (zatwierdzonej przez OSI licencja Apache 2.0I nie Fundacja OpenLDAP).
- Oddzielenie pozwala uniknąć potencjalnych nieporozumień, zapewnia większą pewność i zapewnia niezależną ścieżkę rozwoju projektów.
MithrilDB, podobnie jak MDBX, również opiera się na drzewo B+ i będzie również charakteryzował się wyjątkowo wysoką wydajnością, eliminując jednocześnie szereg podstawowych wad MDBX i LMDB. W szczególności wyeliminowany zostanie problem „długich odczytów”, który objawia się „pęcznieniem” bazy danych w związku z blokowaniem przetwarzania śmieci przez transakcje długiego odczytu. Nowe funkcje MithrilDB obejmują:
- obsługa umieszczenia bazy danych na kilku heterogenicznych nośnikach: HDD, SSD i pamięci nieulotnej.
- optymalne strategie dla danych „wartościowych” i „małowartościowych”, „gorących”, „ciepłych” i „zimnych”.
- wykorzystanie drzewa Merkle do monitorowania integralności bazy danych.
- opcjonalne wykorzystanie WAL i znacznie wyższa wydajność w scenariuszach wymagających intensywnego zapisu oraz gwarancja integralności danych.
- Leniwe utrwalanie danych na dyskach.
Źródło: linux.org.ru