#file-io #aio #agilulf #linux #abstract #layer #async

nightly agilulf_fs

基于 Linux AIO 的异步文件 I/O 抽象层

1 个不稳定版本

0.1.0 2019年7月19日

#8 in #aio


2 个 crate 中使用 (通过 agilulf)

MIT 许可协议

9KB
164 代码行

Agilulf

一个快速且异步的 KV 数据库

Build Status Crates.io Docs

使用方法

有关协议的详细信息可以在 协议文档 中找到。

服务器

安装和启动 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