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 是必须的。

   安装命令如下:

   注意:

  1.  libasan是可选安装的,用于调试。
  2. 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

https://rocksdb.org.cn/

RocksDB调研文档

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