这款纯Rust编写的数据库redb能火么?

前有科技后进阶 2024-04-14 02:53:25

大家好,很高兴又见面了,我是"高级前端‬进阶‬",由我带着大家一起关注前端前沿、深入前端底层技术,大家一起进步,也欢迎大家关注、点赞、收藏、转发,您的支持是我不断创作的动力。

什么是 redb

redb 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、是一个值得关注的开源项目。

如何使用 redb

redb 使用起来非常简单,比如下面的例子:

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/

0 阅读:112

前有科技后进阶

简介:感谢大家的关注