参考文献:
- [1] YCSB 测试 LevelDB 数据库
- [2] YCSB负载工具测试leveldb
- [3] YCSB性能测试工具使用
上述两个参考文献提出两种思路利用YCSB对leveldb进行测试,本质上均是将YCSB作为客户端,leveldb作为服务端,文献1利用simplehttp做中间件,文献2利用mapkeeper做中间件,文献2的过程太过繁琐,因此本文采用文献1的方法,但文献2的一些测试步骤依然可取。
YCSB的逻辑思路可以参考文献3的YCSB源码分析。
准备工作
编译leveldb,并且复制libleveldb.a
至/usr/local/lib
,复制include/leveldb
至/usr/local/include
cp ./out-static/libleveldb.a /usr/local/include/
sudo cp -R ./include/leveldb/ /usr/local/lib
安装依赖库 JSON
apt install libjson-c-dev
若进行压缩测试的话,则安装Snappy
apt install libsnappy-dev
安装依赖库libevent
需要是1.4的版本,版本下载链接
下面复制于文献1,相应版本号需与下载链接中保持一致。
cd libevent-1.4.14b-stable
./configure && make
sudo make install
sudo ln -s /usr/local/lib/libevent-1.4.so.2 /usr/lib/libevent-1.4.so.2
安装simplehttp
进入simplehttp/simplehttp
cd simplehttp
make
sudo make install
安装simpleleveldb
修改simpleleveldb的include和Makefile
## 文件 str_list_set.c 和 simpleleveldb.c
#include <json-c/json.h>
## Makefile
LIBS = -L. -L$(LIBSIMPLEHTTP_LIB) -L$(LIBEVENT)/lib -L/usr/local/lib -L$(LIBLEVELDB)/lib -levent -ljson-c -lsimplehttp -lleveldb -lm -lstdc++ -lsnappy -lpthread
安装
cd simpleleveldb
env LIBLEVELDB=/usr/local make
sudo make install
安装并允许YCSB客户端
git clone https://github.com/jtsui/ycsb-leveldb.git
cd ycsb-leveldb
mvn -pl com.yahoo.ycsb:leveldb-binding -am clean package
测试
./ycsb load leveldb -P workloads/workloada
./ycsb run leveldb -P workloads/workloada
注意: ycsb默认使用python2
可能出现的错误
- JAVA_HOME:
https://docs.oracle.com/cd/E19182-01/821-0917/inst_jdk_javahome_t/index.html
Step:
- levelDB:
make clean && make
cp out-static/libleveldb.a /usr/local/lib/
cp -r include/leveldb /usr/local/include/
- simplehttp:
2.1 compile and make
insimplehttp/simpleleveldb
make clean
env LIBLEVELDB=/usr/local make
make install
2.2 run as server
simpleleveldb --address=localhost --port=8080 --db-file=test
# options:
--address=<str> address to listen on
default: 0.0.0.0
--block-size=<int> block size
default: 4096
--compression=True|False snappy compression
--create-db-if-missing=True|False Create leveldb file if missing
--daemon daemonize process
--db-file=<str> path to leveldb file
--enable-logging request logging
--error-if-db-exists Error out if leveldb file exists
--group=<str> run as this group
--help list usage
--leveldb-max-open-files=<int> leveldb max open files
default: 4096
--paranoid-checks=True|False leveldb paranoid checks
--port=<int> port to listen on
default: 8080
--root=<str> chdir and run from this directory
--user=<str> run as this user
--version 0.1
--write-buffer-size=<int> write buffer size
default: 4194304
- ycsb-leveldb
3.1 compile and make
mvn -pl com.yahoo.ycsb:leveldb-binding -am clean package
3.2 test as client
./ycsb load leveldb -P workloads/workloada
./ycsb run leveldb -P workloads/workloada