18个版本 (7个重大更改)
新版本 0.29.0 | 2024年8月21日 |
---|---|
0.28.1 | 2024年7月27日 |
0.27.1 | 2024年7月7日 |
0.23.2 | 2024年3月30日 |
#237 在 数据库接口
每月951 次下载
23MB
470K SLoC
rust-rocksdb
为什么分支
原始的rust-rocksdb仓库非常出色,我非常感激所有的工作,然而,对于我的使用场景,我需要保持与最新的rocksdb版本以及最新的rust版本同步,因此为了保持一切更新,我决定从原始仓库分叉,以便我能够完全控制并能够创建定期发布。
要求
- Clang和LLVM
Rust版本
rust-rocksdb保持6个月的滚动MSRV(最低支持Rust版本)政策。这意味着只要新使用的Rust版本至少有6个月的历史,我们就会接受升级MSRV的PR。
我们当前的MSRV是1.75。
贡献
欢迎反馈和pull请求!如果您对RocksDB的某个特定功能很重要,请通过打开一个issue告诉我,我会优先考虑。
用法
此绑定与特定版本的RocksDB静态链接。如果您想自己构建它,请确保您已经克隆了RocksDB和压缩子模块
git submodule update --init --recursive
特性
压缩支持
默认情况下,通过crate功能启用对Snappy、LZ4、Zstd、Zlib和Bzip2压缩的支持。如果不需要所有这些压缩算法的支持,可以禁用默认功能并启用特定的压缩算法。例如,要仅启用LZ4压缩支持,请对您的Cargo.toml进行以下更改
[dependencies.rocksdb]
default-features = false
features = ["lz4"]
多线程ColumnFamily交替
RocksDB 允许在多个线程中同时创建和删除列族,但为了兼容性,这个包默认不允许这样做。如果您需要并发修改列族,请启用包特性 multi-threaded-cf
,这将使得这个绑定的数据结构默认使用 RwLock
。或者,您可以直接创建 DBWithThreadMode<MultiThreaded>
而不需要启用包特性。
在/MT或/MD运行时库之间切换(仅限Windows)
特性 mt_static
将请求使用 /MT 标志构建库,这将导致库使用运行时库的静态版本。这可以在不同运行时版本之间存在依赖树冲突的情况下很有用。
Jemalloc
特性 jemalloc
将启用 unprefixed_malloc_on_supported_platforms
特性,钩住实际的 malloc 和 free,以便使用 jemalloc 来分配内存。在支持的平台上(如 Linux),Rocksdb 也会得到适当的提示,Jemalloc 已启用,以便它可以应用内部优化。在不支持的平台上(见此处),Rocksdb 不会得到适当的提示 Jemalloc 正在使用,因此会跳过一些内部优化,但您仍然会得到 Jemalloc 内存分配的好处。注意,默认情况下,Rust 在 Linux 上使用 libc malloc,这比 Jemalloc 有更多的内存碎片,特别是在使用 Rocksdb 的情况下。有关更多信息,请参阅 GitHub 问题。总的来说,除非有特殊原因不启用(您的系统不支持等),我强烈建议启用 Jemalloc。
可用的 Malloc 大小
特性 malloc-usable-size
将通知 Rocksdb 平台支持 malloc_usable_size,并且如果您想使用 optimize_filters_for_memory
rocksdb 特性,这是必要的,因为该特性受限于 malloc_usable_size 是否可用。有关该特性的更多信息,请参阅 rocksdb。
仅静态链接 ZSTD
与启用 ZSTD 压缩结合的特性 zstd-static-linking-only
将导致 Rocksdb 将处理过的字典保留在块缓存中,以节省重复反序列化的开销。这为读取密集型工作负载节省了大量 CPU。由于其中一个处理过的字典 API 被标记为实验性,因此此功能受 Rocksdb 中的一个标志的限制。然而,根据 预设字典压缩博客文章,该功能仍然在 Facebook 的生产环境中使用。
依赖关系
~0.3–4.5MB
~79K SLoC