ProHoster > Блог > ozi ịntanetị > Mgbe afọ ise nke mmepe gasịrị, ebipụtala onye ntọhapụ libmdbx 1.0 nke abụọ
Mgbe afọ ise nke mmepe gasịrị, ebipụtala onye ntọhapụ libmdbx 1.0 nke abụọ
Dị для тестирования второй кандидат в релизы библиотеки libmdbx с реализацией высокопроизводительной, компактной встраиваемой базой данных класса ключ-значение. Текущая версия (0.5) является техническим релизом, отмечает завершение каких-либо доработок и переход к фазе публичного финального тестирования и стабилизации, с последующем формированием первого полноценного релиза библиотеки. Код libmdbx kesara site под лицензией OpenLDAP Public License.
Библиотека MDBX является существенно переработанным ответвлением от LMDB — транзакционной встраиваемой СУБД класса «ключ-значение» на основе дерева B+ enweghị упреждающей журнализации, которая позволяет многопоточным процессам конкурентно и эффективно работать с локально-разделяемой (не сетевой) БД. В свою очередь MDBX быстрее и надёжнее LMDB, и при этом сохраняет все ключевые возможности своего прародителя, такие как Acid и неблокирующее чтение с линейным масштабированием по ядрам 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, а сам проект планируется опубликовать под другой лицензией (одобренной MA Ọ B IF Ọ B .R. лицензией Apache 2.0, а не OpenLDAP Public License).
Разделение позволяет избежать потенциальную путаницу, внести больше определённости и обеспечить независимость пути развития проектов.
MithrilDB как и MDBX, также основывается на дереве B+ и также будет отличатся предельно высокой производительностью, при этом устраняя ряд принципиальных недостатков MDBX и LMDB. В частности, будет ликвидирована проблема «долгих чтений», проявляющаяся как «распухание» БД из-за того, что переработка мусора блокируется долгим читающими транзакциями. Среди новых возможностей MithrilDB следует отметить:
Поддержка размещения БД на нескольких разнородных носителях: HDD, SSD и энергонезависимой памяти.
Оптимальные стратегии для «ценных» и «малоценных», для «горячих», «теплых» и «холодных» данных.
Использование Merkle tree для контроля целостности БД.
Опциональное использование WAL и существенно более высокая производительно в сценариях с интенсивной записью и гарантиями на целостность данных.