Ubuntu安装Rocksdb并调试
前言
第一次写博客^_^
系统是全新的Ubuntu20.04,什么都没有,一切从头开始安装
查看gcc和g++版本
sudo apt-get update
gcc --version
g++ --version
注意这里是俩杠。4.7以上不用更新,下面代表正常,第二行是版本号。
没有的话安装:
sudo apt install build-essential
安装必要的一些库
sudo apt-get install libsnappy-dev zlib1g-dev libbz2-dev liblz4-dev libzstd-dev libgflags-dev
下载,安装
wget https://github.com/facebook/rocksdb/archive/v6.6.4.zip #6.6.4 (2020-01-31)
此过程时间较长,且容易失败。但这是几种命令行下载方法中失败率最低的一种了,嫌慢可以在Windows下用百度云之类的下载别人下载好的,然后用远程软件传(貌似更慢哈哈)。
时隔两年一之后这个wget的资源已经不管用了,目前可以选择直接git下载或者在github上下载压缩包。
git:
git clone https://github.com/facebook/rocksdb.git -b v6.6.4
(上面得到红框是最新版本的,下面的是指定版本的)
该方法下载的是6.6.4版本的,较为稳定,适合做研究使用,如果是想要最新版本的,直接把后面的 -b以及之后的内容去掉就行。由于网络问题,该过程可能失败多次,可以多尝试几次。下面是直接下载压缩包的方式,推荐使用下面这种方式。
网页搜索github--github内搜索rocksdb--选择“facebook/rocksdb”进入--选择左上角版本分枝--拉到最底下,可以看到单独的v6.6.4版本--点击右边绿色的按钮,点击"Download ZIP",即可下载指定版本的rocksdb--移动到你想存的位置后解压即可。
unzip v6.6.4.zip
cd rocksdb-6.6.4/
make static_lib && sudo make install-static
make shared_lib && sudo make install-shared
其中第一步里全新的系统没有zip的话安装(一般都有,有请忽略↓):
sudo apt-get install zip
另:后两步会消耗大量时间,以“$DEBUG_LEVEL is 0”开头,后面一堆CC,可以去干点别的事。
另一种方法:
用其本身的cmake来直接解决,要先安装cmake才行,打完下面的“cmake CM”之后可以直接Table键补全。
cmake CMakeLists.txt
make db_bench #或者 make all 都行,会出现一行行绿色的进度
rocksdb编译分为三种模式,上面的install属于运行最快的模式,同时也是没有debug的模式,将内部的断言全部清除了。
然后是make all,make db_bench之类的模式属于debug模式,运行速度比上面的慢一点,但是方便debug和找出问题。
设置环境变量
#echo "/usr/local/lib" |sudo tee /etc/ld.so.conf.d/rocksdb-x86_64.conf
sudo ldconfig -v #refresh the ldconfig cache
INSTALL_PATH=/usr
make shared_lib && sudo make install-shared
sudo ldconfig -v #refresh the ldconfig cache
到这里就算是安装成功了,接下来是写个小程序测一下以及db_bench的测试。
测试程序
创建一个c++程序,命名为test.cpp
先vim test.cpp创建了文件,然后按“i”键进入插入模式,复制粘贴下面的代码,然后按“esc”,输入“:wq”,也就是保存并退出。
#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; }
编译运行
动态编译:
g++ -std=c++11 -o rocksdbtest test.cpp -lrocksdb -lpthread -ldl
最后这个 -ldl很重要
运行:
./rocksdbtest
或者静态编译:
g++ -std=c++11 -o rocksdbtest test.cpp ./librocksdb.a -lpthread -lsnappy -lz -lbz2 -lzstd /usr/lib/x86_64-linux-gnu/liblz4.a
(很长,都在同一行,这个加不加-ldl没试)
运行成功后应该输出get bar success!!,有错会报错。
另:若是完全新的电脑可能没有安装gdb,不能进行debug,直接sudo apt-get install gdb即可。
db_bench测试
此时看文件我们会发现有很多的.d文件,这是make过程残留的,不知道是makefile文件没写好还是咋回事,清除方式是下面
make clean
现在再看(ls命令)是不是清爽多了,现在进行db_bench的测试
make db_bench
注意输入这句话的时候不要想用Tab键补全,不然会卡很久(不要问我怎么知道的)。
make成功大致是这样的,当然也需要很长时间↓
完成后进行db_bench测试
注意:很多人可能因为snappy库的缘故不能运行db_bench(实际上之前已经安装了,但可能因为链接问题无法使用),实在安装不好的话可以直接取消掉snappy压缩,具体就是在./db_bench后面加上参数"-compression_type=none",此时snappy压缩就被关掉了。
./db_bench
参数:db_bench测试时可以加很多很多的参数,在后面直接加“--”加参数名加参数值即可,具体请直接搜索rocksdb参数。
例如./db_bench --benchmarks="fillseq"表示顺序写入。可以通过可以通过 ./db_bench --help
自己查看想要的配置参数。
若出现要求安装gflags的提示,请在安装gflags之后重新编译。
完事记得
make clean
数据存在哪
首先输入“cd /”进入根目录,然后“cd tmp”进入临时文件存储区,然后找到以rocksdb开头的文件夹即是。
注意里面的日志文件,可以看到很多有用的信息哦。
bye~
参考
https://blog.jeffli.me/blog/2016/12/02/getting-started-with-rocksdb-in-centos-7/