33个版本 (16个破坏性更新)

0.16.0 2023年3月20日
0.14.1 2023年3月16日
0.8.2 2022年7月27日

#1158数据库接口

Download history 82/week @ 2024-03-29 35/week @ 2024-04-05

每月132 次下载

MIT 许可证

205KB
3.5K SLoC

mmtkvdb

mmtkvdb 是一个Rust的crate,它提供了一个内存映射的键值数据库。它使用LMDB并与系统上现有的 liblmdb 相连接。

安全性

由于内存映射I/O的使用方式以及底层LMDB API的某些假设,打开环境和数据库需要 unsafe Rust(即程序员必须确保某些先决条件得到满足,这些条件不能由编译器强制执行以避免未定义的行为)。如果您只想使用安全的Rust编程,则此Rust库不适用于您。

API文档

有关如何使用此crate的文档,请参阅 src/lib.rs 中的示例。

许可证

请参阅包含的 LICENSE 文件(MIT许可证)。

更新日志

  • 2023-03-20: 版本 0.16.0
    • 记录了 unsafe Storable 特性中的 Storable::cmp_bytes_unchecked 永远不能展开(因为这可能会使LMDB环境处于无效状态)
    • 由于它不再需要,从 Storable 特性中移除了 ToOwned 约束
    • 已将 nosyncmapasyncnordahead 以及相应的getter方法添加到 EnvBuilder 中,以允许更好地配置环境
    • 一些性能改进
      • 通过在每个 DbBackend 中存储环境的唯一标识符来避免不必要的 Weak 升级
      • 使用 Relaxed 加载和存储将互斥锁 CursorBackend::closed 替换为 AtomicBool,以提高性能(free/malloc 执行必要的同步)
    • 一些文档改进
    • 基准测试中的代码清理以及更改了一些基准测试设置
  • 2023-03-17: 版本 0.15.0
    • 已删除多个已弃用的项
      • DbOptions
      • Env::open_dbs
      • EnvRw::create_dbs
      • EnvRef::open_or_create_dbs
      • Txn::cursor_search_key_get_key
    • EnvRw::drop_db 需要 &mut self
    • Env::clear_stale_readers 返回 std::io::Result<usize>
    • 改进了关于使用 unsafe 的文档
  • 2023-03-16: 版本 0.14.1
    • 修复了关键错误
      • 在同一个进程中打开相同的数据库两次可能会引起未定义行为。这个问题已被修复。
      • 如果在打开过程中发生错误,LMDB 数据库可能会被关闭两次,这可能会在那个情况下引起未定义行为。这个问题已被修复。
      • 方法 Txn::cursor_get_current_value_count 只能对具有 KeysDuplicate 的数据库进行调用。现在通过方法签名强制执行,以前可能会引起未定义行为。
      • EnvRw::drop_db 中的内存泄漏已被修复,代码已被清理和正确地文档化,以避免未来再次发生。
      • 写入事务创建了游标但未写入任何数据,可能会在调用 mdb_dbi_close 之后调用 mdb_cursor_close,而根据 LMDB 的 API 规范,这是不允许的。这个问题已被修复。
    • 在关闭 LMDB 环境之前,现在明确关闭了所有 LMDB 数据库。
    • EnvRoEnvRwDbCursor 添加了对 SendSync 的缺失实现。
    • 弃用
      • 文档中已添加警告,指出 EnvRw::drop_db 在未来将需要 &mut self
      • 弃用了一次打开多个数据库的方法(具有相同的类型)。应使用打开单个数据库的方法。
    • 改进了公共 API 文档中的 "安全性" 部分
    • 关于安全性的代码清理
      • 使用 unsafe_op_in_unsafe_fn 检查和添加相应的 unsafe
      • src/lib.rs 中添加了 SAFETY 注释
      • 将一些私有函数正确标记为 unsafe 并正确地文档化其使用
  • 2023-03-10: 版本 0.14.0
    • TxnRo 现在是 !Sync(但仍为 Send);当需要同步时,用户应使用互斥锁
    • 弃用 Txn::cursor_search_key_get_key
    • 改进了关于游标方法返回值的文档
    • 添加了基准测试

有关更早的更改,请参阅 CHANGELOG.md 文件。

依赖项

~0–1.9MB
~37K SLoC