首页 时政热点 科技头条 智能AI 安全攻防 数码硬件 开发者生态 汽车 游戏 社会热点 开源推荐 医疗健康 归档 标签 关于

TurboKV:速度极快的 Rust 键值存储

2026-08-29 1 阅读 约8分钟阅读 rgbimbochamp
分享:
字号:
TurboKV 是一个异步嵌入式键值数据库,具有原子批处理、有序范围扫描、可配置的持久性、压缩和后台压缩。 Cargo add Turbokv Cargo Add tokio --features full 或者直接添加依赖项: [dependency] Turbokv = " 0.6 " tokio = { version = " 1 ", features = [ " full "] } TurboKV 的持久 Bloom-filter 格式使用硬件 AES。使用 RUSTFLAGS="-C target-feature=+aes,+sse2" 构建 x86/x86_64 目标,并使用 RUSTFLAGS="-C target-feature=+aes,+neon" 构建 ARM/AArch64 目标。当二进制文件仅在相同的 CPU 型号或功能超集上运行时,您可以改用 -C target-cpu=native。使用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 ( ) ) 。等待? ;数据库。插入(b“用户:1”,b“Ada”)。等待? ;断言_eq! (db.get(b"user:1").await?,Some(b"Ada".to_vec()));让 mut batch = WriteBatch :: new ( ) ;批 。 put ( b"用户:2" , b"格蕾丝" ) ;批 。 put ( b"user:3" , b"Linus" ) ;批 。删除(b“用户:1”);数据库。 write_batch(&批)。等待? ; for(键,值)在数据库中。 scan_prefix(b“用户:”)。等待? { 打印! ( "{} = {}" , String :: from_utf8_lossy ( & key ) , String :: from_utf8_lossy ( & value ) ) ; } 数据库。关闭 ( ) 。等待? ; Ok ( ( ) ) } 可运行示例:预设确认边界用例 DbOptions::fast() 内存中可见性;无 WAL 缓存和可重现数据 DbOptions::durable() 附加到 WAL,无需每次写入同步 进程崩溃恢复;推荐默认 DbOptions::paranoid() WAL 组在返回最强模式之前完成了sync_all,受文件系统/设备保证一个打开的 Db 或引擎独占其数据目录。使用 close() 或 close_with_status() 进行干净关闭;放弃句柄并不是干净的关闭合同。键和值是通过 AsRef<[u8]> 提供的任意字节序列;字符串需要由调用者编码。突变 API 在返回之前复制其输入。点和收集读取返回拥有的 Vec 值。空值是有效数据,与已删除的键不同。打开和配置 API 参数 结果和行为 Db::open(path) 路径:AsRef 使用 DbOptions::durable() 打开或创建目录。打开句柄独占该目录。 Db::open_with_options(path, options) 数据库路径和 DbOptions 值 使用显式持久性、内存、缓存和压缩设置打开。拒绝矛盾的设置,例如在禁用 WAL 的情况下sync_writes = true。 DbOptions::fast() 无 返回无 WAL 预设。 DbOptions::durable() 无 返回进程崩溃可恢复的 WAL 预设。 DbOptions::paranoid() 无 返回确认前同步预设。 options.with_compression(compression) 压缩变体构建器风格的更新,返回修改后的选项。所有预设均以 64 MiB 内存表、64 MiB 块缓存和 LZ4 压缩开始。它们的公共字段可以在打开之前调整: DbOptions 字段 含义 wal_enabled: bool 将突变附加到 WAL。禁用它会导致进程崩溃数据丢失,直到成功刷新或关闭为止。 sync_writes: bool 在确认每个突变组之前等待 WAL 同步屏障。需要 wal_enabled 。 memtable_size:使用触发内存表旋转和后台刷新的近似内存字节阈值。 block_cache_size:使用解压缩的 SSTable 块缓存预算(以字节为单位)。设置为 0 以禁用缓存。 compression:压缩 SSTable 对新写入的数据进行压缩: Lz4 、 Snappy 、 Zstd 或 None 。现有表保留其编码格式。点、批量和批量操作 API 参数 返回和语义 insert(key, value) 字节型键和值 Result<()> 。插入或更换钥匙。在成功之前已达到选定的耐久性边界。 insert_many(entries) (key, value) 对 Result<()> 的任何迭代器。复制完整的迭代器并按顺序应用条目;最后一个重复的键获胜。这是一个批量 API,而不是一个原子可见性转换。 get(key) 类似字节的键 Result>> 。对于丢失或删除的键返回 None,对于存储的空值返回 Some(Vec::new())。 remove(key) 类似字节的键 Result<()> 。写下墓碑;允许删除丢失的密钥。 contains_key(key) 类似字节的键 Result 。解析与 get 相同的状态,并且当前进行其值分配。 write_batch(batch) &WriteBatch Result<()> 。以原子方式发布所有操作;读者可以看到批次之前的状态或完整批次的状态。重复键的最后一个操作获胜。启用 WAL 后,一条记录或完整批次必须适合 WAL 的 u32 有效负载长度。失败或取消的突变可能已经到达 WAL;在重试非幂等操作之前检查密钥或重新打开。 WriteBatch 拥有每个键和值的副本:API Para
这篇文章对您有帮助吗?

订阅66必读

每日精选科技资讯,直达你的邮箱