1个不稳定版本

0.1.1 2021年4月24日
0.1.0 2021年4月19日

2550数据库接口

MIT 协议

77KB
1.5K SLoC

达摩DB

达摩DB是用Rust编写的持久、容错的键值存储。

Build License: MIT

设置

只需创建一个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目录中添加了对getput操作的基准测试。基准测试在具有以下配置的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