前言
第一次寫博客^_^
系統是全新的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下用百度雲之類的下載別人下載好的,然后用遠程軟件傳(貌似更慢哈哈)。
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”,也就是保存並退出。
1 #include <cstdio>
2 #include <string>
3 #include "rocksdb/db.h"
4 #include "rocksdb/slice.h"
5 #include "rocksdb/options.h"
6
7 using namespace std; 8 using namespace rocksdb; 9
10 const std::string PATH = "/tmp/rocksdb_tmp"; 11 int main(){ 12 DB* db; 13 Options options; 14 options.create_if_missing = true; 15 Status status = DB::Open(options, PATH, &db); 16 assert(status.ok()); 17 Slice key("foo"); 18 Slice value("bar"); 19 std::string get_value; 20 status = db->Put(WriteOptions(), key, value); 21 if(status.ok()){ 22 status = db->Get(ReadOptions(), key, &get_value); 23 if(status.ok()){ 24 printf("get %s success!!\n", get_value.c_str()); 25 }else{ 26 printf("get failed\n"); 27 } 28 }else{ 29 printf("put failed\n"); 30 } 31 delete db; 32 }
編譯運行
動態編譯:
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 aot-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
自己查看想要的配置參數
完事記得
make clean
數據存在哪
首先輸入“cd /”進入根目錄,然后“cd tmp”進入臨時文件存儲區,然后找到以rocksdb開頭的文件夾即是。
注意里面的日志文件,可以看到很多有用的信息哦。
bye~
參考
https://blog.jeffli.me/blog/2016/12/02/getting-started-with-rocksdb-in-centos-7/