1. RocksDB介绍
RocksDB是使用C++编写的嵌入式kv存储引擎,其键值均允许使用二进制流。由Facebook基于levelDB开发, 提供向后兼容的levelDB API。
RocksDB针对Flash存储进行优化,延迟极小。RocksDB将最大限度的发挥闪存和RAM的高度率读写性能。
RocksDB使用LSM存储引擎,纯C++编写。Java版本RocksJava正在开发中。参见RocksJavaBasic。
RocksDB依靠大量灵活的配置,使之能针对不同的生产环境进行调优,包括直接使用内存,使用Flash,使用硬盘或者HDFS。支持使用不同的压缩算法,并且有一套完整的工具供生产和调试使用。
2. RocksDB编译安装
2.1 安装依赖
- 可以让 RocksDB 去链接以下的压缩库:
- zlib - 一个用于数据压缩的库。
- bzip2 - 一个用于数据压缩的库。
- lz4 - 一个用于数据极速压缩的库。
- snappy - 一个用于数据快速压缩的库。
- zstandard - 快速实时压缩算法。
- rocksdb的工具都依赖于:
- gflags - 一个命令行标志解析库。你可以在不安装这个库的情况下正常编译 RocksDB。
- 如果希望构建 RocksJava 静态包,那么用于编译 Snappy 的 cmake 是必须的。
安装命令如下:
注意:
- libasan是可选安装的,用于调试。
- gflags安装完成后,请将gflags的include路径添加到CPATH环境变量中,并将lib路径添加到LIBRARY_PATH中。如果使用默认设置安装,include路径将是/usr/local/include, lib路径将是/usr/local/lib
yum install snappy snappy-devel zlib zlib-devel bzip2 bzip2-devel lz4-devel libasan
git clone https://github.com/gflags/gflags.git
cd gflags
git checkout v2.0
./configure && make && sudo make install
wget https://github.com/facebook/zstd/archive/v1.1.3.tar.gz
mv v1.1.3.tar.gz zstd-1.1.3.tar.gz
tar zxvf zstd-1.1.3.tar.gz
cd zstd-1.1.3
make && sudo make install
2.2. 安装RocksDB
wget https://github.com/facebook/rocksdb/archive/v6.10.2.tar.gz
unzip v6.10.2.tar.gz
cd rocksdb-6.10.2/
make static_lib && make install-static
make shared_lib && make install-shared
注意:如果你打算在生产环境中使用 RocksDB,请不要使用 make
或者是 make all
的方式进行编译。因为这两种方式会编译出 debug 模式的 RocksDB,性能要差很多。
RocksDB 正常是可以在不安装任何依赖的情况下编译的,但是推荐安装一些压缩库(见2.1的安装依赖中的压缩库)。当然,新版本的 gcc/clang 还是需要的,因为使用到了 C++11 的特性。
以下是一些编译 RocksDB 的选择:
- 【推荐】
make static_lib
将会编译出一个 RocksDB 的静态库 librocksdb.a。这个静态库是 release 模式的。 make shared_lib
将会编译出一个 RocksDB 的动态库 librocksdb.so。这个动态库是 release 模式的。make check
将会编译并运行所有的单元测试,得到的 RocksDB 是 debug 模式的。make all
将会编译出一个静态库、所有的工具和单元测试。我们的工具依赖 gflags,所以在运行make all
之前必须先安装 gflags。这种方式得到的 RocksDB 是 debug 模式的,不要在生产环境中使用make all
编译出来的二进制包。- 默认情况下,我们编译的二进制包会针对你编译所在的平台进行优化(
-march=native
或相同的东西),如果你的 CPU 支持 SSE4.2 指令集的话也会自动开启。当使用USE_SSE=1 make static_lib
或者cmake -DFORCE_SSE42=ON
去编译,且 CPU 还不支持 SSE4.2 指令集的话,就会显示一条警告信息。如果你想要一个便捷式的二进制包,就在 make 命令前添加PORTABLE=1
,比如说PORTABLE=1 make static_lib
。
2.3 设置环境变量
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib
为了让这个设置永久生效,可以在~/.bash_profile 或 /etc/profile文件中添加设置指令,设置后source这个文件
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib
2.4. 运行测试
在rocksdb这个文件夹的工作目录中,执行如下命令:【注意:将/data/rocksdb替换为实际的目录,存储key-value数据】
export DB_DIR=/data/rocksdb/db
export WAL_DIR=/data/rocksdb/wal
export TEMP=/data/rocksdb/tmp
export OUTPUT_DIR=/data/output #记录测试日志、测试报告等
随机插入 bulkload
测试
cd rocksdb-6.10.2/
./tools/benchmark.sh bulkload
如果能正常运行,则已经正确安装了rocksdb
./db_bench --help
自己查看想要的配置参数,当然配置前需要对各个参数有一定的了解
参考
https://github.com/facebook/rocksdb
https://github.com/facebook/rocksdb/blob/master/INSTALL.md
cmake安装
wget https://cmake.org/files/v3.9/cmake-3.9.2.tar.gz
tar -xzvf cmake-3.9.2.tar.gz
cd cmake-3.9.2
./configure
make && make make install