libmdbx 0.12.3 zostało już wydane i to są jego nowości

libmdbx

libmdbx to niezwykle szybka, kompaktowa, wydajna, zintegrowana i licencjonowana transakcyjna baza danych klucz-wartość.

ten wydanie nowej wersji libmdbx 0.12.3 (MDBX) implementacja kompaktowej, wysokowydajnej wbudowanej bazy danych klucz-wartość.

libmdbx jest głęboka przeróbka DBMS LMDB i przewyższa swojego poprzednika pod względem niezawodności, zestaw funkcji i wydajność. W porównaniu do LMDB, libmdbx kładzie duży nacisk na jakość kodu, stabilność API, testowanie i samokontrolę.

Główne nowe funkcje libmdbx 0.12.3

W tej nowej wersji możemy to znaleźć zaimplementował dynamiczny wybór między równoczesnym zapisem na dysk a zapisem normal, po którym następuje fdatasync(), kontrolowane przez opcję MDBX_opt_writethrough_threshold. W trybach trwałych dane mogą być opróżniane na dysk na dwa sposoby: współbieżny zapis poprzez deskryptor pliku otwarty za pomocą O_DSYNC oraz normalny zapis, po którym następuje fdatasync().

Pierwsza metoda jest to wygodniejsze przy pisaniu niewielkiej liczby stron i/lub jeśli kanał komunikacji z dyskiem/nośnikiem ma opóźnienie bliskie zeru. Druga metoda jest wygodna, jeśli trzeba napisać dużo stron i/lub kanał interakcji ma znaczne opóźnienie (centra danych, chmury). Dodana opcja MDBX_opt_writethrough_threshold umożliwia ustawienie progu w czasie wykonywania, aby dynamicznie wybrać metodę zapisu na podstawie wolumenu i określonych warunków użytkowania.

Kolejną wyróżniającą się zmianą jest to dodano opcję kompilacji MDBX_MMAP_USE_MS_ASYNC co pozwala wyłączyć korzystanie z wywołania systemowego msync(MS_ASYNC), które nie jest potrzebne w zdecydowanej większości obecnych systemów operacyjnych.

poza tym domyślnie MDBX_MMAP_USE_MS_ASYNC=0(dezaktywowany) w systemie Linux i innych systemach z ujednoliconą pamięcią podręczną stron. To zachowanie (bez użycia msync(MS_ASYNC)) odpowiada zakodowanej na stałe logice LMDB. W rezultacie w prostych/naiwnych testach porównawczych libmdbx przewyższa LMDB w taki sam sposób, jak w rzeczywistym użyciu.

Na wszelki wypadek warto jeszcze raz zauważyć/pamiętać, że w systemie Windows oczekuje się, że libmdbx pozostanie w tyle za LMDB w scenariuszach z wieloma małymi transakcjami, ponieważ libmdbx celowo używa blokad plików w systemie Windows, które są powolne (źle zaimplementowane). system operacyjny), ale pozwala chronić użytkowników przed dużą liczbą błędnych działań prowadzących do uszkodzenia bazy danych.

W trybie alokacji/ponownego wykorzystania MDBX_WRITEMAP strony generują błąd strony i strona jest odczytywana z dysku, nawet jeśli zawartość strony nie jest potrzebna (zostanie nadpisana). Jest to konsekwencja pracy podsystemu pamięci wirtualnej, a zwykła metoda leczenia MADV_REMOVE nie działa na wszystkich systemach plików i często jest droższa niż wynikające z tego oszczędności.

Oprócz tego warto też o tym wspomnieć libmdbx używa teraz „zapisu z wyprzedzeniem” takich stron, co w systemach z ujednoliconą pamięcią podręczną stron powoduje „wypychanie” danych, eliminując konieczność odczytu z dysku podczas uzyskiwania dostępu do tej strony z pamięci. Nowa funkcjonalność działa w połączeniu z automatyczną obsługą pamięci podręcznej odczytu z wyprzedzeniem i stanu obecności strony w pamięci RAM za pośrednictwem mincore().

Wspomniano również, że zapis przed awarią został zaimplementowany podczas przydzielania stron do alokacji odczytu i zapisu. Prowadzi to do wielokrotnej redukcji kosztów systemu i znacznego wzrostu wydajności w odpowiednich przypadkach użycia, gdy: rozmiar bazy danych i ilość danych są znacznie większe niż pamięć RAM; używany jest tryb MDBX_WRITEMAP; Transakcje niemałe (w trakcie transakcji alokowanych jest wiele setek lub tysięcy stron).

Z innych zmian które wyróżniają się:

  • Dodano kontrolę braku plików LCK z alternatywnymi nazwami.
  • Ulepszona obsługa automatycznego scalania rekordów GC w page_alloc_slowpath().
  • Zaangażowany pojedynczy kursor, aby przeszukać GC. Zmodyfikowane flagi wewnętrzne związane ze stronicowaniem GC.
  • Poprawione przygotowanie rezerwacji przed aktualizacją GC z włączoną funkcją BigFoot.
  • Zoptymalizowano użycie pnl_merge() dla przypadków nienakładających się scalonych list.
  • Zoptymalizowana obsługa uporządkowanej listy stron w dpl_append().
  • Poprawiona wydajność mdbx_chk podczas przetwarzania danych wejściowych użytkownika w @MAIN.
  • Zmodyfikowane oznaczenia LRU
  • Przeprojektowana ujednolicona kontrola „niespójności” pamięci podręcznej stron w celu zmniejszenia kosztów ogólnych.
  • Zapewniona automatyczna instalacja MDBX_opt_rp_augment_limitw zależności od wielkości bazy danych.
  • Dodano opcję MDBX_opt_prefault_write_enable, aby wymusić włączenie/wyłączenie zapisu przed błędem.
  • Dodano obsługę nazw niedrukowalnych dla subDb.
    Dodano jawną opcję tls_model("local-dynamic"), aby naprawić problem "relokacji R_X86_64_TPOFF32 przeciwko FOO nie można użyć z -shared" z powodu błędu w Clang, który spowodował użycie niewłaściwego trybu ls_model.

Wreszcie, jeśli chcesz dowiedzieć się więcej na ten tematmożesz sprawdzić szczegóły W poniższym linku.


Zostaw swój komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

*

*

  1. Odpowiedzialny za dane: Miguel Ángel Gatón
  2. Cel danych: kontrola spamu, zarządzanie komentarzami.
  3. Legitymacja: Twoja zgoda
  4. Przekazywanie danych: Dane nie będą przekazywane stronom trzecim, z wyjątkiem obowiązku prawnego.
  5. Przechowywanie danych: baza danych hostowana przez Occentus Networks (UE)
  6. Prawa: w dowolnym momencie możesz ograniczyć, odzyskać i usunąć swoje dane.