Библиотека 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
