大家好,很高兴又见面了,我是"高级前端进阶",由我带着大家一起关注前端前沿、深入前端底层技术,大家一起进步,也欢迎大家关注、点赞、收藏、转发,您的支持是我不断创作的动力。
什么是 redbredb is a simple, portable, high-performance, ACID, embedded key-value store.
redb 是一个简单、可移植、高性能、ACID、嵌入式键值存储, redb 是用纯 Rust 编写的,受到 lmdb 的很多启发,数据存储在写时复制 B 树的集合中。
redb 具有以下特征:
零拷贝、线程安全、基于 BTreeMap 的 API完全符合 ACID 的事务MVCC 支持并发读取器和写入器,无阻塞:其在写时复制 b 树数据结构之上实现。 读事务创建 B 树根的私有副本,并在数据库中注册,以便不会释放根引用的页面。 当写事务释放页面时,其会被推入队列,并且只有在所有可以引用该页面的读事务完成后才能重新使用。默认情况下是安全的支持保存点和回滚:在相同的 MVCC 结构上实现,创建保存点时会注册为读取事务以保留数据库的快照值得注意的是,redb 目前正在积极开发中,还处于 beta 阶段 ,文件格式稳定,但 redb 尚未在生产环境中广泛部署。
redb 与其他顶级嵌入式键值存储数据库,例如: lmdb 和 Rocksdb 等都具有相当的性能。
Rocksdb:facebook 开发的一个提供可嵌入、持久键值存储以实现快速存储的库,通过 C++ 编写,有 27.2k 的 star
目前 redb 在 Github 通过 Apache-2.0 协议开源,有超过 2.8k 的 star、是一个值得关注的开源项目。
如何使用 redbredb 使用起来非常简单,比如下面的例子:
use redb::{Database, Error, ReadableTable, TableDefinition};// 导入相应模块const TABLE: TableDefinition<&str, u64> = TableDefinition::new("my_data");fn main() -> Result<(), Error> { let db = Database::create("my_db.redb")?; // 创建一个 DB let write_txn = db.begin_write()?; { let mut table = write_txn.open_table(TABLE)?; table.insert("my_key", &123)?; } // 插入数据 write_txn.commit()?; // 提交内容 let read_txn = db.begin_read()?; let table = read_txn.open_table(TABLE)?; assert_eq!(table.get("my_key")?.unwrap().value(), 123); // 开始读数据 Ok(())}参考资料https://github.com/cberner/redb
https://github.com/cberner/redb/blob/master/docs/design.md
https://github.com/facebook/rocksdb
https://docs.rs/redb/latest/redb/index.html
https://morioh.com/a/c381b8c5497f/high-performance-and-reliable-oracle-database-access-for-rust
https://dbdb.io/db/redb
https://aws.amazon.com/cn/nosql/key-value/