¶ 基础用法
¶ 编译
git clone https://github.com/brianfrankcooper/YCSB.git
# 提供mvn命令
sudo apt install -y maven
mvn -pl site.ycsb:rocksdb-binding -am clean package -T 线程数
有些老的教程里是用的com.yahoo.ycsb
,最新版本的YCSB已经换成了site.ycsb
。
¶ 负载测试
YCSB在workloads
目录下有一些预定义的workload,这里以workloada为例:
bin/ycsb.sh load rocksdb -s -P workloads/workloada -p rocksdb.dir=/tmp/rocksdb_test/
但是直接运行这个会报错,因为默认的rocksdb/pom.xml
里少了依赖,要把core/pom.xml
里的这两个依赖加到rocksdb/pom.xml
里的dependencies
里:
- htrace
<dependency>
<groupId>org.apache.htrace</groupId>
<artifactId>htrace-core4</artifactId>
<version>4.1.0-incubating</version>
</dependency>
解决这个错误:
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/htrace/core/Tracer$Builder
- HdrHistogram
<dependency>
<groupId>org.hdrhistogram</groupId>
<artifactId>HdrHistogram</artifactId>
<version>2.1.4</version>
</dependency>
解决这个错误:
Exception in thread "Thread-2" java.lang.NoClassDefFoundError: org/HdrHistogram/EncodableHistogram
添加完这两个依赖之后再重新构建包:
mvn -pl site.ycsb:rocksdb-binding -am clean package -T 线程数
再跑workloada
:
rm -r /tmp/rocksdb_test/
bin/ycsb.sh load rocksdb -s -P workloads/workloada -p rocksdb.dir=/tmp/rocksdb_test/
¶ 切换rocksdb版本
YCSB项目根目录下的pom.xml里有一行:
<rocksdb.version>版本号</rocksdb.version>
修改版本号就会自动下载对应版本的rocksdb来测试性能了。
¶ 测试自己改的rocksdb的性能
¶ 安装依赖
¶ JDK
sudo apt install -y default-jdk
export JAVA_HOME=/usr/lib/jvm/default-java
参考:https://seekstar.github.io/2022/01/21/java-home-is-not-set/
¶ cmake
sudo apt install -y cmake
¶
更改Makefile
取消跨平台
教程:rocksdb在YCSB中的运行教程。注意,用#
注释掉可能不太行,最好直接删掉。
¶ 构建并使用rocksdb java包
因为YCSB是用java写的,所以要构建rocksdb的java包来测试。
make rocksdbjavastaticrelease DEBUG_LEVEL=0
编译出来的文件在java/target/rocksdbjni-6.27.3.jar
。
把这个文件复制到YCSB的rocksdb/target/dependency/
下面,然后更改rocksdb/pom.xml
,找到rocksdbjni
的部分,把它的version
从默认的
<version>${rocksdb.version}</version>
改成
<version>6.27.3</version>
这样就会使用我们手动编译出来的rocksdb版本了。然后重新构建binding:
mvn -pl site.ycsb:rocksdb-binding -am clean package
运行测试:
bin/ycsb.sh load rocksdb -s -P workloads/workloada -p rocksdb.dir=/tmp/rocksdb_test/
从输出可以看到已经用上了rocksdbjni-6.27.3.jar
:
/usr/lib/jvm/default-java/bin/java -classpath /home/searchstar/git/YCSB/conf:/home/searchstar/git/YCSB/core/target/core-0.18.0-SNAPSHOT.jar:/home/searchstar/git/YCSB/rocksdb/target/rocksdb-binding-0.18.0-SNAPSHOT.jar:/home/searchstar/git/YCSB/rocksdb/target/dependency/HdrHistogram-2.1.4.jar:/home/searchstar/git/YCSB/rocksdb/target/dependency/htrace-core4-4.1.0-incubating.jar:/home/searchstar/git/YCSB/rocksdb/target/dependency/jcip-annotations-1.0.jar:/home/searchstar/git/YCSB/rocksdb/target/dependency/rocksdbjni-6.27.3.jar:/home/searchstar/git/YCSB/rocksdb/target/dependency/slf4j-api-1.7.25.jar:/home/searchstar/git/YCSB/rocksdb/target/dependency/slf4j-simple-1.7.25.jar site.ycsb.Client -load -db site.ycsb.db.rocksdb.RocksDBClient -s -P workloads/workloada -p rocksdb.dir=/tmp/rocksdb_test/
¶ gitignore下载的依赖
rocksdb编译了之后会下载很多.tar.gz,并且解压到项目目录了。.tar.gz文件可以直接删掉。在这些依赖的目录里执行
echo \* > .gitignore
来让git忽略这些依赖。