за тестване на втората кандидатна версия на библиотеката с реализация на високопроизводителна, компактна вградена база данни клас ключ-стойност. Текущата версия (0.5) е технически релиз, който отбелязва завършване на всякакви подобрения и преминаване към фаза на публично финално тестване и стабилизиране, с последващо формиране на първия напълно функционален релиз на библиотеката. Кодът 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
