-
Notifications
You must be signed in to change notification settings - Fork 7
使用 YCSB 测试 TerarkMongo
rockeet edited this page Aug 23, 2018
·
1 revision
目前我们提供了一个静态编译版本的 TerarkMongo 供用户进行测试,请通过下方的链接进行下载。
下载 mongod-Linux-x86_64-g++-4.8.tar.bz2
完成下载后,您可以直接安装运行即可。
- 启动 Mongod:
cd /path/to/mongod
LD_LIBRARY_PATH=$PWD/lib ./mongod -f config # `config` 是默认的配置文件
配置文件说明:
net:
bindIp: "0.0.0.0"
port: 27017
storage:
dbPath: "data" # 必须提前创建数据目录
engine: "rocksdb"
rocksdb:
maxWriteMBPerSec: 200 # 文件写入速度限流,根据 SSD 的性能调整
terarkdb:
enabled: true
localTempDir: "data/terark-tmp" # 必须提前创建
cleanTempDir: true
softZipWorkingMemLimit: 17179869184 # 16G,用总内存的 1/8
hardZipWorkingMemLimit: 34359738368 # 32G,总内存的 1/4
smallTaskMemory: 1073741824 # 1G,总内存的 1/64
- 创建测试用户及测试数据库
cd /path/to/mongo
./mongo
use database
db.createUser({user: "root", pwd: "root", roles: [ ]})
db.auth("root", "root")
db.createCollection("usertable")
用户可以根据自己的需要,自行选择测试数据集,一般来说要求测试数据集每行是一条完整记录,强烈建议使用真实数据进行测试。
我们为用户提供 wikipedia 的全量数据(103GB),经过 xz 高度压缩后大约 17GB,如果需要请联系我们获取下载地址。
git clone git@github.com:Terark/YCSB.git
cd YCSB
mvn -pl com.yahoo.ycsb:mongodb-binding -am clean package
这个步骤会编译必须的一些模块。
整个测试过程,可以大致分为三个阶段,分别是:
- 数据加载(只写)
- 随机读测试(只读)
- 读写混合测试
根据上面三个阶段,我们可以在YCSB根目录创建三个不同的配置文件,如:
wikipedia_load.conf
, wikipedia_read.conf
,wikipedia_readwrite.conf
完整的配置选项参考这里
每个配置文件的配置项目各不相同, 参数的大致说明:
workload:指定我们定制的 workload:FileWorkload
datafile:源数据的路径
fieldnames:每行数据中使用指定分隔符分割的数据项,每一个使用“,”分割,数量需要和源数据中数据项相同
writerate:读写比例
batchread:当其等于 1 时,使用 read;大于 1 时,使用 batchRead
delimiter:源数据中分割各数据项的分割符,如:“\t”,“\0”
mongodb.upsert=true:在混合测试中会把随机读出的数据插入到一个临时表中,而可能会导致主键冲突,故将 upsert 设为 true
mongodb.url: 参考 YCSB/MongoDB Configuration Parameters
配置文件示例(wikipedia_load.conf
):
# wikipedia_load.conf
# 需要插入的数据条数,一般是数据源的行数
recordcount=38508221
workload=com.yahoo.ycsb.workloads.FileWorkload
mongodb.url=mongodb://root:root@127.0.0.1:27017/database
mongodb.upsert=true
# 准备插入的数据源
datafile=/path/to/wikipedia.txt
# 数据源文件中,单行数据代表的各个字段名称
# 对于 wikipedia 数据可以是:cur_id,cur_namespace,cur_title,cur_text,cur_comment,cur_user,cur_user_text,cur_timestamp,cur_restrictions,cur_counter,cur_is_redirect,cur_minor_edit,cur_random,cur_touched,inverse_timestamp
fieldnames=fieldname1,fieldname2,fieldname3,fieldname4,fieldname5,fieldname6,...
# 单行数据中多个字端的字段分隔符
delimiter=\t
启动脚本:
./bin/ycsb load mongodb -s -P wikipedia_load.conf -threads 16 > load_wikipedia_thread_16.txt
输出文件在测试完成后会输出统一的统计信息,在测试过程中控制台会显示实时写入速度,和预估的写入剩余时间。
配置文件示例(wikipedia_read.conf
):
# wikipedia_read.conf
# 数据源的行数,用来内部计算一些hash值试用,与其他阶段数值需要相同
recordcount=38508221
# 总操作数,自由定义
operationcount=64000000
workload=com.yahoo.ycsb.workloads.FileWorkload
# 使用 uniform 分布进行读测试
requestdistribution=uniform
mongodb.url=mongodb://root:root@127.0.0.1:27017/database
mongodb.upsert=true
# 批量度设置,一次读取多少数据
batchread=1
启动测试脚本:
./bin/ycsb run mongodb -s -P wikipedia_read.conf -threads 16 > read_wikipedia_thread_16.txt
配置文件示例(wikipedia_readwrite.conf
):
# wikipedia_readwrite.conf
# 数据源的行数,用来内部计算一些hash值试用,与其他阶段数值需要相同
recordcount=38508221
# 总操作数,自由定义
operationcount=64000000
workload=com.yahoo.ycsb.workloads.FileWorkload
# 使用 uniform 分布进行读测试
requestdistribution=uniform
mongodb.url=mongodb://root:root@127.0.0.1:27017/database
mongodb.upsert=true
# 写占的比例,0.05 表示 5%
writerate=0.05
# 批量度设置,一次读取多少数据
batchread=1
启动测试脚本:
./bin/ycsb run mongodb -s -P wikipedia_readwrite.conf -threads 16 > readwrite_wikipedia_thread_16.txt
读写混合测试说明:
- 程序会在每次请求前生成 KEY 进行随机读取
- 读取到的数据,会按照预定的比例写回到另一个临时表中(
usertable_for_write
) - 每次开始测试之前,需要先清空临时表
usertable_for_write