2个版本

0.1.5 2024年7月27日
0.1.1 2024年1月7日

195压缩

Download history 131/week @ 2024-07-26 7/week @ 2024-08-02

每月138次下载

MIT/Apache

1MB
1K SLoC

包含 (WOFF字体, 400KB) NanumBarunGothic-0f09457c7a19b7c6.ttf.woff2,(WOFF字体, 135KB) FiraSans-Medium-8f9a781e4970d388.woff2,(WOFF字体, 130KB) FiraSans-Regular-018c141bf0843ffd.woff2,(WOFF字体, 82KB) SourceSerif4-Bold-a2c9cd1067f8b328.ttf.woff2,(WOFF字体, 77KB) SourceSerif4-Regular-46f98efaafac5295.ttf.woff2,(WOFF字体, 45KB) SourceCodePro-It-1cc31594bf4f1f79.ttf.woff2 和更多

roach

Docs.rs Nightly

Rust对象存档:强类型持久化键值存储

roach 是对 redb 的轻量级封装,允许以自定义方式加载和存储强类型数据。它非常适合需要以多种方式(如序列化或压缩格式)持久化存储程序状态或其他数据的程序。以下是一个使用 roach 的简单示例

use roach::*;

// Define an archive type.
struct MyArchive;

// Define a key-value pair which can be stored in the archive.
impl ArchiveType<str> for MyArchive {
    // The keys will be of type string, and will be stored simply by copying the bytes.
    type Key = str;
    // The values will be of type [u8], and will be compressed using zstd before storage.
    type Value = Zstd<[u8]>;
}

// Define another key type.
impl ArchiveType<u8> for MyArchive {
    type Key = Pod<u8>;
    type Value = [u8; 5];
}

// Create a new archive.
let archive = Archive::<MyArchive>::new(backend::InMemoryBackend::new()).unwrap();
// Begin a new atomic transaction.
let mut write_txn = archive.write().unwrap();
// Store something to the str table.
write_txn.set("henlo", &[5, 10, 15]).unwrap();
// Commit the transaction.
write_txn.commit().unwrap();

// Read the data back to verify that it was saved.
let read_txn = archive.read().unwrap();
assert_eq!(&read_txn.get("henlo").unwrap().unwrap(), &[5, 10, 15]);

可选特性

bytemuck - 启用 Pod 数据转换,直接读取类型的字节以存储。

rmp_serde - 启用 Rmp 数据转换,将Rust类型序列化为字节并反向操作。

zstd - 启用 Zstd 数据转换,在存储前压缩数据。

依赖

~1–3.5MB
~69K SLoC