do testowania drugiej wersji Release Candidate biblioteki z wdrożeniem wydajnej, kompaktowej osadzonej bazy danych klucz-wartość. Obecna wersja (0.5) jest wydaniem technicznym, oznaczającym zakończenie wszelkich ulepszeń i przejście do publicznej fazy ostatecznego testowania i stabilizacji, po której następuje utworzenie pierwszej pełnoprawnej wersji biblioteki. kod libmdbx na podstawie licencji OpenLDAP Public License.
Biblioteka MDBX jest mocno przepisaną wersją biblioteki — transakcyjny wbudowany system DBMS klasy „klucz-wartość” oparty na без , co pozwala wielowątkowym procesom pracować współbieżnie i wydajnie z lokalnie współdzieloną (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: i nieblokujący odczyt z liniowym skalowaniem rdzeni 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.
Wydany kandydat na wersję libmdbx jest wynikiem decyzji podjętej w sierpniu 2019 r. o rozdzieleniu projektów MDBX i MithrilDB. Jednocześnie postanowiono wyeliminować (racjonalne) maksimum długu technicznego w libmdbx i ustabilizować bibliotekę. W rzeczywistości zrobiono 2-3 razy więcej w wyznaczonym kierunku, niż początkowo szacowano i planowano:
- Wsparcie wdrożone macOS oraz platformy drugiego poziomu: 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 Undefined Behavior Sanitizer i Address Sanitizer, wszystkie ostrzeżenia pojawiające się podczas montażu z opcją „-Wpedantic” zostały usunięte, podobnie jak wszystkie ostrzeżenia Coverity Static Analyzer itp.
- Aktualizacja .
- Scalanie (amalgamacja) 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 liczenie starych i zaktualizowanych stron oraz zaawansowane informacje o transakcjach.
- Opcja MDBX_ACCEDE do łączenia się z już otwartą bazą danych w trybie kompatybilnym.
- Używać 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+.
- Monitorowanie systemów plików innych niż lokalne (NFS, Samba itp.) w celu zapobiegania uszkodzeniu bazy danych na skutek niewłaściwego użytkowania.
- Rozszerzono zestaw testów.
Rozwój „następnej” wersji libmdbx będzie kontynuowany jako odrębny projekt , 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 Licencja Apache 2.0, nie ).
- Separacja pomaga uniknąć potencjalnych nieporozumień, zapewnia większą pewność i gwarantuje niezależność ścieżki rozwoju projektu.
MithrilDB, podobnie jak MDBX, również opiera się na 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 dla umieszczania baz danych na różnych nośnikach: HDD, SSD i pamięci trwałej.
- Optymalne strategie dla danych „o wysokiej wartości” i „o niskiej wartości”, dla danych „gorących”, „ciepłych” i „zimnych”.
- Wykorzystanie drzewa Merkle'a do monitorowania integralności bazy danych.
- Opcjonalne użycie WAL i znacznie wyższa wydajność w scenariuszach wymagających intensywnego zapisu, z gwarancją integralności danych.
- Leniwe nadrabianie danych poprzez zatwierdzanie ich na dyskach.
Źródło: opennet.ru
