1 个不稳定版本
0.1.0 | 2019年7月19日 |
---|
#8 in #aio
在 2 个 crate 中使用 (通过 agilulf)
9KB
164 代码行
一个快速且异步的 KV 数据库
使用方法
有关协议的详细信息可以在 协议文档 中找到。
服务器
安装和启动 Agilulf 服务器非常简单。
cargo install agilulf
agilulf_server --help
如果您想启动一个仅内存的服务器(类似于没有持久性的 redis)
agilulf_server --mem --addr <ADDR>
如果您需要一个在磁盘上具有数据持久性的服务器(使用 sstable 和 LSM 树结构。然而,压缩功能尚未实现。因此,在响应大量 PUT 请求后速度会变慢)
agilulf_server --addr <ADDR>
客户端
如果您需要客户端,agilulf_driver 是此协议的异步 Rust 客户端。
将其添加到您的 Cargo.toml
[dependencies]
agilulf_driver = "0.1.0"
现在您可以使用客户端
use agilulf_driver::MultiAgilulfClient;
futures::executor::block_on(async {
let client = MultiAgilulfClient::connect(address, 128).await;
client.put(Slice(b"HELLO".to_vec()), Slice(b"WORLD".to_vec())).await;
})
基准测试
在 agilulf_driver/examples 中提供了一个简单的基准测试,其中的 benchmark.rs
示例将启动一个服务器。然后向该服务器发送请求。
cargo run --example benchmark --release
注意:它将使用 /var/tmp/agilulf
作为其基本目录,因此请确保此目录存在。Agilulf 不会为您创建目录。
另一个选择是 remote_benchmark.rs
cargo run --example remote_benchmark --release -- --addr <ADDR>
您可以自己设置服务器并向该服务器发送请求。默认地址是 "127.0.0.1:3421",这与 Agilulf 服务器默认地址相同。
待办事项
- 文件写入的 AIO
- 等待
crossbeam-skiplist
稳定并迁移到它 - 将 SSTables 压缩到更高层次
- 从冻结日志中恢复数据
- 自动增加 skipmap 的最高级别
lib.rs
:
异步写入文件的抽象层。
Tokio 不支持 rust 中最新的异步/await 语法,这对于这个项目来说难以忍受(因为这个项目是使用异步/await 语法在 rust 中编写项目的实验)。因此,我必须编写一个异步文件 I/O 库。
它的实现是 AIO,因此它只支持 Linux。
依赖项
~5MB
~110K SLoC