1个不稳定版本
0.1.1 | 2021年4月24日 |
---|---|
0.1.0 |
|
2550 在 数据库接口 中
77KB
1.5K SLoC
达摩DB
达摩DB是用Rust编写的持久、容错的键值存储。
设置
只需创建一个Dharma
实例,即可启动键值存储。
use dharmadb::dharma::Dharma;
use dharmadb::errors::Errors;
use dharmadb::options::DharmaOpts;
// configure options such as database persistence path
// or block size using DharmaOpts or use the defaults
let options = DharmaOpts::default();
let db_result: Result<Dharma, Errors> = Dharma::new(options);
// start using database
let db = db_result.unwrap();
操作
达摩DB支持原生Rust API,并支持键值存储的常见操作。
该API允许您使用Dharma<K, V>
接口存储泛型键值对。
put
put操作用于将键关联的值持久化到存储中。
use dharmadb::dharma::Dharma;
use dharmadb::errors::Errors;
use dharmadb::options::DharmaOpts;
let options = DharmaOpts::default();
let db_result: Result<Dharma<MyKey, MyValue>, Errors> = Dharma::new(options);
// persist key / value pair
let put_result = db.put(my_key, my_value);
get
get操作用于检索与键关联的值(如果存在)。
use dharmadb::dharma::Dharma;
use dharmadb::errors::Errors;
use dharmadb::options::DharmaOpts;
let options = DharmaOpts::default();
let db_result: Result<Dharma<MyKey, MyValue>, Errors> = Dharma::new(options);
// get the key if it exists
let get_result = db.get(&my_key);
let maybe_value: Option<MyValue> = get_result.unwrap();
delete
delete操作断开提供的键的值。检索已删除的键将解析为None
。
use dharmadb::dharma::Dharma;
use dharmadb::errors::Errors;
use dharmadb::options::DharmaOpts;c
let options = DharmaOpts::default();
let db_result: Result<Dharma<MyKey, MyValue>, Errors> = Dharma::new(options);
// ... store data
// delete a key from the store
let delete_result = db.delete(&my_key);
recover
在意外崩溃的情况下需要恢复操作。通常,Dharma
将检测非优雅退出并建议在启动时运行恢复。
use dharmadb::dharma::Dharma;
use dharmadb::errors::Errors;
use dharmadb::options::DharmaOpts;
let options = DharmaOpts::default();
// try recovering data after non-graceful shutdown by calling recover
let recovered_db_result = Dharma::<MyKey, MyValue>::recover(options);
特性
- 存储任意键值对。
- 数据按键排序,以确保快速读取。
- 使用泛型接口存储自定义数据类型。
- 可以通过为您的数据类型实现
Ord
特质来配置数据的排序顺序。 - 具有故障恢复选项的容错存储。
达摩DB不提供客户端-服务器通信。应用程序可以将达摩DB包装在服务器中,以启用API访问。
性能
基准测试仍然处于非常初级的阶段。已在benches
目录中添加了对get
和put
操作的基准测试。基准测试在具有以下配置的macbook上执行。
以下是对结果进行了总结。
Model Name: MacBook Air
Model Identifier: MacBookAir10,1
Chip: Apple M1
Total Number of Cores: 8 (4 performance and 4 efficiency)
Memory: 8 GB
使用Criterion.rs包生成性能数据。
通过在数据库中填充一千个初始值并将其刷新到磁盘以强制创建sstable来评估性能。在benches
文件夹中的基准测试脚本在此数据库上执行。
put operation time: 70.656 ms per operation
get operation time: 17.570 us per operation
贡献
欢迎为DharmaDB做出贡献。对于更复杂的PR,请提出一个问题,概述问题/增强功能以及您打算如何解决它。所有PR都应附带测试。docs文件夹包含了一系列文件,详细说明了DharmaDB的内部工作原理。tests
文件夹也揭示了数据库的许多内部工作原理。您可以先从阅读DharmaDB设计开始。
依赖项
~1–1.7MB
~37K SLoC