发布 DBMS libmdbx 0.11.7。 在 GitHub 上锁定后将开发转移到 GitFlic

libmdbx 0.11.7 (MDBX) 库发布,实现了高性能紧凑型嵌入式键值数据库。 libmdbx 代码已获得 OpenLDAP 公共许可证的许可。 支持所有当前的操作系统和架构,以及俄罗斯 Elbrus 2000。

该版本值得注意的是,15 年 2022 月 404 日,GitHub 管理部门在没有任何警告或解释的情况下删除了 libmdbx 以及许多其他项目,同时阻止了与受到美国制裁的公司。 从用户的角度来看,项目的所有页面、存储库和分支突然变成了 XNUMX 页面,无法进行任何通信并查找原因。

不幸的是,几乎所有问题,其中有许多问题和详细答案,以及许多讨论,都已丢失。 这些信息的丢失是 GitHub 管理部门对该项目造成的唯一客观损害。 讨论的部分副本仍然可以在 archive.org 上找到。

已建成的 CI 场景和基础设施(可免费用于开源项目)的损失迫使我们进行修订、统一和消除小型技术债务。 现在,除了所有 BSD 和 Solaris 变体的构建和运行测试之外,CI 已恢复到几乎相同的程度。 通常情况下,在采取行动后,GitHub 除了需要付款和尝试注销资金的提醒之外,没有收到任何澄清或通知。

自上次发布 libmdbx v0.11.3 的消息以来,除了从 GitHub 操作恢复之外,还值得注意以下改进和修复:

  • 添加了针对 Linux 内核中组合页面和缓冲区缓存中检测到的不连贯效应/缺陷的解决方法。 在页缓存和缓冲区缓存真正结合的系统中,当写入已映射到内存的文件时,内核没有必要为两个数据副本浪费内存。 因此,在 write() 系统调用完成之前,正在写入的数据通过内存映射变得可见,即使数据尚未写入磁盘。

    一般来说,其他行为是不合理的,因为使用延迟合并,您仍然需要获取页列表的锁、复制数据或调整 PTE。 因此,自 1989 年 SRV4 中出现统一缓冲区高速缓存以来,不言而喻的一致性规则就一直有效。 因此,在加载的 libmdbx 利用场景中检测奇怪的崩溃需要大量工作。 首先重现问题,然后验证假设并测试改进。

    现在我们可以自信地说,尽管再现场景非常复杂和特殊,但问题已经被可靠地识别、定位和消除。 此外,旁路机制的操作得到了 Erigon(以太坊)的一位开发人员的确认;在他的例子中,在调试版本中,由于不必要的断言检查,保护被触发为回归。

    需要注意的是,在 libmdbx 在生产项目中广泛使用的背景下,确保可靠运行根本上比弄清楚它是 bug 还是 feature 以及这种一致性是否可靠更重要,更不用说寻找Linux 内核内部不一致的原因。 因此,我们在这里讨论修复可能影响用户的问题。

  • 通过 API 和 mdbx_copy 实用程序将未压缩的数据库热复制到另一个文件系统时,EXDEV(跨设备链接)错误的回归已被消除。
  • Kris Zyp 在 Deno 中实现了 libmdbx 支持。 Kai Wetlesen 为 Fedora 设计了 ​​RPM 包装。 David Bouyssié 为 Scala 实现了绑定。
  • 修复了在大型数据库中处理大型事务时对 MDBX_opt_rp_augment_limit 选项指定的值的处理。 此前,由于错误,可能会执行不必​​要的操作,这有时会影响以太坊实现(Erigon/Akula/Silkworm)和币安链项目的性能。
  • 许多错误已得到修复,包括 C++ API 中的错误。 修复了罕见和奇异配置中的许多构建问题。 变更日志中提供了所有重大改进的完整列表。
  • 总共对185个文件进行了89​​3300处更改,增加了约4100行,删除了约XNUMX行。 更多内容被删除,主要是因为清理了与 GitHub 和相关服务相关的已经无用的技术文件。

从历史上看,libmdbx 是 LMDB DBMS 的深度改造,在可靠性、功能集和性能方面优于其祖先。 与 LMDB 相比,libmdbx 非常重视代码质量、API 稳定性、测试和自动化检查。 提供了一个实用程序,用于检查数据库结构的完整性,并具有一些恢复功能。

在技​​术方面,libmdbx 提供 ACID、强大的更改序列化和跨 CPU 内核线性扩展的非阻塞读取。 支持自动压缩、自动数据库大小管理和范围查询估计。 自2016年起,该项目得到Positive Technologies的资助,并自2017年起在其产品中使用。

libmdbx 提供了开发的 C++ API,以及爱好者支持的与 Rust、Haskell、Python、NodeJS、Ruby、Go、Nim、Deno、Scala 等语言的绑定。

来源: opennet.ru

添加评论