ПроХостер > блог > интернет вести > После пет година развоја, објављен је други кандидат за издање либмдбк 1.0
После пет година развоја, објављен је други кандидат за издање либмдбк 1.0
Доступан для тестирования второй кандидат в релизы библиотеки либмдбк с реализацией высокопроизводительной, компактной встраиваемой базой данных класса ключ-значение. Текущая версия (0.5) является техническим релизом, отмечает завершение каких-либо доработок и переход к фазе публичного финального тестирования и стабилизации, с последующем формированием первого полноценного релиза библиотеки. Код libmdbx дистрибуира под лицензией OpenLDAP Public License.
Библиотека MDBX является существенно переработанным ответвлением от ЛМДБ — транзакционной встраиваемой СУБД класса «ключ-значение» на основе дерева B+ без упреждающей журнализации, которая позволяет многопоточным процессам конкурентно и эффективно работать с локально-разделяемой (не сетевой) БД. В свою очередь 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 и т.д.
Специализированный оптимизированный алгоритм внутренней сортировки (до 2-3 раз быстрее «qsort()» и до 30% быстрее «std::sort()»).
Увеличена максимальная длина ключа.
Автоматическое управление read ahead (стратегией кэширования файла БД в памяти).
Более агрессивная и быстрая авто-компактификация.
Более оптимальная стратегия слияния страниц B+ дерева.
Контроль нелокальных файловых систем (NFS, Samba и т.п.) для предотвращения повреждения БД при неверном использовании.
Расширен набор тестов.
Разработка «следующей» версии libmdbx будет продолжена в рамках отдельного проекта MithrilDB, в том время как вектор разработки «текущей» версии MDBX направлен на заморозку набора возможностей и стабилизацию. Такое решение принято по трём причинам:
Полная несовместимость: для реализации всех запланированных возможностей в MithrilDB требуется другой (несовместимый) формат файлов БД и другое (несовместимое) API.
Новый исходный код: для исходного кода MithrilDB обеспечена лицензионная независимость от LMDB, а сам проект планируется опубликовать под другой лицензией (одобренной ОСИ лицензией Apache 2.0, а не OpenLDAP Public License).
Разделение позволяет избежать потенциальную путаницу, внести больше определённости и обеспечить независимость пути развития проектов.
MithrilDB как и MDBX, также основывается на дереве B+ и также будет отличатся предельно высокой производительностью, при этом устраняя ряд принципиальных недостатков MDBX и LMDB. В частности, будет ликвидирована проблема «долгих чтений», проявляющаяся как «распухание» БД из-за того, что переработка мусора блокируется долгим читающими транзакциями. Среди новых возможностей MithrilDB следует отметить:
Поддержка размещения БД на нескольких разнородных носителях: HDD, SSD и энергонезависимой памяти.
Оптимальные стратегии для «ценных» и «малоценных», для «горячих», «теплых» и «холодных» данных.
Использование Merkle tree для контроля целостности БД.
Опциональное использование WAL и существенно более высокая производительно в сценариях с интенсивной записью и гарантиями на целостность данных.