Издаване на високопроизводителната вградена СУБД libmdbx 0.10.4 и libfpta 0.3.9

Състоянието на библиотеките libmdbx 0.10.4 (MDBX) с реализация на високо производителна компактна вградена база от клас ключ-стойност е приключило, като е свързано с библиотеката libfpta 0.3.9 (FPTA), предоставяща таблично представяне на данни с вторични и съставни индекси над MDBX. И двете библиотеки се разпространяват под лицензии, одобрени от OSI. Поддържат се всички актуални операционни системи и архитектури, както и руския Елбрус 2000.

Исторически libmdbx е дълбока преработка на СУБД LMDB и надминава своя предшественик по надеждност, набор от възможности и производителност. В сравнение с LMDB, libmdbx акцентира на качеството на кода, стабилната работа на API, тестването и автоматичните проверки. Предлага се утилита за проверка на целостта на структурата на БД с някои възможности за възстановяване.

Технологично libmdbx предлага ACID, строга сериализация на промените и некогаещо четене с линейно мащабиране по ядрата на ЦПУ. Поддържа се автоматична компактификация, автоматично управление на размера на БД и оценка на обема на селекции по диапазони (оценка на запитвания по диапазони). От 2016 г. проектите се финансират от компания Positive Technologies и от 2017 г. се използват в нейните продукти.

За libmdbx е предложен C++ API, както и подкрепяни от ентусиасти свързвания за езици като Rust, Haskell, Python, NodeJS, Ruby, Go, Nim. За libfpta публично е достъпно само описанието на API под формата на заглавен файл C/C++.

Основни нововъведения, доработки и корекции, добавени след предишната новина от 9 май:

  • Обезпечена е възможността за възпроизводими събирания.
  • Отстранена е грешка, при която в много редки обстоятелства при фиксация на транзакция можеше да се получи зацикляне/забавяне. Проблемът е установен от специалисти на Positive Technologies при вътрешно тестване на собствените им продукти.
  • Преработени са тестовете и разширени тестовите сценарии за проверка на всички достижими не изоморфни състояния на страницовото дърво и съдържанието на GC в БД.
  • В C++ API е отстранен излишният «noexcept», добавени са допълнителни претоварвания за метода «cursor::erase()», а реализацията на буферите е избавена от използването на «std::string» за осигуряване на подравняване (актуално за CLANG libstdc++).
  • Премахнат регрес в алгоритма за изчистване на мръсни страници (избирателно изтласкване на променени страници от БД), проявяващ се с рядка неочаквана грешка MDBX_PROBLEM при промяна на данни в огромни транзакции.
  • Извършена проверка с фазинг, с добавка на редица проверки, за да се осигури стабилност при умишлено повреждане на БД.
  • Премахнати незначителни предупреждения UndefinedBehaviorSanitizer и проблеми с Coverity Scan.
  • Коригирана проверка на остарял и вече неизползваем вътрешен флаг «P_DIRTY» във вложените страници в образите на БД, създадени от стари версии на библиотеката.
  • В CMake скриптовете доработен процесът на търсене на компоненти на компилятора, необходими за LTO (оптимизация на свързване по време на изпълнение).
  • Максималният брой на едновременни читатели увеличен до 32767.
  • Ускорена работа при използване на Valgrind и AddressSanitizer.
  • На Windows премахнато рекурсивното използване на SRW-lock при работа в режим MDBX_NOTLS (без използване на локално хранилище на нишки), коригирана генерация на bootid при промяна на системното време, доработено откриване на WSL1 и WSL2, добавена възможност за отваряне на БД на Plan 9, монтирана чрез DrvFS.
  • Общо въведени над 160 промени в 57 файла, добавени ~5000 реда, изтрити ~2500.

По специален начин искаме да благодарим на екипа на проекта Erigon (екосистема на Ethereum) за помощта при тестове в екстремни сценарии на използване. Показателно е, че за пет месеца след излизането на libmdbx v0.10.0, при обем на БД от 1-2 Тб на всяка инсталация на Erigon (използва се на 7% от възлите на Ethereum), получени са само три съобщения за повреждане на БД, всички поради външни причини, а не поради софтуерни грешки: в два случая причината бяха повреди в ОЗУ, в третия - грешка при нулиране на данни в специфична конфигурация на системата за съхранение с използване на BTRFS.

Източник: opennet.ru

Купете надежден хостинг за сайтове с защита от DDoS, VPS VDS сървъри 🔥 Купете надежден хостинг за сайтове с защита от DDoS, VPS VDS сървъри | ProHoster