ycsb mysql_使用 YCSB 测试 MySQL on TerarkDB

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

你可能感兴趣的:(ycsb,mysql)