刚开始遇到这个问题的时候首先的思路就是生成动态链接库和静态链接库,但是真的是好难,比如说怎么把怎么把第三方库加进去,怎么保证所有的头文件都可以被调用。想了好久都丝毫没有头绪,简直是已经接近崩溃的边缘了。(如果大家有什么详细的资料或者是方法可以分享下的话,欢迎在下面评论呦,可以共同学习)
然后我觉得我可以尝试下简单粗暴的方法,首先我在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/*