redb - 嵌入式数据库
简单、便携、高性能、ACID、嵌入式键值存储。
redb 是用纯 Rust 编写的,并受到 lmdb 的启发。
零拷贝、线程安全、基于 APIBTreeMap
完全符合 ACID 的事务
MVCC 支持并发读写器,无阻塞
默认情况下是安全的
在许多基准测试中,redb几乎与lmdb一样快,并且比sled更快
+--------------------+--------------+------------+--------+---------+| | redb (1PC+C) | redb (2PC) | lmdb | sled |+===================================================================+| bulk load | 1770ms | 1370ms | 976ms | 4534ms ||--------------------+--------------+------------+--------+---------|| individual writes | 227ms | 381ms | 388ms | 642ms ||--------------------+--------------+------------+--------+---------|| batch writes | 2346ms | 2533ms | 2136ms | 1395ms ||--------------------+--------------+------------+--------+---------|| large writes | 8805ms | 6532ms | 7793ms | 37736ms ||--------------------+--------------+------------+--------+---------|| random reads | 734ms | 734ms | 642ms | 1514ms ||--------------------+--------------+------------+--------+---------|| random range reads | 832ms | 834ms | 712ms | 1826ms ||--------------------+--------------+------------+--------+---------|| removals | 1281ms | 1149ms | 676ms | 1792ms |+--------------------+--------------+------------+--------+---------+
例子:
use redb::{Database, Error, ReadableTable, TableDefinition};const TABLE: TableDefinition<str, u64> = TableDefinition::new("my_data");fn main() -> Result<(), Error> { let db = unsafe { Database::create("my_db.redb", 1024 * 1024)? }; 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(), 123); Ok(())
}
ReadMore:https://github.com/cberner/redb
chrono 有了新的维护者
0.4.20 是自 2020 年 9 月以来的第一个 chrono 版本。由于之前的维护者不再能够在 crate 上花费太多时间,因此中断了很长时间;感谢@quodlibetor 多年来对 chrono crate 的管理!新的维护者是@djc 和@esheppa。
ReadMore:https://github.com/chronotope/chrono/releases/tag/v0.4.20-rc.1
From 日报小组 冰山上的 mook && Mike
社区学习交流平台订阅:
Rustcc论坛: 支持rss
微信公众号:Rust语言中文社区