#key-value-database #key-value #database #嵌入式 #默认

readb

一个简单、高效、模块化的嵌入式先读后写键值数据库,使用Rust编写

3个不稳定版本

0.4.1 2023年9月5日
0.4.0 2023年9月5日
0.3.0 2023年8月14日

#184数据库实现

每月42次下载

Apache-2.0

185KB
1K SLoC

📚 Readatabase (readb)

crates.io Rust CI

🚨 更新警报:0.4.0版本中存在重大更改

  • 🛠 重新整理了数据库代码结构。现在您必须使用 use readb::Database;
  • ✅ 构造函数不再需要 unwrap()。为了向后兼容,仍保留一个 .unwrap() 方法。
    • 🔁 相反,我们在 DatabaseSettings 中引入了 create_path 属性。如果您不使用 Default,这可能会造成破坏性更改。

🔍 "不要重复造轮子。" 尽管有这个智慧,但在这里我们有 readb:一个全新、精简的嵌入式键值数据库,完全使用Rust编写。

readb类似于sled,以简洁著称,具有出色的读取性能。它主要关注读取,同时也支持写入和删除。它轻量级,依赖性最小,大小不到200KB。

🌟 特性

  • 自定义缓存:从一系列缓存策略中选择(一些仍在开发中)。
  • 无锁读取:优化并发访问。
  • 远程克隆:轻松同步数据。
  • 事务:安全和高效的数据修改。

🚀 readb的速度秘诀

readb以读取为中心。假设数据大部分是静态的,我们通过有效地利用磁盘和内存,在内存效率与速度之间取得平衡。

数据管理包括

  • 链接:关联而不重复。
  • 插入:线性追加数据,快速访问。

readb的线性方法与众不同,确保快速操作。

🎯 理想用户?

如果您主要处理读取请求,并渴望一个快速、高效的本地解决方案,readb就在那里等待。虽然它在写入速度上表现优异,但在压缩方面有一些妥协。

📊 基准测试

写入基准:

操作 readb 最大时间 sled 最大时间
1,000 147.02 µs 332.65 µs
1,000,000 238.48 ms 485.63 ms

读取基准:

基准类型 读取时间 sled 时间 读取时间
检索1000个项目 50.30 79.25 97.95
检索1000个项目(10%) 49.05 17.84 22.39
检索1000个项目(20%带重复) 49.16 33.92 43.17
检索10000个项目 67.56 1,256.75 1,225.68
检索10000个项目(10%) 55.29 311.57 357.98
检索10000个项目(20%带重复) 61.13 541.79 692.16
检索100000个项目 209.59 36,977 52,558
检索100000个项目(10%) 86.25 3,465.1 5,090.9
检索100000个项目(20%带重复) 124.29 6,831.8 10,151

视觉graph

🛠 开始使用

1. 数据库设置

Database 结构体管理索引、缓存和数据加载,需要两个泛型

  • C:缓存机制(实现 Cache 特性)。
  • L:数据加载器(实现 Loader 特性)。

2. 操作

从获取键到维护数据一致性,我们都有相应的解决方案。

3. 高级特性

从数据写入到高效的垃圾回收,提升您的数据库性能。

📦 1.0版本路线图

随着API的稳定,我们的重点转向优化缓存和增强文档。随着我们向1.0版本迈进,向后兼容性仍然至关重要。

📝 许可证

根据Apache许可证版本2.0授权。查看NOTICE文件以获取更多详细信息。

依赖项

~0.5–13MB
~197K SLoC