返回

文章详情

TurboKV:极快的 Rust 键值存储

Hacker News2026年8月29日 02:23

TurboKV是一款快速的嵌入式键值存储,采用Rust编写。TurboKV是一个异步的嵌入式键值数据库,具有原子批处理、有序范围扫描、可配置的持久性、压缩和后台合并功能。 安装 cargo add turbokv cargo add tokio --features full 或者直接添加依赖项: ``` [dependencies] turbokv = "0.6" tokio = { version = "1", features = ["full"] } ``` TurboKV的持久化Bloom过滤器格式使用硬件AES。构建x86/x86_64目标时,使用RUSTFLAGS="-C target-feature=+aes,+sse2",构建ARM/AArch64目标时,使用RUSTFLAGS="-C target-feature=+aes,+neon"。当二进制文件只在相同CPU模型或特性超集上运行时,您也可以使用-C target-cpu=native。 快速开始 使用 ```rust turbokv::{Db, DbOptions, WriteBatch}; #[tokio::main] async fn main() -> Result<(), Box<dyn std::error::Error>> { let db = Db::open_with_options("./my-database", DbOptions::durable()).await?; db.insert(b"user:1", b"Ada").await?; assert_eq!(db.get(b"user:1").await?, Some(b"Ada".to_vec())); let mut batch = WriteBatch::new(); batch.put(b"user:2", b"Grace"); batch.put(b"user:3", b"Linus"); batch.delete(b"user:1"); db.write_batch(&batch).await?; for (key, value) in db.scan_prefix(b"user:").await? { println!("{} = {}", String::from_utf8_lossy(&key), String::from_utf8_lossy(&value)); } db.close().await?; Ok(()) } ``` 可运行的示例: - 基本:插入、获取、更新和删除 - 批量写入:原子性插入和删除 - 范围查询:有序范围和前缀扫描 - 并发:来自Tokio任务的共享访问 - 持久性:强大的WAL恢复 - 配置:缓存、内存表和压缩选项 API解析 持久性预设 | 预设 | 确认边界 | 用例 | |-----------------------|-----------------------------------|-------------------------------------| | DbOptions::fast() | 内存可见性;无WAL | 缓存和可复现的数据 | | DbOptions::durable() | 附加到WAL而无需每次写入同步 | 进程崩溃恢复;推荐的默认设置 | | DbOptions::paranoid()| WAL组完成所有同步后再返回 | 最强模式,受文件系统/设备保证影响 | 一个打开的Db或Engine独占其数据目录。使用close()或close_with_status()进行干净关闭;丢弃句柄不是干净关闭合同。 数据库操作 键和值是通过AsRef<[u8]>提供的任意字节序列;字符串需要由调用方编码。变更API在返回之前会复制其输入。点读取与集合读取均返回拥有的Vec<u8>值。空值是有效数据,与已删除的键不同。 打开与配置API | 参数 | 结果与行为 | |--------------------------|---------------------------------------------------| | Db::open(path) | path: AsRef<Path> | | | 打开或创建目录,使用DbOptions::durable()。 | | 打开的句柄独占目录。 | | Db::open_with_options(path, options) | 数据库路径和DbOptions值 | | | 使用显式的持久性、内存、缓存和压缩设置打开。 | | 拒绝矛盾设置,例如在禁用WAL时设置sync_writes=true。| | DbOptions::fast() | None | | | 返回无WAL的预设。 | | DbOptions::durable() | None | | | 返回可进程崩溃恢复的WAL预设。 | | DbOptions::paranoid() | None | | | 返回在确认之前同步的预设。 | | options.with_compression(compression) | 一个Compression变体 | | | Builder风格更新,返回修改后的选项。 | | | 所有预设开始时均使用64 MiB的内存表、64 MiB的块缓存和LZ4压缩。| | 其公共字段可以在打开之前进行调整: | | | DbOptions字段 | 意义 | | wal_enabled: bool | 将变更附加到WAL。禁用时,允许在成功刷新或关闭之前丢失数据。| | sync_writes: bool | 在确认每组变更之前等待WAL同步障碍。需要wal_enabled。 | | memtable_size: usize | 在内存中达到的字节阈值,触发内存表轮换和后台刷新。 | | block_cache_size: usize| 解压缩的SSTable块缓存预算(字节)。设置为0以禁用缓存。| | compression: Compression | 新写入数据的SSTable压缩:Lz4、Snappy、Zstd或None。 | | | 已存在的表保留其编码格式。 | 点、批量和批量操作API | 参数 | 返回与语义 | |----------------------------|----------------------------------------| | insert(key, value) | 字节类型键和值 | | | Result<()> .插入或替换键。在成功之前达到选定的持久性边界。 | | insert_many(entries) | 任何(key, value)对的迭代器 | | | Result<()> .复制完整迭代器并按顺序应用条目;最后的重复键获胜。这是一个批量API,而不是一个原子可见性转换。 | | get(key) | 字节类型键 | | | Result<Option<Vec<u8>>> . 对于缺失或已删除的键返回None,对于存储的空值返回Some(Vec::new())。| | remove(key) | 字节类型键 | | | Result<()> .写入埋葬石;删除缺失键是允许的。 | | contains_key(key) | 字节类型键 | | | Result<bool> .解决与get相同的状态,当前需要其值分配。 | | write_batch(batch) | &WriteBatch | | | Result<()> .原子地发布所有操作;读取者看到生成的结果。

赞助内容

NordVPN Next-gen Antivirus

本站免费、广告极少。如果觉得有帮助,可以请我们喝杯咖啡 —— 任何金额都对持续运营有实际帮助。

请我喝杯咖啡