#键值存储 #布隆过滤器 # #校验和 #字符串 #排序 #不可变

sstable

有序字符串表,是一种存储不可变字符串字符串对的磁盘格式,并能通过键高效地检索值。该包还提供了布隆过滤器、校验和以及跳过坏块的功能。它基于rusty_leveldb包的实现代码。

29个版本

0.11.1 2023年4月22日
0.10.0 2021年12月29日
0.9.0 2021年11月16日
0.8.2 2020年4月26日
0.3.1 2016年11月23日

#37 in 数据库实现

Download history 73/week @ 2024-03-12 98/week @ 2024-03-19 196/week @ 2024-03-26 77/week @ 2024-04-02 37/week @ 2024-04-09 92/week @ 2024-04-16 61/week @ 2024-04-23 36/week @ 2024-04-30 34/week @ 2024-05-07 51/week @ 2024-05-14 72/week @ 2024-05-21 124/week @ 2024-05-28 97/week @ 2024-06-04 63/week @ 2024-06-11 52/week @ 2024-06-18 45/week @ 2024-06-25

278 每月下载量
7 个crate中使用(通过 graphannis-core

MIT 许可证

115KB
2.5K SLoC

sstable

crates.io Travis CI

文档

什么是

这个crate提供了一个API来操作存储在磁盘上的不可变(字符串 -> 字符串)映射。主要访问方法是迭代器,但也提供了一个更简单的API。

一般过程是

  • 使用TableBuilder写入表。条目必须按顺序添加。数据不需要写入磁盘;任何实现Write的类型都适用。
  • 使用Table读取表。同样,来源是通用的;任何实现Read + Seek的类型都可以使用。

请注意,表和一些其他结构是键的排序的泛型;通常,您可以直接使用StandardComparator

使用Options,您可以影响磁盘上表布局的一些细节。通常,您不需要这样做;只需使用Options::default()值。

如果在磁盘上的文件中存在数据损坏,将跳过损坏的块。单个块包含的条目数量取决于块大小,这可以在Options结构中设置。

为什么

此crate重用了最初为rusty-leveldb持久化部分编写的代码,这是在Rust中重新实现的Google LevelDB。这就是代码在某些点比所需复杂的原因。

性能

在空闲的Intel(R) Xeon(R) CPU E5-1650 v2 @ 3.50GHz处理器上运行的tmpfs卷上不进行压缩,基准测试显示,在包含16个键字节和16个值字节的10,000个条目的表中,此crate将

  • 每秒读取530万个条目
  • 每秒写入120万个条目

不同大小的表格性能可能会有所不同。

损坏和错误

校验和验证失败通常源于损坏(显然)或未完全写入或部分覆盖的 SSTable 文件。

贡献

非常欢迎贡献!请随意发送拉取请求。

依赖项

~245KB