剛開始遇到這個問題的時候首先的思路就是生成動態鏈接庫和靜態鏈接庫,但是真的是好難,比如說怎麼把怎麼把第三方庫加進去,怎麼保證所有的頭文件都可以被調用。想了好久都絲毫沒有頭緒,簡直是已經接近崩潰的邊緣了。(如果大家有什麼詳細的資料或者是方法可以分享下的話,歡迎在下面評論呦,可以共同學習)
然後我覺得我可以嘗試下簡單粗暴的方法,首先我在mapkeeper庫中執行以下命令:
mkdir RHDB
然後把自己的數據庫複製到這個文件夾中:
cp /home/hsk/kvcalue/software/RHDB/* /mapkeeper/RHDB
然後對makefile文件進行修改,編譯需要編譯的c文件,並生成mapkeeper_RHDB可執行文件用於和ycsb相連:
include ../Makefile.config
EXECUTABLE = mapkeeper_RHDB
NVM_SRC = ./db/mem/pflush.c ./db/mem/alloc_mem.cc
DB_SRC = ./db/rhtree.cc ./db/db.cc ./db/threadpool.cc ./db/log.cc
LIB_SRC = ./lib/city.cc
UTIL = ./util/testutil.cc
#MAIN = ./RHDBServer.cpp
TABLE = ./table/table.cc
all : thrift
g++ -Wall -o $(EXECUTABLE) *cpp -I $(THRIFT_DIR)/include/thrift -I $(THRIFT_DIR)/include \
/usr/local/lib/libleveldb.a /usr/local/lib/libsnappy.a -lpthread -lboost_thread -lboost_system -lboost_filesystem -lthrift -lleveldb -I ../thrift/gen-cpp \
-L $(THRIFT_DIR)/lib \
-L ../thrift/gen-cpp -lmapkeeper \
-L ./third-party/jemalloc-4.2.1/lib -ljemalloc -L ./third-party/tbb -ltbb -Itable -Iinclude -Idb/mem -Ilib -Idb -Iutil -Itbb $(NVM_SRC) $(DB_SRC) $(LIB_SRC) $(UTIL) $(TABLE) \
-Wl,-rpath,\$$ORIGIN/../thrift/gen-cpp \
-Wl,-rpath,$(THRIFT_DIR)/lib \
-std=c++11
export_lib:
export LD_LIBRARY_PATH=./third-party/tbb:./third-party/jemalloc-4.2.1/lib/
thrift:
make -C ../thrift
run:
./$(EXECUTABLE) --sync
clean :
-rm -rf $(THRIFT_SRC) $(EXECUTABLE) *.o
wipe:
-rm -rf data/*
在make的時候會報錯顯示找不到jemalloc和tbb對應的libjemalloc.so.2和libtbb.so.2找不到,主要是沒有複製到/usr/lib裏面
sudo cp libjemalloc.so.2 /usr/lib64/
sudo cp libtbb.so.2 /usr/lib64/
這是即會顯示make成功。(這裏面server.cpp文件修改和我上傳過的資料“rocksdbsever.cpp”修改方式差不多,這裏不再說明)
然後執行:
./mapkeeper_RHDB 0 1 1 /home/hsk/kvstore/software/mapkeeper/RHDB/data
在ycsb端執行下面腳本:
bin/ycsb load mapkeeper -s -P workloads/workloada -p "mapkeeper.host=127.0.0.1" -p "mapkeeper.port=9090" > /home/hsk/kvstore/test_data/YCSB_RHDB/1_load.txt 2>&1
bin/ycsb run mapkeeper -s -P workloads/workloada -p "mapkeeper.host=127.0.0.1" -p "mapkeeper.port=9090" > /home/hsk/kvstore/test_data/YCSB_RHDB/1_run.txt 2>&1
rm -rf /home/hsk/kvstore/software/mapkeeper/RHDB/data/*
bin/ycsb load mapkeeper -s -P workloads/workloadb -p "mapkeeper.host=127.0.0.1" -p "mapkeeper.port=9090" > /home/hsk/kvstore/test_data/YCSB_RHDB/2_load.txt 2>&1
bin/ycsb run mapkeeper -s -P workloads/workloadb -p "mapkeeper.host=127.0.0.1" -p "mapkeeper.port=9090" > /home/hsk/kvstore/test_data/YCSB_RHDB/2_run.txt 2>&1
rm -rf /home/hsk/kvstore/software/mapkeeper/RHDB/data/*
bin/ycsb load mapkeeper -s -P workloads/workloadc -p "mapkeeper.host=127.0.0.1" -p "mapkeeper.port=9090" > /home/hsk/kvstore/test_data/YCSB_RHDB/3_load.txt 2>&1
bin/ycsb run mapkeeper -s -P workloads/workloadc -p "mapkeeper.host=127.0.0.1" -p "mapkeeper.port=9090" > /home/hsk/kvstore/test_data/YCSB_RHDB/3_run.txt 2>&1
rm -rf /home/hsk/kvstore/software/mapkeeper/RHDB/data/*
bin/ycsb load mapkeeper -s -P workloads/workloadd -p "mapkeeper.host=127.0.0.1" -p "mapkeeper.port=9090" > /home/hsk/kvstore/test_data/YCSB_RHDB/4_load.txt 2>&1
bin/ycsb run mapkeeper -s -P workloads/workloadd -p "mapkeeper.host=127.0.0.1" -p "mapkeeper.port=9090" > /home/hsk/kvstore/test_data/YCSB_RHDB/4_run.txt 2>&1
rm -rf /home/hsk/kvstore/software/mapkeeper/RHDB/data/*
bin/ycsb load mapkeeper -s -P workloads/workloade -p "mapkeeper.host=127.0.0.1" -p "mapkeeper.port=9090" > /home/hsk/kvstore/test_data/YCSB_RHDB/5_load.txt 2>&1
bin/ycsb run mapkeeper -s -P workloads/workloade -p "mapkeeper.host=127.0.0.1" -p "mapkeeper.port=9090" > /home/hsk/kvstore/test_data/YCSB_RHDB/5_run.txt 2>&1
rm -rf /home/hsk/kvstore/software/mapkeeper/RHDB/data/*
bin/ycsb load mapkeeper -s -P workloads/workloadf -p "mapkeeper.host=127.0.0.1" -p "mapkeeper.port=9090" > /home/hsk/kvstore/test_data/YCSB_RHDB/6_load.txt 2>&1
bin/ycsb run mapkeeper -s -P workloads/workloadf -p "mapkeeper.host=127.0.0.1" -p "mapkeeper.port=9090" > /home/hsk/kvstore/test_data/YCSB_RHDB/6_run.txt 2>&1
rm -rf /home/hsk/kvstore/software/mapkeeper/RHDB/data/*