Hacker News 中文摘要

RSS订阅

TurboKV:极速Rust键值存储 -- TurboKV: Insanely fast Rust key-value store

TurboKV是一个用Rust编写的快速嵌入式键值存储数据库,支持异步操作、原子批处理、有序范围扫描、可配置持久性、压缩和后台压缩功能。

正文

好的,这是根据您的要求,对原文进行的中文重述,保留了核心细节,并删减了与主题无关的装饰性内容。


项目名称: TurboKV

项目简介: 一个用 Rust 编写的快速、嵌入式键值存储库。

核心特性: TurboKV 是一个异步的嵌入式键值数据库,具备以下功能: * 原子批处理:支持原子性的批量写入操作。 * 有序范围扫描:支持按键的字典序进行范围查询和前缀扫描。 * 可配置持久性:提供多种持久性级别,以平衡性能和数据安全。 * 压缩:支持数据压缩(默认使用 LZ4,也可选 Snappy、Zstd 或不压缩)。 * 后台压缩:自动在后台进行数据压缩和整理。

安装方式: 在 Cargo.toml 中添加依赖: toml [dependencies] turbokv = "0.6" tokio = { version = "1", features = ["full"] } 注意:TurboKV 的持久化布隆过滤器格式使用了硬件 AES 指令,编译时可能需要根据目标平台设置相应的 RUSTFLAGS。

快速入门示例: 1. 打开或创建一个数据库。 2. 执行插入、获取、删除等基本操作。 3. 使用 WriteBatch 进行原子性的批量写入。 4. 使用 scan_prefix 进行前缀扫描。 5. 最后关闭数据库。

API 详解:

  • 持久性预设:

    • fast():无预写日志(WAL),性能最高,但进程崩溃可能导致数据丢失,适用于缓存或可重建数据。
    • durable()(默认):写入 WAL 但不等待磁盘同步,可抵御进程崩溃,是推荐的默认选项。
    • paranoid():写入 WAL 并等待磁盘同步完成,提供最强的持久性保证,但性能受限于磁盘同步延迟。
  • 数据库操作:

    • 打开与配置:通过 Db::open(path) 或 Db::open_with_options(path, options) 打开数据库。DbOptions 可配置 WAL 开关、同步策略、内存表大小、块缓存大小和压缩算法。
    • 单点操作:insert、get、remove、contains_key。
    • 批量操作:insert_many(非原子性)和 write_batch(原子性)。WriteBatch 可以包含多个 put 和 delete 操作。
    • 范围与前缀扫描:range(start, end) 和 scan_prefix(prefix) 会立即收集所有匹配的键值对。range_iter 和 scan_prefix_iter 则提供流式迭代器,可以惰性地读取数据,更节省内存。流式迭代器提供 count、keys、collect_pairs、paginate 等方法,以及 EntryGuard 来访问键和值。
    • 持久化与维护:flush() 用于强制刷新写入;compact() 用于手动触发压缩;status()、logical_stats()、physical_stats() 用于获取数据库状态和统计信息;close() 用于安全关闭数据库。

性能基准测试: 基准测试对比了 TurboKV(三种持久性模式)、fjall 和 redb 在不同工作负载下的吞吐量(每秒确认的键数)。测试环境为 Apple M4 芯片、macOS 系统。

  • 测试结果摘要:

    • TurboKV Fast 模式 在几乎所有场景下吞吐量最高,尤其是在单键事务中。
    • TurboKV Durable 模式 性能依然出色,远高于 fjall 和 redb。
    • TurboKV Paranoid 模式 在单键事务中性能极低(受限于磁盘同步延迟),但在批量事务中通过分摊同步开销,性能得到显著提升。
    • fjall 和 redb 的性能相对较低,尤其是在单键事务场景下。
  • 测试说明:

    • TurboKV Fast 模式禁用了 WAL。
    • TurboKV Durable 模式写入 WAL 但不进行每次确认的磁盘同步。
    • TurboKV Paranoid 模式在返回前进行磁盘同步,其单键吞吐量受限于存储同步延迟。
    • 测试使用了 20 字节的键和 400 字节的值,总数据量超过内存表大小,以触发后台刷新。测试禁用了压缩和块缓存,并保留了操作系统页面缓存。

评论

根据评论内容,主要观点和论据如下:

  1. 性能与实现技术:评论1指出高速可能源于硬件AES和LZ4压缩,并推测扫描时使用SIMD。关键引用:"TurboKV's persisted Bloom-filter format uses hardware AES"、"built-in LZ4 compression"。

  2. 持久性定义争议:评论2质疑"durable"模式的实际持久性,认为仅能应对进程重启而非断电。关键引用:"Durable doesn't mean 'survives a process restart'"、"wouldn't survive power loss"。

  3. 嵌入式适用性:评论3指出"embedded"通常指nostd,而该项目并非如此。关键引用:"Embedded could also mean nostd, which this is absolutely not"。

  4. 开发者调侃:评论5和6以幽默方式指出程序员常自建数据库。关键引用:"Oops you built a database!"、"Every programmer eventually creates own db"。

  5. 术语与功能:评论7调侃"blazing fast"已成梗,评论8询问原子性get+delete操作,评论9赞赏先做logo的优先级。

  6. 性能对比缺失:评论10质疑"fast"缺乏比较基准。关键引用:"Fast compared to what?"

总体而言,评论聚焦技术实现、持久性定义、适用性及功能需求,同时包含对术语和开发文化的调侃,但缺乏对性能基准的明确对比。