YCSB压测MongoDB
一.前言现在有个项目,五年时间会产生一亿条数据,所以领导想知道使用mongodb数据库,一亿条数据量中查询一条数据的响应时间。
一.前言
现在有个项目,五年时间会产生一亿条数据,所以领导想知道使用mongodb数据库,一亿条数据量中查询一条数据的响应时间。
二.工具调研
mongodb的版本是4.4.6,jmeter的版本是5.0,最开始想用jmeter去做压测,将jmeter的配置文件做了修改,出现了mongodb source config,但是最后执行报错,最后查询到是mongodb4.0以上废除了这个方法,所以无奈只能放弃jmeter。有兴趣了解的小伙伴可以见最后一章,共同探讨。
最后选择的工具为YCSB,以下基于centos 8,从安装部署开始,介绍YCSB的使用。
三.安装部署
1.安装jdk1.8
一行命令即可:sudo apt-get install openjdk-8-jdk
2.安装maven
①下载地址:https://maven.apache.org/download.cgi
②拷贝到服务器,然后解压:tar -zxvf apache-maven-3.8.1-bin.tar.gz
③配置maven_home:sudo vi /etc/profile
在最后一行追加:
#Maven_home
export MAVEN_HOME=/usr/local/apache-maven-3.8.1
export PATH=${MAVEN_HOME}/bin:$PATH
④执行命令立即生效:source /etc/profile
⑤验证是否安装成功:mvn -version
3.安装python2.7
执行命令:apt install python-minimal
4.安装YCSB
①下载地址:https://github.com/brianfrankcooper/YCSB/releases/tag/0.17.0
②拷贝到服务器后解压:tar -zxvf ycsb-0.17.0.tar.gz
③进入ycsb的bin目录下,执行./ycsb,如果执行成功,则证明可以使用
四.workload配置文件参数解释
ycsb是通过加载workload文件来进行操作的,ycsb提供了几个workload模板,在workloads文件夹下,分别是:
workloada:混合了50%的读和50%的写;
workloadb:混合了95%的读和5%的写,该workload侧重于测试集群的读能力;
workloadc:100%只读
workloadd:插入数据,接着就读取这些新插入的数据
workloade:短范围scan,不同于随机读,每个测试线程都会去scan一段数据
workloadf: 读改写,客户端读出一个记录,修改它并将被修改的记录返回
workload文件中具体的参数意义如下,可以自己添加修改:
fieldcount: 每条记录字段个数 (default: 10)
fieldlength: 每个字段长度 (default: 100)
readallfields: 是否读取所有字段true或者读取一个字段false (default: true)
readproportion: 读取作业比例 (default: 0.95)
updateproportion: 更新作业比例 (default: 0.05)
insertproportion: 插入作业比例 (default: 0)
scanproportion: 扫描作业比例 (default: 0)
readmodifywriteproportion: 读取一条记录修改它并写回的比例 (default: 0)
requestdistribution: 请求的分布规则 uniform, zipfian or latest (default: uniform)
maxscanlength: 扫描作业最大记录数 (default: 1000)
scanlengthdistribution: 在1和最大扫描记录数的之间的分布规则 (default: uniform)
insertorder: 记录被插入的规则ordered或者hashed (default: hashed)
operationcount: 执行的操作数.
maxexecutiontime: 执行操作的最长时间,当然如果没有超过这个时间以运行时间为主。
table: 测试表的名称 (default: usertable)
recordcount: 加载到数据库的纪录条数 (default: 0)
例如,我插入一亿条数据的workload文件配置如下,由于是纯插入,所以readproportion读写比例是0,就是纯插入,另外指定了5个字段,每个字段长度为150:
五.执行压测
可以把自定义的workload文件放置到bin目录下,如此可执行以下命令:./ycsb load mongodb -s -P myworkload -threads 100 >load_test.txt
threads指定了100线程,>后面的参数代表着报告所在的路径
测试的报告如下:
在此期间cpu、内存的使用率如下(8核16G):
六.执行查询
由于只查询一条即可,也没并发要求,所以我在MongoDB Compass执行的查询操作。
在没有设置index的时候,查询速度要160多秒,如下图:
在加上index后,查询时间只需1-2毫秒,如下图:
但是加上index后,内存的使用率也会涨到53%左右。
七.jmeter使用
由于对其它项目的压测都是用jmter,所以mongodb也是第一反应使用jmeter进行压测,但是最后以失败告终,放在这里纯属探讨。
1.首先jmter3.0以上就不支持mongodb了,需要在配置文件中强行开启,然后才能看到mongod source config
修改bin/user.properties文件,在最后一行追加:not_in_menu =
2.设置MongoDB配置文件属性
转自于:https://www.cnblogs.com/greattao/p/6541718.html
可以参照上面的博客进行配置
3.执行时报错
错误内容为:'no such command: '$eval''
4.网上找到的解释
所以放弃了jmeter
更多推荐
所有评论(0)