Вторият кандидат за релиз на libmdbx v1.0 след пет години разработка.

Библиотека libmdbx е значително преработен потомък на LMDB — изключително високо производителна, компактна вградена база данни от клас ключ-стойност.
Текущата версия v0.5 е технически релиз, който бележи завършването на всякакви доработки и преминаването към етапа на публично финално тестване и стабилизация, с последващото формиране на първия цялостен релиз на библиотеката.

LMDB е сравнително известна транзакционна вградена СУБД от клас „ключ-стойност“ на базата на B+ дърво без превантивно логиране, което позволява на множество многопоточни процеси да работят конкурентно и изключително ефективно с локално споделяна (не мрежова) база данни. От своя страна MDBX е по-бърз и надежден от LMDB, като libmdbx запазва всички ключови възможности на своя предшественик, като ACID и неблокирано четене с линейно мащабиране по ядра на CPU, както и добавя няколко нови.

Описание на разликите и усъвършенстванията на libmdbx относно LMDB заслугата за отделна статия (планирано публикуване на „Хабре“ и „Medium“). Тук е уместно да споменем най-важните и забележими:

  • Принципно повече внимание се отделя на качеството на кода, тестването и автоматичните проверки.
  • Съществено повече контрол по време на работа, започвайки от проверка на параметрите до вътрешен одит на структурите на базата данни.
  • Авто-компактиране и автоматично управление на размера на базата данни.
  • Единичен формат на базата данни за 32-битови и 64-битови сборки.
  • Оценка на обема на изборките по диапазони (range query estimation).
  • Подкрепа за ключове с два пъти по-голям размер и избираем от потребителя размер на страницата на базата данни.

Издаденият кандидат за релиз на libmdbx е резултат от решението (виж по-долу) за разделяне на проектите MDBX и MithrilDB през август 2019. В libmdbx беше решено да се премахне (рационално) максимално техническия дълг и да се стабилизира библиотеката. Фактически, в обозначената посока е направено 2-3 пъти повече, отколкото беше оценявано и планирано първоначално:

  • Реализирана е поддръжка за Mac OS и платформи от „второ ниво“: FreeBSD, Solaris, DragonFly BSD, OpenBSD, NetBSD. Подкрепата за AIX и HP -UX може да бъде добавена при необходимост.
  • Извършено е оздравяване на кода с помощта на Undefined Behavior Sanitizer и Address Sanitizer, отстранени са всички предупреждения при компилация с -Wpedantic, всички предупреждения на Coverity Static Analyzer и т.н.
  • Актуализация описание на API.
  • Амалгамация на изходния код за улеснение на вграждането.
  • Поддръжка на CMake.
  • Поддръжка на вложени транзакции.
  • Използване на bootid за определяне на факта на перезареждане на ОС (мръсно спиране на БД).
  • Цялостно преброяване на обновените/стари страници и разширена информация за транзакции.
  • Опция MDBX_ACCEDE за свързване с вече отворена БД в съвместим режим.
  • Използването OFD-блокировици при тяхната наличност.
  • Горещо резервно копие в pipe.
  • Специализиран оптимизиран алгоритъм за вътрешно сортиране (до 2-3 пъти по-бързо от qsort() и до 30% по-бързо от std::sort()).
  • Увеличена максимална дължина на ключа.
  • Автоматично управление на read ahead (стратегия за кеширане на файла на БД в паметта).
  • По-агресивна и бърза авто-компактификация.
  • По-оптимизирана стратегия за сливане на страници в B+ дърво.
  • Контрол на не-местни файлови системи (NFS, Samba и т.н.) за предотвратяване на повреда на БД при неправилна употреба.
  • Разширен набор от тестове.

Разработката на 'следващата' версия на libmdbx ще продължи в рамките на отделен проект MithrilDB, докато векторът на разработка на 'текущата' версия на MDBX е насочен към замразяване на набор от възможности и стабилизация. Това решение е направено по три причини:

  • Пълна несъвместимост: за реализация на всички планирани функции в MithrilDB е необходим друг (несъвместим) формат на файловете на БД и друго (несъвместимо) API.
  • Нов изходен код: за изходния код на MithrilDB е осигурена лицензионна независимост от LMDB, а самият проект е планиран да бъде публикуван под друга лицензия (одобрена от OSI лицензия Apache 2.0, а не OpenLDAP Foundation).
  • Разделението позволява да се избегне потенциална обърканост, да се вкара повече яснота и да се осигури независимост на пътя на развитие на проектите.

MithrilDB, както и MDBX, също се основава на B+ дърво и също така ще бъде изключително бърз, докато елиминира редица принципни недостатъци на MDBX и LMDB. По-специално, ще бъде премахнат проблемът с 'дългите четения', проявяващ се като 'подуване' на БД поради това, че обработката на боклука се блокира от дълги четящи транзакции. Сред новите възможности на MithrilDB следва да се отбележи:

  • поддръжка на разполагане на БД на множество хетерогенни носители: HDD, SSD и енергонезависима памет.
  • оптимални стратегии за „ценни“ и „маловажни“, за „горещи“, „топли“ и „студени“ данни.
  • използване на Merkle tree за контрол на целостта на БД.
  • по избор използване на WAL и значително по-висока производителност в сценарии с интензивно записване и гаранции за целостта на данните.
  • лениво прехвърляне на данни на дискове.

Източник: linux.org.ru

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