Po pięciu latach prac opublikowano drugą wersję Release Candidate libmdbx 1.0
Do dyspozycji do testowania drugiego kandydata do wydań bibliotecznych libmdbx dzięki wdrożeniu wysokowydajnej, kompaktowej, wbudowanej bazy danych klucz-wartość. Obecna wersja (0.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. kod libmdbx dystrybuowane przez licencjonowany w ramach Licencji Publicznej OpenLDAP.
Biblioteka MDBX jest znacząco zmienionym rozwidleniem LMDB — transakcyjny wbudowany system DBMS klasy „klucz-wartość” oparty na drzewo B+ без proaktywne rejestrowanie, co pozwala procesom wielowątkowym na konkurencyjną i wydajną pracę z lokalnie udostępnianą (nie sieciową) bazą danych. Z kolei MDBX jest szybszy i bardziej niezawodny niż LMDB, a jednocześnie zachowuje wszystkie kluczowe cechy swojego przodka, takie jak ACID i nieblokujące odczyty z liniowym skalowaniem pomiędzy rdzeniami procesora.
Najważniejsze różnice pomiędzy MDBX i LMDB:
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 objętości próbek według zakresó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 libmdbx jest wynikiem decyzji podjętej w sierpniu 2019 roku o oddzieleniu projektów MDBX i MithrilDB. 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ę platform macOS i 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.
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.0 nie Licencja publiczna OpenLDAP).
Podział pozwala uniknąć potencjalnych nieporozumień, wprowadza większą pewność i zapewnia niezależną ścieżkę 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ą:
Wsparcie umieszczenia bazy danych na kilku heterogenicznych nośnikach: HDD, SSD i pamięci nieulotnej.
Optymalne strategie dla danych „cennych” i „małych”, dla danych „gorących”, „ciepłych” i „zimnych”.
Wykorzystanie drzewa Merkle do monitorowania integralności bazy danych.
Opcjonalne wykorzystanie WAL i znacznie poprawiona wydajność w scenariuszach wymagających intensywnego zapisu z gwarancją integralności danych.
Leniwe nadrabianie zaległości w przesyłaniu danych na dyski.