1 RocksDB简介
1.1 产品简介
RocksDB 是基于levelDB的支持持久化的 key-value 存储系统,是一个C++库,也向后兼容levelDB的API。它可作为 C/S 模式下的存储数据库,更主要的还是提供一个嵌入式KV库。
更多网络参考资料:https://www.oschina.net/p/rocksdb/
Github地址:https://github.com/facebook/rocksdb
RocksDB支持而levelDB不支持的特性参见:【注意2016年之后不再维护此页】https://github.com/facebook/rocksdb/wiki/Features-Not-in-LevelDB
1.2 简要信息
授权协议:Apache+GPLv2
开发语言:C/C++
操作系统:Linux
软件类型:开源软件
所属分类:NoSQL数据库
开源组织:Facebook
1.3 软件下载
软件下载:https://sourceforge.net/projects/rocksdb.mirror/ 6.17.3
从github下载:git clone https://github.com/facebook/rocksdb.git 6.16.4
本文档从github下载。
2 系统环境
2.1 虚拟环境
操作系统:WIN 10
虚拟机软件:VMWare 15.0.0 build-1013445 Pro
2.2 编译环境
Centos 版本:Centos 8.1
GCC版本:gcc 10.2.0
Git版本:git-2.27
Cmake版本:version 3.11.4
3 编译生成
3.1 支持的平台
本次使用的是Linux-CentOS平台。支持的平台列表如下:
1)Linux – Ubuntu
- 更新GCC到4.8或以上,需要支持C++11;
- 需要安装gflags开发库, `sudo apt-get install libgflags-dev`,如果有问题参见: (http://askubuntu.com/questions/312173/installing-gflags-12-04)
- 需要安装snappy开发库,`sudo apt-get install libsnappy-dev`
- 需要安装zlib开发库, `sudo apt-get install zlib1g-dev`
- 需要安装bzip2开发库,`sudo apt-get install libbz2-dev`
- 需要安装lz4开发库, `sudo apt-get install liblz4-dev`
- 需要安装zstandard开发库, `sudo apt-get install libzstd-dev`
2)Linux – CentOS / RHEL
- 更新GCC到4.8或以上,需要支持C++11;`yum install gcc48-c++`
- 需要安装gflags开发库,
git clone https://github.com/gflags/gflags.git cd gflags git checkout v2.0 ./configure && make && sudo make install |
【注意】安装后,将gflags的include目录加入到`CPATH`环境变量,lib目录加入到`LIBRARY_PATH`,如果是默认安装,则include 目录为`/usr/local/include`,lib 目录为 `/usr/local/lib`;
- 安装snappy开发库: sudo yum install snappy snappy-devel
- 安装zlib开发库:sudo yum install zlib zlib-devel
- 安装bzip2开发库:sudo yum install bzip2 bzip2-devel
- 安装lz4开发库:sudo yum install lz4-devel
- 安装ASAN (DEBUG选项): sudo yum install libasan
- 安装zstandard:
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 |
3)OS X
具体参见:下载包解压后目录下的INSTALL.md
4)FreeBSD
具体参见:下载包解压后目录下的INSTALL.md
5)OpenBSD
具体参见:下载包解压后目录下的INSTALL.md
6)iOS
具体参见:下载包解压后目录下的INSTALL.md
7)Windows
具体参见:下载包解压后目录下的INSTALL.md
8)AIX 6.1
具体参见:下载包解压后目录下的INSTALL.md
9)Solaris Sparc
具体参见:下载包解压后目录下的INSTALL.md
3.2 安装依赖库
【依赖说明】
1)RocksDB依赖于以下压缩包:
- [zlib](http://www.zlib.net/) – 数据压缩库
- [bzip2](http://www.bzip.org/) – 数据压缩库
- [lz4](https://github.com/lz4/lz4) – 极速数据压缩库
- [snappy](http://google.github.io/snappy/) – 快速压缩库
- [zstandard](http://www.zstd.net) – 快速实时压缩算法
2)工具依赖于以下库:
- gflags](https://gflags.github.io/gflags/) – 控制命令行flags处理的库;
3)RocksJava静态目标依赖
- 如果要构建RocksJava静态目标,构建Snappy时需要cmake。
查看依赖库是否在,并确认版本。命令如下:
rpm -qa | grep ‘gflags\|snappy\|zlib\|bzip2\|lz4-devel\|libasan\|zstd’ |
我的虚拟机上执行结果如下:
从上图中看到我的系统上已经安装了snappy、zlib、bzip2,但都不含开发库。所以都要安装。
从上图中看到我的系统上已经安装了snappy、zlib、bzip2,但都不含开发库。所以都要安装。
1)在/rocksdb目录下建立third_libs目录,用于安装第三方依赖库
cd /rocksdb mkdir third_libs cd third_libs |
2)安装gflags开发库
下载源码、编译、安装,命令如下:
mkdir gflags cd gflags git clone https://github.com/gflags/gflags.git cd gflags git checkout v2.0 ./configure && make && sudo make install |
设置环境变量,建议配置到用户的环境中,此次设置到root用户的环境中:
vim .bashrc |
在文件中增加三行,参考截图如下:
执行以下命令立即生效并验证,或者重启
source .bashrc echo $CPATH |
3)安装snappy
yum install snappy |
需要到下面地址自行下载snappy-devel:要对应上安装的snappy的版本。
http://www.rpmfind.net/linux/rpm2html/search.php?query=snappy-devel(x86-64)
snappy-devel-1.1.8-3.el8.x86_64.rpm
安装命令如下:
rpm -ivh snappy-devel-1.1.8-3.el8.x86_64.rpm |
4)安装zlib
yum install zlib zlib-devel |
5)安装bzip2
yum install bzip2 bzip2-devel |
6)安装lz4
yum install lz4-devel |
7)安装asan
yum install libasan |
8)安装zstandard
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 |
至此,依赖的安装包安装完毕。
检查是否安装全了。命令:
rpm -qa | grep ‘gflags\|snappy\|zlib\|bzip2\|lz4-devel\|libasan\|zstd’ |
参考截图如下:
9)安装valgrind
yum install valgrind |
10)安装yum install python38
yum install python38 python3 –version |
参考截图如下:
11)安装git-clang-format
我的环境下安装此包后,重新启动会报错,系统无法启动,所以未安装此包,通过设置忽略检查此项来规避。
yum install git-clang-format clang-format –version |
参考截图如下:
3.3 编译生成库
存放目录:/home/rocksdb,要求至少70GB以上的空间;
如果使用虚拟机,修改/dev/shm为10G,我的虚拟机默认为7.8G,会报/dev/shm空间不足。修改方式如下:
vim /etc/fstab |
在末尾追加下面一行(我虚拟机16G,所以此处配置为10G):
tmps /dev/shm tmpfs defaults,size=10G 0 0 |
然后重启。或者重新挂载/dev/shm,命令如下:
mount -o remount /dev/shm/ |
编译安装说明见下载包解压后目录下的INSTALL.md
下载源码,命令如下:
cd /home/rocksdb git clone https://github.com/facebook/rocksdb.git cd rocksdb/ git checkout v6.16.4 |
进入目录,进行编译:
【注意】直接使用make,或者make all默认编译为DEBUG版本,性能差。
编译时有以下几种选项:
- [推荐] make static_lib,编译成静态库librocksdb.a,使用release模式;
- make shared_lib,编译成动态库librocksdb.so,使用release模式;
- make check,编译并运行所有单元测试,使用DEBUG模式;
- make all,编译静态库、所有工具和单元测试。工具依赖于gflags;使用DEBUG模式。在产品发布生产环境使用时不要使用make all;
- 默认情况,生成的二进制针对正在编译的平台进行优化(等价于-march=native)。如果你的CPU支持,SSE4.2将自动启用。要输出CPU是否支持SSE4.2的警告信息,构建时使用USE_SSE=1 make static_lib, 或者使用CMake, `cmake -DFORCE_SSE42=ON`。如果要构建可移植的二进制包,在make命令前添加PORTABLE=1,像这样: PORTABLE=1 make static_lib。
本次使用make check,和make static_lib编译两次,第一次检查是否正确,第二次是生成静态库,后面编写DEMO使用。
1)编译并检查,使用make check编译,并计时
命令如下:(虚拟机分配了8核心、16G内存,9代i9,SSD盘)
cd rocksdb/ time make check SKIP_FORMAT_BUCK_CHECKS=1 |
此处使用SKIP_FORMAT_BUCK_CHECKS=1选项,是因为我的环境上安装clang-format后,系统就无法重新启动了,所以忽略了此项检查。
运行结果参考截图如下:
2)编译静态库,使用make static_lib编译
命令如下:
make clean time make static_lib |
运行结果参考截图如下:
本目录下librocksdb.a便是生成的静态库。
至此编译完毕。
3.4 清除编译
需要清除编译结果时,执行如下命令:
make clean |
4 编译运行样例
样例在rocksdb/examples目录下。
4.1 编译样例
编译样例前,确保已经完成make static_lib编译,并没有错误。前面章节我们已经完成了此步骤。
进入到样例目录,运行以下命令进行编译:
make all |
结果参考截图如下:
编译结果,参考截图如下:
4.2 运行样例
此处选取最简单一个c_simple_example说明,运行命令如下:
./c_simple_example |
运行完成后,看不到任何输出。它会在/tmp/rocksdb_c_simple_example目录下生成kv库,切换到该目录下,看到有很多文件,参见下图: