12 个不稳定版本 (3 个破坏性更新)

0.3.1 2023年11月25日
0.3.0 2023年11月24日
0.2.0 2023年11月23日
0.1.0 2023年11月23日
0.0.8 2023年11月23日

#1921 in 数据库接口

MIT/Apache

69KB
1.5K SLoC

OKV - 好用的键值存储

docs.rs Crates.io Crates.io

OKV 是一个为 Rust 设计的通用键值存储库。它提供了一个简单而强大的 API,灵感来自 heed 包,并支持多种数据库和序列化格式。

特性

  • 多种数据库后端:
    • memdb:内存数据库,用于快速原型设计和测试。
    • rocksdb:与 RocksDB 集成,提供健壮的基于磁盘的存储。
  • 序列化格式:
    • serde_json:JSON 序列化,适用于人类可读的数据存储。
    • rmp-serde:MessagePack 序列化,适用于高效的二进制格式。

安装

将 OKV 添加到您的项目中

cargo add okv

快速入门

use okv::{Env};
use okv::backend::memory::MemDB;

fn main() -> eyre::Result<()> {
    // initialize the storage backend
    let memdb = MemDB::new();
    let env = Env::new(memdb);

    // open a database with the specified key and value types
    let db = env.open::<&str, &str>("my_database")?;

    // Working with data
    db.set_nx("key", "val")?;
    assert_eq!(db.get("key")?, Some("val".to_string()));

    Ok(())
}

支持的类型

OKV 可以与任何实现 Serialize 接口的自定义类型一起使用。此外,它还支持以下类型,无需任何序列化开销:

  • 整数类型:[u8], [u16], [u32], [u64], u128, [i8], [i16], [i32], [i64], i128
  • 基本类型:(), &str, String, bool
  • 二进制数据:u8 切片 (&[u8]), 字节向量 (Vec<u8>), 和字节数组 ([u8; N])

鸣谢

特别感谢heed crate的作者们,他们的启发工作对OKV的开发产生了重大影响。

许可证

您可以选择在Apache License, Version 2.0MIT许可证下使用。

除非您明确表示,否则根据Apache-2.0许可证定义的,您有意提交给OKV的任何贡献,将按上述方式双许可,不附加任何额外的条款或条件。

依赖关系

~0.4–10MB
~102K SLoC