经过五年的开发,第二个 libmdbx 1.0 候选版本已经发布

可得到 для тестирования второй кандидат в релизы библиотеки 库数据库 с реализацией высокопроизводительной, компактной встраиваемой базой данных класса ключ-значение. Текущая версия (0.5) является техническим релизом, отмечает завершение каких-либо доработок и переход к фазе публичного финального тестирования и стабилизации, с последующем формированием первого полноценного релиза библиотеки. Код libmdbx 分发者 под лицензией OpenLDAP Public License.

Библиотека MDBX является существенно переработанным ответвлением от LM数据库 — 基于“键值”类的事务嵌入式 DBMS 树B+主动记录, которая позволяет многопоточным процессам конкурентно и эффективно работать с локально-разделяемой (не сетевой) БД. В свою очередь MDBX быстрее и надёжнее LMDB, и при этом сохраняет все ключевые возможности своего прародителя, такие как и неблокирующее чтение с линейным масштабированием по ядрам CPU.

MDBX 和 LMDB 之间最重要的区别:

  • 从根本上来说,更加关注代码质量、测试和自动检查。
  • 从检查参数到数据库结构的内部审计,操作过程中的控制能力显着增强。
  • 自动压缩和自动数据库大小管理。
  • 适用于 32 位和 64 位程序集的单一数据库格式。
  • 按范围估计样本量(范围查询估计)。
  • 支持两倍于煎饼大小的键和用户可选择的数据库页面大小。

Выпущенный кандидат в релизы 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 用于以兼容模式连接到已打开的数据库。
  • 使用 OFD阻塞 有空的时候。
  • 管道热备份。
  • Специализированный оптимизированный алгоритм внутренней сортировки (до 2-3 раз быстрее «qsort()» и до 30% быстрее «std::sort()»).
  • 最大密钥长度已增加。
  • 自动控制预读(数据库文件在内存中的缓存策略)。
  • 更积极、更快的自动压缩。
  • 一种更优化的B+树页面合并策略。
  • Контроль нелокальных файловых систем (NFS, Samba и т.п.) для предотвращения повреждения БД при неверном использовании.
  • 测试集已扩大。

libmdbx 的“下一个”版本的开发将作为一个单独的项目继续进行 秘银数据库,而MDBX“当前”版本的开发向量旨在冻结功能集并使其稳定。 做出这个决定是出于三个原因:

  • 完全不兼容:MithrilDB 需要不同的(不兼容的)数据库文件格式和不同的(不兼容的)API 来实现所有计划的功能。
  • 新源代码:MithrilDB 源代码已获得独立于 LMDB 的许可,并且项目本身计划在不同的许可下发布(由 OSI лицензией Apache 2.0, а не OpenLDAP 公共许可证).
  • Разделение позволяет избежать потенциальную путаницу, внести больше определённости и обеспечить независимость пути развития проектов.

MithrilDB 与 MDBX 一样,也基于 树B+ 并且还将具有极高的性能,同时消除 MDBX 和 LMDB 的许多基本缺点。 特别是“长读”问题,即由于垃圾处理被长读事务阻塞而表现为数据库“膨胀”的问题将被消除。 MithrilDB 的新功能包括:

  • Поддержка размещения БД на нескольких разнородных носителях: HDD, SSD и энергонезависимой памяти.
  • Оптимальные стратегии для «ценных» и «малоценных», для «горячих», «теплых» и «холодных» данных.
  • Использование Merkle tree для контроля целостности БД.
  • Опциональное использование WAL и существенно более высокая производительно в сценариях с интенсивной записью и гарантиями на целостность данных.
  • Ленивая догоняющая фиксация данных на дисках.

来源: opennet.ru

添加评论