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
- 已删除多个已弃用的项
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 数据库。
- 为
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