RocksDB和db_bench安装与配置

RocksDB和db_bench安装与配置

Start from a new Ubuntu OS.

Introduction

After remaking N times, I made this blog finally.

Let’s start from a new Ubuntu now.

Steps

Step 1

首先安装gcc、g++等工具。

1
sudo apt install build-essential

然后安装一些必要的库,用于RocksDB的Compression。

1
sudo apt-get install libsnappy-dev zlib1g-dev libbz2-dev liblz4-dev libzstd-dev libgflags-dev

Step 2

下载RocksDB源码并解压。

1
2
wget https://github.com/facebook/rocksdb/archive/v6.25.1.zip
unzip rocksdb-6.25.1.zip

Tips:

  • 版本号可自己选择,下面涉及到版本号的命令需要对应更改。e.g. v6.6.4 (2020-01-31)
  • 此过程需要的时间可能较长,可以通过其他方法下载zip压缩包,拷贝至Ubuntu系统。(Recommended)
  • 如果压缩包名字略有不同,自行更改。

Step 3

编译生成动态链接库和静态链接库

1
2
3
cd rocksdb-6.25.1
make shared_lib && sudo make install-shared
make static_lib && sudo make install-static

Tips:

  • 如果先生成静态链接库再生成动态链接库,在生成动态链接库的时候会报错。

    1
    2
    make static_lib && sudo make install-static
    make shared_lib && sudo make install-shared

    解决办法如下:

    1
    2
    3
    make clean
    make shared_lib
    make static_lib
  • 此过程需要的时间较长(约10min)。

最后执行sudo make install命令。

1
sudo make install

Step 4

设置环境变量

1
2
3
#echo "/usr/local/lib" |sudo tee /etc/ld.so.conf.d/rocksdb-x86_64.confsudo ldconfig -v
make shared_lib && sudo make install-shared
sudo ldconfig -v

Tips:

  • #echo "/usr/local/lib" |sudo tee /etc/ld.so.conf.d/rocksdb-x86_64.confsudo ldconfig -v: refresh the ldconfig cacheINSTALL_PATH=/usr
  • sudo ldconfig -v: refresh the ldconfig cache

Test

新建测试程序rocksdbtest.cpp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#include <cstdio>
#include <string>
#include "rocksdb/db.h"
#include "rocksdb/slice.h"
#include "rocksdb/options.h"

using namespace std;
using namespace rocksdb;

const std::string PATH = "/tmp/rocksdb_tmp";

int main() {
DB* db;
Options options;
options.create_if_missing = true;
Status status = DB::Open(options, PATH, &db);
assert(status.ok());
Slice key("foo");
Slice value("bar");

std::string get_value;
status = db->Put(WriteOptions(), key, value);
if(status.ok()) {
status = db->Get(ReadOptions(), key, &get_value);
if(status.ok()) {
printf("get %s success!!\n", get_value.c_str());
}
else {
printf("get failed\n");
}
}
else {
printf("put failed\n");
}

delete db;
}

动态编译

1
g++ -std=c++11 -o rocksdbtest rocksdbtest.cpp -lrocksdb  -lpthread

执行

1
./rocksdbtest

正确结果

1
get bar success!!

db_bench

1
2
3
make clean
make db_bench
./db_bench

Tips:

  • 运行db_bench时设置参数
    e.g.
    1
    ./db_bench -benchmarks="fillrandom,stats" -statistics -key_size=16 -value_size=65536 -db=./test_db1 -wal_dir=./test_db1 -duration=6000 -level0_file_num_compaction_trigger=1 -enable_pipelined_write=true -compression_type=None -stats_per_interval=1 -stats_interval_seconds=10 -max_write_buffer_number=6

Reference

Author

Yiheng Tong

Posted on

2021-10-14

Updated on

2022-11-14

Licensed under


Comments