33个版本 (16个破坏性更新)
| 0.16.0 | 2023年3月20日 |
|---|---|
| 0.14.1 | 2023年3月16日 |
| 0.8.2 | 2022年7月27日 |
#1158 在 数据库接口
每月132 次下载
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约束 - 已将
nosync、mapasync、nordahead以及相应的getter方法添加到EnvBuilder中,以允许更好地配置环境 - 一些性能改进
- 通过在每个
DbBackend中存储环境的唯一标识符来避免不必要的Weak升级 - 使用
Relaxed加载和存储将互斥锁CursorBackend::closed替换为AtomicBool,以提高性能(free/malloc执行必要的同步)
- 通过在每个
- 一些文档改进
- 基准测试中的代码清理以及更改了一些基准测试设置
- 记录了 unsafe
- 2023-03-17: 版本 0.15.0
- 已删除多个已弃用的项
DbOptionsEnv::open_dbsEnvRw::create_dbsEnvRef::open_or_create_dbsTxn::cursor_search_key_get_key
EnvRw::drop_db需要&mut selfEnv::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 数据库。
- 为
EnvRo、EnvRw、Db和Cursor添加了对Send和Sync的缺失实现。 - 弃用
- 文档中已添加警告,指出
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