за тестване на втория кандидат за издания на библиотеката с реализация на високопроизводителна, компактна вградена база данни тип ключ-стойност. Настоящата версия (0.5) е техническо издание, отбелязващо приключването на всякакви доработки и прехода към фазата на публично финално тестване и стабилизация, с последващо формиране на първото пълноценнo издание на библиотеката. Код libmdbx под лицензия OpenLDAP Public License.
Библиотеката MDBX е значително преработено отклонение от — транзакционна вградена СУБД от клас 'ключ-стойност', основана на без , което позволява на многопоточни процеси да работят конкурентно и ефективно с локално споделена (не мрежова) БД. От своя страна MDBX е по-бърз и по-надежден от LMDB, като същевременно запазва всички ключови възможности на своя предшественик, като и неблокирано четене с линейно мащабиране на ядрото на CPU.
Най-важните отличия на MDBX спрямо LMDB:
- Съществено повече внимание се обръща на качеството на кода, тестването и автоматичните проверки.
- Съществено повече контрол по време на работа, от проверка на параметрите до вътрешен одит на структурите на базата данни.
- Авто-компактиране и автоматично управление на размера на базата данни.
- Единен формат на базата данни за 32-битови и 64-битови версии.
- Оценка на обема на проби по диапазони (range query estimation).
- Поддръжка на ключове с два пъти по-голям размер и потребителски избираем размер на страницата на БД.
Издаденият кандидат за издания libmdbx е резултат от взетото през август 2019 решение за разделяне на проектите MDBX и MithrilDB. В libmdbx бе решено да се премахне (рационално) максималното техническо задължение и да се стабилизира библиотеката. Всъщност в обозначената посока е свършено в 2-3 пъти повече, отколкото е оценявано и планирано първоначално:
- Реализирана е поддръжка за macOS и платформи от „второ ниво”: FreeBSD, Solaris, DragonFly BSD, OpenBSD, NetBSD. Поддръжка за AIX и HP-UX може да бъде добавена при необходимост.
- Проведена е санация на кода с Undefined Behavior Sanitizer и Address Sanitizer, премахнати са всички предупреждения при компилация с „-Wpedantic”, всички предупреждения от Coverity Static Analyzer и т.н.
- Актуализация .
- Сливане (амалгамация) на изходния код за удобство на вграждането.
- Поддръжка на CMake.
- Поддръжка на вложени транзакции.
- Използване на bootid за определяне на факта за рестартиране на ОС (мръсно спиране на БД).
- Цялостен брояч на обновени/стари страници и разширена информация за транзакции.
- Опция MDBX_ACCEDE за свързване с вече отворена БД в съвместим режим.
- Използване при тяхната наличност.
- Горещо резервно копиране в pipe.
- Специализиран оптимизиран алгоритъм за вътрешно сортиране (до 2-3 пъти по-бърз от „qsort()” и до 30% по-бърз от „std::sort()”).
- Увеличена е максималната дължина на ключа.
- Автоматизирано управление read ahead (стратегия за кеширане на файловата база данни в паметта).
- По-агресивна и бърза авто-компактификация.
- По-оптимална стратегия за сливане на страниците в B+ дървото.
- Контрол на нелокални файлови системи (NFS, Samba и др.) за предотвратяване на повреда на базата данни при неправилна употреба.
- Разширен набор от тестове.
Разработката на 'следващата' версия на libmdbx ще продължи в рамките на отделен проект. , докато векторът на разработка на 'текущата' версия MDBX е насочен към замразяване на набор от възможности и стабилизация. Този подход е приет по три причини:
- Пълна несъвместимост: за реализиране на всички планирани възможности в MithrilDB е необходим друг (несъвместим) формат на файловете на базата данни и друго (несъвместимо) API.
- Новият изходен код: за изходния код на MithrilDB е осигурена лицензионна независимост от LMDB, а проектът се планира да бъде публикуван под друга лицензия (одобрена лицензия Apache 2.0, а не ).
- Разделянето позволява да се избегне потенциална объркване, да се внесе повече яснота и да се осигури независимост на развитието на проектите.
MithrilDB, както и MDBX, също е основан на Ще се отличава с изключително висока производителност, като същевременно елиминира редица съществени недостатъци на MDBX и LMDB. В частност, ще бъде ликвидирана проблемът с 'дългите четения', проявяващ се като 'подуване' на базата данни, поради блокиране на обработката на боклука от дългосрочни четящи транзакции. Сред новите възможности на MithrilDB се открояват:
- Поддръжка на разположение на базата данни на няколко различни носителя: HDD, SSD и енергонезависима памет.
- Оптимални стратегии за 'ценни' и 'маловажни', за 'горещи', 'топли' и 'студени' данни.
- Използване на Merkle tree за контрол на целостта на базата данни.
- Опционално използване на WAL и значително по-висока производителност в сценарии с интензивно записване и гаранции за целостта на данните.
- Ленива догонваща фиксация на данните на дисковете.
Източник: opennet.ru
