18 个版本
0.1.10 | 2021 年 1 月 16 日 |
---|---|
0.1.9 | 2020 年 8 月 8 日 |
0.1.8 | 2020 年 5 月 28 日 |
0.1.5 | 2020 年 3 月 22 日 |
0.0.8 | 2017 年 6 月 27 日 |
#217 在 数据库接口
每月 25 次下载
13MB
291K SLoC
RustRocks
另一个 Rust 的 RocksDB 绑定。 文档
让 RocksDB 真正成为摇滚!
- 针对 RocksDB 6.7.3 (git 子模块) 的静态链接
- 动态链接已测试
- macOS homebrew
- Windows 10, VS 2019 与
vcpkg
- ArchLinux pacman,支持 x86_64 和 aarch64(ODroid-C2)
- Ubuntu 18.04 (
rocksdb5.8
分支),支持 x86_64 和 aarch64(RPi 3) - Ubuntu 20.04 (
rocksdb5.17
分支)
安装
动态链接 RocksDB
[dependencies]
rocks = "0.1"
针对 RocksDB 的静态链接(默认启用 snappy)
[dependencies.rocks]
version = "0.1"
default-features = false
features = ["static-link"]
所有静态功能(所有压缩类型)
[dependencies.rocks]
version = "0.1"
default-features = false
features = ["full"]
如何编译
请随意参考 Travic-CI、AppVeyor 和 Github Actions 配置文件。
静态链接
$ git submodule update --init --recursive
$ cargo test --features static-link -- --test-threads 1
(This will build with snappy as the only compression supported)
$ cargo test --features full -- --test-threads 1
(This will build with all compression supported)
动态链接
针对 macOS(通过 brew 安装 RocksDB)
$ brew install rocksdb
$ cargo test -- --nocapture --test-threads 1
针对 Linux
(install rocksdb via package manager or make & install)
$ sudo apt install lld
(NOTE: gcc-ld can't handle circular references while linking.)
(for more, refer the last section of README)
$ RUSTFLAGS="-C link-arg=-fuse-ld=lld" cargo test -- --test-threads 1
如果 RocksDB 安装在非默认目录,请使用环境变量
LD_LIBRARY_PATH=/usr/local/libLIBRARY_PATH=/usr/local/libCXXFLAGS=-I/usr/local/include
Ubuntu LTS
RocksDB 经常更改其 API,因此 rust-rocks
使用不同的分支来支持 Ubuntu LTS。
> sudo apt install librocksdb-dev libsnappy-dev
您还需要从官方源或 http://apt.llvm.org/
获取 lld
。
分支
- rocksdb5.8 (18.04 LTS)
- rocksdb5.17 (20.04 LTS)
Windows
您需要 VS 2017 或 VS 2019,并通过 vcpkg 安装 RocksDB。
常见问题解答
请随意 创建新问题。
列出当前支持的压缩类型
$ cargo run --example it-works
RocksDB: 6.7.3
Compression Supported:
- NoCompression
- SnappyCompression
- ZlibCompression
- BZip2Compression
- LZ4Compression
- LZ4HCCompression
- ZSTD
- ZSTDNotFinalCompression
开发
Bindgen
$ cd rocks-sys
$ PATH="/usr/local/opt/llvm/bin:$PATH" make
(this will regenerate the bindgen c.rs)
已知错误
Linux 下的链接错误
- rust-rocks 将 rust 函数导出到 C++,因此在链接时存在循环引用
- GCC 要求您按照它们相互依赖的顺序放置目标文件和库
- Rust 不会在
--start-group
和--end-group
中包装用户 crates - 因此,循环引用将是错误。
- 可以通过使用
lld
作为链接器来修复,RUSTFLAGS="-C link-arg=-fuse-ld=lld"
- 可以通过手动组织链接参数来修复
- librocks,然后是librocks_sys,然后又是librocks
轻微的内存泄漏
- 原始指针在运行时创建,应该通过
lazy_static
实现,并包装在特例对象中ColumnFamilyOptions::comparator
:const Comparator*
ColumnFamilyOptions::compaction_filter
:const CompactionFilter*
迭代器泄露生命周期
参考:https://github.com/bh1xuw/rust-rocks/issues/15
- 在进行 for-traverse 时:这是可以的
- 在收集以备后用:克隆键和值