26个版本 (14个重大更新)

0.24.0 2022年8月25日
0.23.1 2022年2月9日
0.22.0 2020年9月8日
0.20.2 2020年3月6日
0.4.0 2018年3月6日

#77数据库实现

Download history 1697/week @ 2024-03-13 1576/week @ 2024-03-20 820/week @ 2024-03-27 1780/week @ 2024-04-03 1142/week @ 2024-04-10 1319/week @ 2024-04-17 1563/week @ 2024-04-24 1215/week @ 2024-05-01 1517/week @ 2024-05-08 1935/week @ 2024-05-15 1605/week @ 2024-05-22 1135/week @ 2024-05-29 1373/week @ 2024-06-05 1504/week @ 2024-06-12 1443/week @ 2024-06-19 807/week @ 2024-06-26

每月5,343次下载
9 个crate中(8个直接) 使用

ISC许可证

43KB
1K SLoC

kv

基于 sled 的Rust嵌入式键值存储

  • 易于配置
  • 整数键
  • Serde集成

注意:版本 kv 0.20 及以上已经完全重写,使用 sled 而不是 LMDB。在此过程中,整个API已经重新设计并显著简化。如果您仍然需要使用LMDB或不喜欢新界面,那么您可能想看看 rkv

可选功能

  • msgpack-value
    • 使用 rmp-serde 进行MessagePack编码
  • json-value
    • 使用 serde_json 进行JSON编码
  • bincode-value
    • 使用 bincode 进行bincode编码
  • lexpr-value
    • 使用 serde-lexpr 进行S表达式编码

文档

请参阅 https://docs.rs/kv


lib.rs:

kv 是将键值存储嵌入Rust应用程序的简单方法。它使用 sled 构建,旨在尽可能轻量级,同时提供良好的高级接口。

入门

use kv::*;

#[derive(serde::Serialize, serde::Deserialize, PartialEq)]
struct SomeType {
    a: i32,
    b: i32
}

fn run() -> Result<(), Error> {
    // Configure the database
    let mut cfg = Config::new("./test/example1");

    // Open the key/value store
    let store = Store::new(cfg)?;

    // A Bucket provides typed access to a section of the key/value store
    let test = store.bucket::<Raw, Raw>(Some("test"))?;

    let key = Raw::from(b"test");
    let value = Raw::from(b"123");

    // Set test = 123
    test.set(&key, &value)?;
    assert!(test.get(&key).unwrap().unwrap() == value);
    assert!(test.get(&b"something else".into()).unwrap() == None);

    // Integer keys
    let aaa = store.bucket::<Integer, String>(Some("aaa"))?;
    let key = Integer::from(1);
    let value = String::from("Testing");
    aaa.set(&key, &value);

    #[cfg(feature = "json-value")]
    {
        // Using a Json encoded type is easy, thanks to Serde
        let bucket = store.bucket::<&str, Json<SomeType>>(None)?;

        let k = "example";
        let x = Json(SomeType {a: 1, b: 2});
        bucket.set(&k, &x)?;

        let x: Json<SomeType> = bucket.get(&k)?.unwrap();

        for item in bucket.iter() {
            let item = item?;
            let key: String = item.key()?;
            let value = item.value::<Json<SomeType>>()?;
            println!("key: {}, value: {}", key, value);
        }

        // A transaction
        bucket.transaction(|txn| {
            txn.set(&"x", &Json(SomeType {a: 1, b: 2}))?;
            txn.set(&"y", &Json(SomeType {a: 3, b: 4}))?;
            txn.set(&"z", &Json(SomeType {a: 5, b: 6}))?;

            Ok(())
        })?;
    }
    Ok(())
}
#

依赖项

~1.9–3.5MB
~66K SLoC