#key-value-store #concurrency

faster_kvs

微软研究院FASTER的Rust包装器

1 个不稳定版本

0.1.0 2019年2月28日

#39 in #concurrent

MIT 许可证

1.5MB
32K SLoC

C# 27K SLoC // 0.2% comments C++ 4K SLoC // 0.1% comments Rust 294 SLoC // 0.0% comments Visual Studio Solution 277 SLoC Visual Studio Project 169 SLoC

实验性的FASTER Rust包装器

包括实验性的FASTER C接口。它目前假设KEY,VALUE类型为u64。此包装器仅关注Linux支持。

在开始使用此包装器之前,确保您能编译C++版本可能是一个好主意。

以下是某些示例操作。

extern crate faster_kvs;

use faster_kvs::*;

const TABLE_SIZE: u64  = 1 << 14;
const LOG_SIZE: u64 = 17179869184;

fn main() {
  if let Ok(store) = FasterKv::new(TABLE_SIZE, LOG_SIZE, String::from("storage_dir")) {
    let key: u64 = 1;
    let value: u64 = 1000;

    // Upsert
    store.upsert(key, value);


    // Read-Modify-Write
    let incr: u64 = 50;
    let rmw = store.rmw(key, incr);
    assert_eq!(rmw, status::OK);


    // Read
    let (status, recv) = store.read(key);
    assert_eq!(read, status::OK);
    assert_eq!(recv.recv().unwrap(), value);

    let bad_key: u64 = 2;
    let bad_read = store.read(bad_key);
    assert_eq!(bad_read, status::NOT_FOUND);
  }
}

需要修复的问题

  • 修复以便您可以从读取操作中返回值
  • 尝试使用#repr(C)结构体而不是u64作为值
  • 研究线程和Rust中的异步回调
  • 完成C接口中其余的操作
  • 与C++版本比较性能

依赖项

~0–2MB
~39K SLoC