技术与生活 数据库 Centos8.1 ROCKSDB V6.16 编译笔记

Centos8.1 ROCKSDB V6.16 编译笔记

在Centos8.1上编译RocksDB。

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版本,性能差。

编译时有以下几种选项:

  1. [推荐] make static_lib,编译成静态库librocksdb.a,使用release模式;
  2. make shared_lib,编译成动态库librocksdb.so,使用release模式;
  3. make check,编译并运行所有单元测试,使用DEBUG模式;
  4. make all,编译静态库、所有工具和单元测试。工具依赖于gflags;使用DEBUG模式。在产品发布生产环境使用时不要使用make all;
  5. 默认情况,生成的二进制针对正在编译的平台进行优化(等价于-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库,切换到该目录下,看到有很多文件,参见下图:

本文来自网络,不代表【技术与生活】立场,转载请注明出处。http://4i-bird.com/2021/04/12/centos8-1-rocksdb-v6-16-%e7%bc%96%e8%af%91%e7%ac%94%e8%ae%b0/

作者: charlie_chen

编程是一生最爱: >> 架构与设计; >> 软件工程; >> 项目管理; >> 产品研发。
联系我们

联系我们

022-XXXXXXXX

在线咨询: QQ交谈

邮箱: 1549889473@qq.com

欢迎交流。
关注微信
微信扫一扫关注我们

微信扫一扫关注我们

关注微博
返回顶部