1. 安装并启动 TerarkSQL
2. 创建测试所需的数据库以及表
下载测试程序以及创建测试所需要表的 SQL 脚本
wget http://terark-downloads.oss-cn-qingdao.aliyuncs.com/docker_assets/ycsb-terarksql-test.tar.gz
tar zxvf ycsb-terarksql-test.tar.gz
创建测试表
mysql -uroot -h127.0.0.1 < ycsb-terarksql-test/mediawiki_table.sql
3. 导入 wikipedia 数据
下载 wikipedia 数据
wget http://dumps.wikimedia.your.org/enwiki/20170820/enwiki-20170820-pages-meta-current.xml.bz2
将 wikipedia 数据导入到数据库中
cd ycsb-terarksql-test/mwdumper
java -server -classpath mysql-connector-java-5.1.42-bin.jar:mwdumper-1.25.jar \
org.mediawiki.dumper.Dumper \
--output=mysql://127.0.0.1/my_wiki?user=root\&characterEncoding=latin1 \
--format=sql:1.5 /path/to/enwiki-20170820-pages-meta-current.xml.bz2
wikipeida 数据较大,导入需要较长时间,可以以 nohup 方式启动运行于后台。
4. 开始测试
前下载的 ycsb-terarksql-test.tar.gz 中已经包含了编译好的修改版 YCSB 测试程序:
cd ycsb-terarksql-test/ycsb-jdbc-binding-0.13.0-SNAPSHOT
该测试程序亦可通过源码直接编译:
git clone https://github.com/Terark/YCSB.git
cd YCSB
mvn -pl com.yahoo.ycsb:jdbc-binding -am clean package
若使用 wikipeida 数据进行测试,在导入的所有表中,text 表占所有数据大小的 77%,所以测试中仅对 text 表进行所有的测试。
整个测试过程,可以大致分为两个阶段,为:
随机读测试(只读)
读写混合测试
4.1. 配置文件准备
根据上面两个阶段,我们可以创建两个不同的配置文件,如:
wikipedia_read.conf,wikipedia_readwrite.conf
完整的配置选项参考这里
每个配置文件的配置项目各不相同, 参数的大致说明:
workload:指定我们定制的 workload:MySQLReadByKeyFromFileWorkload
keyfile:key 文件的路径
fieldnames:测试表中所有字段名,每一个使用“,”分割。
writerate:读写比例
mysql.upsert=true:在混合测试中会把随机读出的数据插入到一个临时表中,而可能会导致主键冲突,将 upsert 设为 true 以使用 REPLACE INTO 语法
4.2. 获取随机读取所使用 key 文件
此测试需要先生成 key 文件,若使用 wikipeida 数据进行测试,可以将 text 表的主键 old_id 导出并进行 shuf 以生成进行随机读取所需要的 key 文件:
mysql -uroot -h127.0.0.1
use my_wiki
select old_id from text into outfile "/path/to/wikipedia_text_old_ids.txt";
shuf /path/to/wikipedia_text_old_ids.txt > /path/to/wikipedia_text_old_ids_shuf.txt
4.3. 随机读测试
配置文件示例(wikipedia_read.conf):
# wikipedia_read.conf
workload=com.yahoo.ycsb.workloads.MySQLReadByKeyFromFileWorkload
# 总操作数,自由定义
operationcount=64000000
# 进行压测的数据表
table=text
# 表的字段
fieldnames=old_id,old_text,old_flags
# 表的主键
primarykey=old_id
#进行随机读写的 key 文件
keyfile=/path/to/wikipedia_text_old_ids_shuf.txt
jdbc.driver=com.mysql.jdbc.Driver
db.url=jdbc:mysql://127.0.0.1/my_wiki
db.user=root
db.passwd=
启动测试脚本:
./bin/ycsb run jdbc -s -P wikipedia_read.conf -threads 8 > read_wikipedia_thread_8.txt
4.4. 读写混合测试
在混合测试中会按预定比例将一部分数据写到一个临时表中去,使用 wikipeida 数据测试时可使用下面的 SQL 语句建立这个临时表:
CREATE TABLE `text_for_write` (`old_id` int(10) unsigned NOT NULL AUTO_INCREMENT, `old_text` mediumblob NOT NULL, `old_flags` tinyblob NOT NULL, PRIMARY KEY (`old_id`) ) ENGINE=ROCKSDB;
在开始每次混合测试时可以先将这个临时表清空:
truncate table text_for_write;
配置文件示例(wikipedia_readwrite.conf):
# wikipedia_readwrite.conf
workload=com.yahoo.ycsb.workloads.MySQLReadByKeyFromFileWorkload
# 总操作数,自由定义
operationcount=64000000
# 进行压测的数据表
table=text
# 写操作中数据插入的临时表
writetable=text_for_write
# 表的字段
fieldnames=old_id,old_text,old_flags
# 表的主键
primarykey=old_id
#进行随机读写的 key 文件
keyfile=/path/to/wikipedia_text_old_ids_shuf.txt
# 写占的比例,0.05 表示 5%
writerate=0.05
jdbc.driver=com.mysql.jdbc.Driver
db.url=jdbc:mysql://127.0.0.1/my_wiki
db.user=root
db.passwd=
mysql.upsert=true
启动测试脚本:
./bin/ycsb run jdbc -s -P wikipedia_readwrite.conf -threads 8 > readwrite_wikipedia_thread_8.txt