mongodb性能测试报告
<h1>1 <strong>测试目的</strong></h1><p style="margin-left: 30px"><span style="font-family: "Microsoft YaHei"; font-size: 15px">模拟生产环境,测试当前mongoDB的各项性能。</span></p>
<h1>2 测试环境<strong><span style="font-family: 宋体"><br></span></strong></h1>
<h2>2.1 <strong>软件配置</strong></h2>
<p style="margin-left: 30px"><span style="font-family: 宋体"><img src="https://img2020.cnblogs.com/i-beta/1963340/202003/1963340-20200307154254782-803159302.png"></span></p>
<h2>2.2 <strong>硬件配置</strong></h2>
<p style="margin-left: 30px"> <img src="https://img2020.cnblogs.com/i-beta/1963340/202003/1963340-20200307154414870-1797552903.png"></p>
<h1>3 <strong>测试工具</strong></h1>
<p style="margin-left: 30px"><span style="font-family: "Microsoft YaHei"; font-size: 15px">YCSB是雅虎开源的NoSQL测试工具,通常用来对noSQL数据库进行性能,这里我们使用的是ycsb-mongodb-binding-0.15.0.tar.gz包。</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px">需要新建配置文件,并调整参数,并利用load/run命令,加载数据进行性能测试。</span></p>
<h2><strong>3.1</strong><strong>使用简介</strong></h2>
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px">#ycsb包解压后的目录结构</span></p>
<p style="margin-left: 30px"><strong><img src="https://img2020.cnblogs.com/i-beta/1963340/202003/1963340-20200307154543507-1245787399.png"></strong></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px">#使用前,我们要先了解命令结构</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px">命令示例:</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px">#/opt/ycsb/ycsb-mongodb-binding-0.15.0/bin/ycsb load mongodb -threads 1 -P workloads/workloada -p fieldcount=1 -p fieldlength=1024 -p table=ycsb1 -p clientbuffering=true -p mongodb.url=mongodb://用户:密码@ip:port/test?authSource=admin</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px">表1-4 命名参数说明</span></p>
<table border="1" cellspacing="0">
<tbody>
<tr>
<td valign="top" width="195">
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px">参数</span></p>
</td>
<td valign="top" width="373">
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px">含义</span></p>
</td>
</tr>
<tr>
<td valign="top" width="195">
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px">bin/ycsb</span></p>
</td>
<td valign="top" width="373">
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px">命令本身。</span></p>
</td>
</tr>
<tr>
<td valign="top" width="195">
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px">load/run/shell</span></p>
</td>
<td valign="top" width="373">
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px">指定这个命令的作用,分别代表加载数据/运行测试/交互界面。</span></p>
</td>
</tr>
<tr>
<td valign="top" width="195">
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px">mongodb/hbase10/basic..</span></p>
</td>
<td valign="top" width="373">
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px">指定这次测试使用的驱动,也就是这次究竟测的是什么数据库,有很多选项,可以ycsb --help看到所有。</span></p>
</td>
</tr>
<tr>
<td valign="top" width="195">
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px">threads</span></p>
</td>
<td valign="top" width="373">
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px">线程数,模拟客户端数</span></p>
</td>
</tr>
<tr>
<td valign="top" width="195">
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px">-P</span></p>
</td>
<td valign="top" width="373">
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px">选择加载的配置文件</span></p>
</td>
</tr>
<tr>
<td valign="top" width="195">
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px">workloads/workloada</span></p>
</td>
<td valign="top" width="373">
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px">指定测试的参数文件,默认有6种测试模板,加一个大模板;</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px">workloada:读写均衡型,50%/50%,Reads/Writes</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px">workloadb:读多写少型,95%/5%,Reads/Writes</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px">workloadc:只读型,100%,Reads</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px">workloadd:读最近写入记录型,95%/5%,Reads/insert</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px">workloade:扫描小区间型,95%/5%,scan/insert</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px">workloadf:读写入记录均衡型,50%/50%,Reads/insert</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px">workload_template:参数列表模板</span></p>
</td>
</tr>
<tr>
<td valign="top" width="195">
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px">-p fieldcount=1</span></p>
</td>
<td valign="top" width="373">
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px">单条记录字段个数:1</span></p>
</td>
</tr>
<tr>
<td valign="top" width="195">
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px">-p fieldlength=1024</span></p>
</td>
<td valign="top" width="373">
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px">每个字段的大小: 1024Bytes</span></p>
</td>
</tr>
<tr>
<td valign="top" width="195">
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px"> -p table=</span></p>
</td>
<td valign="top" width="373">
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px">自定义表名</span></p>
</td>
</tr>
<tr>
<td valign="top" width="195">
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px">-p clientbuffering=true</span></p>
</td>
<td valign="top" width="373">
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px">客户端写缓存 </span></p>
</td>
</tr>
<tr>
<td valign="top" width="195">
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px">-p mongodb.url=</span></p>
</td>
<td valign="top" width="373">
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px">指定测试的数据库的认证信息,账号密码,地址端口和库名</span></p>
</td>
</tr>
</tbody>
</table>
<p style="text-align: left"> </p>
<h2><strong>3.2 </strong><strong>YCSB<span style="font-family: 宋体">测试参数解析</span></strong></h2>
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px">workloads目录里面下包含自带了6种压力测试场景。 如下图:</span></p>
<p style="text-align: left; margin-left: 30px"><img src="https://img2020.cnblogs.com/i-beta/1963340/202003/1963340-20200307160641219-258723681.png"></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px">文件和相应场景的对应关系如下:</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px">workloada:读写均衡型,50%/50%,Reads/Writes</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px">workloadb:读多写少型,95%/5%,Reads/Writes</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px">workloadc:只读型,100%,Reads</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px">workloadd:读最近写入记录型,95%/5%,Reads/insert</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px">workloade:扫描小区间型,95%/5%,scan/insert</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px">workloadf:读写入记录均衡型,50%/50%,Reads/insert</span></p>
<p> </p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px">示例文件:</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px">#vim workloads/workloada</span></p>
<p style="text-align: left; margin-left: 30px"><img src="https://img2020.cnblogs.com/i-beta/1963340/202003/1963340-20200307160719372-1377859361.png"></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px">表1-5 workload参数含义</span></p>
<table border="1" cellspacing="0">
<tbody>
<tr>
<td valign="top" width="299">
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px">参数</span></p>
</td>
<td valign="top" width="268">
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px">含义</span></p>
</td>
</tr>
<tr>
<td valign="top" width="299">
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px">recordcount=1000</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px"> </span></p>
</td>
<td valign="top" width="268">
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px">YCSB load(加载元数据)命令的参数,默认值1000表示默认加载的记录条数,可以在命令行显示修改该值。</span></p>
</td>
</tr>
<tr>
<td valign="top" width="299">
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px">operationcount=1000</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px"> </span></p>
</td>
<td valign="top" width="268">
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px">YCSB run(运行压力测试)命令的参数,默认值1000表示默认选取数据库中的1000条数据进行压力测试。对于workloada这种测试场景,就意味着读数据在500左右,写数据也在500左右。</span></p>
</td>
</tr>
<tr>
<td valign="top" width="299">
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px">workload=com.yahoo.ycsb.workloads.CoreWorkload</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px"> </span></p>
</td>
<td valign="top" width="268">
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px">指定了workload的实现类为 com.yahoo.ycsb.workloads.CoreWorkload</span></p>
</td>
</tr>
<tr>
<td valign="top" width="299">
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px">readallfields=true</span></p>
</td>
<td valign="top" width="268">
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px">表示查询时是否读取记录的所有字段</span></p>
</td>
</tr>
<tr>
<td valign="top" width="299">
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px">readproportion=0.5</span></p>
</td>
<td valign="top" width="268">
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px">表示读操作的比例,该场景为0.5</span></p>
</td>
</tr>
<tr>
<td valign="top" width="299">
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px">updateproportion=0.5</span></p>
</td>
<td valign="top" width="268">
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px">表示更新操作的比例,该场景为0.5</span></p>
</td>
</tr>
<tr>
<td valign="top" width="299">
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px">scanproportion=0</span></p>
</td>
<td valign="top" width="268">
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px">表示扫描操作的比例</span></p>
</td>
</tr>
<tr>
<td valign="top" width="299">
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px">insertproportion=0</span></p>
</td>
<td valign="top" width="268">
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px">表示插入操作的比例</span></p>
</td>
</tr>
<tr>
<td valign="top" width="299">
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px">requestdistribution=zipfian</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px"> </span></p>
</td>
<td valign="top" width="268">
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px">表示请求的分布模式,YCSB提供uniform, zipfian, latest三种分布模式,</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px">Uniform(等概率随机选择记录)、Zipfian(随机选择记录,存在热纪录)和Latest(近期写入的记录是热记录)</span></p>
</td>
</tr>
</tbody>
</table>
<p style="text-align: left"> </p>
<h2><strong>3.3 </strong><strong>YCSB</strong><strong>测试工具命令</strong></h2>
<p><span style="font-size: 15px; font-family: "Microsoft YaHei"">1.先为指定的库和表指定hash分片</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px">mongo ip:端口</span></p>
<p><span style="font-size: 15px; font-family: "Microsoft YaHei"">>sh.enableSharding("test")</span></p>
<p><span style="font-size: 15px; font-family: "Microsoft YaHei"">>sh.shardCollection("test.usertable", {_id:"hashed"})</span></p>
<p> </p>
<p><span style="font-size: 15px; font-family: "Microsoft YaHei"">2.修改业务模型</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px">#cd /opt/ycsb-mongodb-binding-0.15.0/workloads</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px">#只插入100万条数据</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px">#vi workload-s1</span></p>
<p style="text-align: left"><img src="https://img2020.cnblogs.com/i-beta/1963340/202003/1963340-20200307161022606-152346711.png"></p>
<p> </p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px"> 3.数据写入</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px">#cd /opt/ycsb/ycsb-mongodb-binding-0.15.0</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px">#/opt/ycsb/ycsb-mongodb-binding-0.15.0/bin/ycsb load mongodb -threads 50 -P workloads/workload-s1-p fieldcount=1 -p fieldlength=1024 </span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px">-p clientbuffering=true -p table=ycsb1 -p mongodb.url=mongodb://账号:密码@ip:端口,ip:端口,ip:端口/test?authSource=admin</span></p>
<p> </p>
<p><span style="font-size: 15px; font-family: "Microsoft YaHei"">4.查看插入的数据</span></p>
<p><span style="font-size: 15px; font-family: "Microsoft YaHei"">#mongo ip:端口</span></p>
<p><span style="font-size: 15px; font-family: "Microsoft YaHei"">>use test</span></p>
<p><span style="font-size: 15px; font-family: "Microsoft YaHei"">>db.stats();</span></p>
<p><img src="https://img2020.cnblogs.com/i-beta/1963340/202003/1963340-20200307161352247-84009192.png"></p>
<p><span style="font-size: 15px; font-family: "Microsoft YaHei"">插入100万条数据后,可以看到每个share上都有33万多的objects,</span></p>
<p> </p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px">5.结果参数说明</span></p>
<p><span style="font-size: 14px"><img src="https://img2020.cnblogs.com/i-beta/1963340/202003/1963340-20200307161455151-367764278.png"></span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px">表1-6 ycsb运行结果说明</span></p>
<table border="1" cellspacing="0">
<tbody>
<tr>
<td valign="top" width="301">
<p><span style="font-size: 15px; font-family: "Microsoft YaHei"">参数</span></p>
</td>
<td valign="top" width="266">
<p><span style="font-size: 15px; font-family: "Microsoft YaHei"">说明</span></p>
</td>
</tr>
<tr>
<td valign="top" width="301">
<p><span style="font-size: 15px; font-family: "Microsoft YaHei"">RunTime(ms):</span></p>
</td>
<td valign="top" width="266">
<p><span style="font-size: 15px; font-family: "Microsoft YaHei"">运行总时间(毫秒)</span></p>
</td>
</tr>
<tr>
<td valign="top" width="301">
<p><span style="font-size: 15px; font-family: "Microsoft YaHei"">Throughput(ops/sec):</span></p>
</td>
<td valign="top" width="266">
<p><span style="font-size: 15px; font-family: "Microsoft YaHei"">吞吐量,每秒操作数</span></p>
</td>
</tr>
<tr>
<td valign="top" width="301">
<p><span style="font-size: 15px; font-family: "Microsoft YaHei"">, Count:</span></p>
</td>
<td valign="top" width="266">
<p><span style="font-size: 15px; font-family: "Microsoft YaHei""> Parallel Scavenge 回收次数</span></p>
</td>
</tr>
<tr>
<td valign="top" width="301">
<p><span style="font-size: 15px; font-family: "Microsoft YaHei"">, Time(ms):</span></p>
</td>
<td valign="top" width="266">
<p><span style="font-size: 15px; font-family: "Microsoft YaHei""> Parallel Scavenge 回收时间</span></p>
</td>
</tr>
<tr>
<td valign="top" width="301">
<p><span style="font-size: 15px; font-family: "Microsoft YaHei"">, Time(%):</span></p>
</td>
<td valign="top" width="266">
<p><span style="font-size: 15px; font-family: "Microsoft YaHei""> Parallel Scavenge 回收时间百分比</span></p>
</td>
</tr>
<tr>
<td valign="top" width="301">
<p><span style="font-size: 15px; font-family: "Microsoft YaHei"">, Count:</span></p>
</td>
<td valign="top" width="266">
<p><span style="font-size: 15px; font-family: "Microsoft YaHei"">PS MarkSweep 回收次数</span></p>
</td>
</tr>
<tr>
<td valign="top" width="301">
<p><span style="font-size: 15px; font-family: "Microsoft YaHei"">, Time(ms):</span></p>
</td>
<td valign="top" width="266">
<p><span style="font-size: 15px; font-family: "Microsoft YaHei"">PS MarkSweep 回收时间</span></p>
</td>
</tr>
<tr>
<td valign="top" width="301">
<p><span style="font-size: 15px; font-family: "Microsoft YaHei"">, Time(%):</span></p>
</td>
<td valign="top" width="266">
<p><span style="font-size: 15px; font-family: "Microsoft YaHei"">PS MarkSweep 回收时间百分比</span></p>
</td>
</tr>
<tr>
<td valign="top" width="301">
<p><span style="font-size: 15px; font-family: "Microsoft YaHei"">, Count:</span></p>
</td>
<td valign="top" width="266">
<p><span style="font-size: 15px; font-family: "Microsoft YaHei"">全局 GC 次数</span></p>
</td>
</tr>
<tr>
<td valign="top" width="301">
<p><span style="font-size: 15px; font-family: "Microsoft YaHei"">, Time(ms):</span></p>
</td>
<td valign="top" width="266">
<p><span style="font-size: 15px; font-family: "Microsoft YaHei"">全局 GC 时间</span></p>
</td>
</tr>
<tr>
<td valign="top" width="301">
<p><span style="font-size: 15px; font-family: "Microsoft YaHei"">, Time(%):</span></p>
</td>
<td valign="top" width="266">
<p><span style="font-size: 15px; font-family: "Microsoft YaHei"">全局 GC 时间百分比</span></p>
</td>
</tr>
<tr>
<td valign="top" width="301">
<p><span style="font-size: 15px; font-family: "Microsoft YaHei"">不同操作类型:READ\UPDATE\INSERT\SCAN等;</span></p>
</td>
<td valign="top" width="266">
<p><span style="font-size: 15px; font-family: "Microsoft YaHei""> </span></p>
</td>
</tr>
<tr>
<td valign="top" width="301">
<p><span style="font-size: 15px; font-family: "Microsoft YaHei"">Operations</span></p>
</td>
<td valign="top" width="266">
<p><span style="font-size: 15px; font-family: "Microsoft YaHei"">总操作数</span></p>
</td>
</tr>
<tr>
<td valign="top" width="301">
<p><span style="font-size: 15px; font-family: "Microsoft YaHei"">AverageLatency(us)</span></p>
</td>
<td valign="top" width="266">
<p><span style="font-size: 15px; font-family: "Microsoft YaHei"">平均延迟(微秒)</span></p>
</td>
</tr>
<tr>
<td valign="top" width="301">
<p><span style="font-size: 15px; font-family: "Microsoft YaHei"">MinLatency(us)</span></p>
</td>
<td valign="top" width="266">
<p><span style="font-size: 15px; font-family: "Microsoft YaHei"">最小延迟(微秒)</span></p>
</td>
</tr>
<tr>
<td valign="top" width="301">
<p><span style="font-size: 15px; font-family: "Microsoft YaHei"">MaxLatency(us)</span></p>
</td>
<td valign="top" width="266">
<p><span style="font-size: 15px; font-family: "Microsoft YaHei"">最大延迟(微秒)</span></p>
</td>
</tr>
<tr>
<td valign="top" width="301">
<p><span style="font-size: 15px; font-family: "Microsoft YaHei"">95thPercentileLatency(us) :</span></p>
</td>
<td valign="top" width="266">
<p><span style="font-size: 15px; font-family: "Microsoft YaHei"">95%的样本延迟低于该值</span></p>
</td>
</tr>
<tr>
<td valign="top" width="301">
<p><span style="font-size: 15px; font-family: "Microsoft YaHei"">99thPercentileLatency(us)</span></p>
</td>
<td valign="top" width="266">
<p><span style="font-size: 15px; font-family: "Microsoft YaHei"">99%的样本延迟低于该值</span></p>
</td>
</tr>
<tr>
<td valign="top" width="301">
<p><span style="font-size: 15px; font-family: "Microsoft YaHei"">Return=OK </span></p>
</td>
<td valign="top" width="266">
<p><span style="font-size: 15px; font-family: "Microsoft YaHei"">结果(正确),总操作数</span></p>
</td>
</tr>
</tbody>
</table>
<p> </p>
<h1><strong>4 测试方法</strong></h1>
<ul>
<li><span style="font-family: "Microsoft YaHei"; font-size: 15px">使用YCSB-mongoDB对测试环境下test库进行各项测试。</span></li>
</ul>
<h2>4.1 <strong>测试环境</strong></h2>
<p style="margin-left: 30px"><img src="https://img2020.cnblogs.com/i-beta/1963340/202003/1963340-20200307161616069-518169666.png"></p>
<h2><strong>4.2</strong><strong><span style="font-family: 宋体">测试模型</span></strong></h2>
<p style="margin-left: 30px"><img src="https://img2020.cnblogs.com/i-beta/1963340/202003/1963340-20200307161642135-129859886.png"></p>
<h2><strong>4.3</strong><strong><span style="font-family: 宋体">测试指标</span></strong></h2>
<p style="margin-left: 30px"><span style="font-family: "Microsoft YaHei"; font-size: 15px">(1)OPS:Operator per Second,数据库每秒执行的操作数。</span></p>
<p style="margin-left: 30px"><span style="font-family: "Microsoft YaHei"; font-size: 15px">(2)AverageLatency,平均响应时间。</span></p>
<p style="margin-left: 30px"><span style="font-family: "Microsoft YaHei"; font-size: 15px">(3)评判指标:直到发现ops不再增加而平均响应时间继续增加;</span></p>
<h2><strong>4.4<span style="font-family: 宋体">测试步骤</span></strong></h2>
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px">1.先为指定的库和表指定hash分片</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px">#mongo ip:端口</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px">>sh.enableSharding("test")</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px">>sh.shardCollection("test.ycsb1", {_id:"hashed"})</span></p>
<p> </p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px">2.文档模型:</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px">修改YCSB配置,每个文档大小约为1KB,默认“_id”索引。</span></p>
<p> </p>
<p><span style="font-size: 15px; font-family: "Microsoft YaHei"">3.配置workload文件。</span></p>
<p><span style="font-size: 15px; font-family: "Microsoft YaHei"">按照表1-8业务模型所示的业务模型,配置workload中的“readproportion”、“insertproportion”、“updateproportion”等值。</span></p>
<p> </p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px">4.以业务模型workload_s1为例,执行以下命令,准备数据。</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px">#cd /opt/ycsb/ycsb-mongodb-binding-0.15.0</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px">#/opt/ycsb/ycsb-mongodb-binding-0.15.0/bin/ycsb<span style="background-color: rgba(255, 255, 0, 1)"> load</span> mongodb -threads 50 -P workloads/workload-s1 -p fieldcount=1 -p fieldlength=1024</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px"> -p clientbuffering=true -p table=ycsb1 -p mongodb.url=mongodb://账号:密码@ip:端口,ip:端口,ip:端口/test?authSource=admin </span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px"> 1>workload_s1_load.result 2> workload_s1_load.log</span></p>
<p> </p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px">5.以业务模型workload_s1为例,执行以下命令,测试性能</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px">#cd /opt/ycsb/ycsb-mongodb-binding-0.15.0</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px">#/opt/ycsb/ycsb-mongodb-binding-0.15.0/bin/ycsb <span style="background-color: rgba(255, 255, 0, 1)">run</span> mongodb -threads 50 -P workloads/workload-s1 -p fieldcount=1 -p fieldlength=1024</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px"> -p clientbuffering=true -p table=ycsb1 -p mongodb.url=mongodb://账号:密码@ip:端口,ip:端口,ip:端口/test?authSource=admin</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px"> 1>workload_s1_run.result 2> workload_s1_run.log</span></p>
<h1>5 <strong>测试用例</strong></h1>
<h2>5.1 <strong> <span style="font-family: 宋体">用例</span>1 insert </strong><strong>mongoDB<span style="font-family: 宋体">测试库</span></strong></h2>
<table border="1" cellspacing="0">
<tbody>
<tr>
<td colspan="2" valign="top" width="568">
<p align="center"><span style="font-family: "Microsoft YaHei"; font-size: 15px"><strong>测试用例1:</strong><strong>插入</strong><strong>mongoDB测试库</strong></span></p>
</td>
</tr>
<tr>
<td valign="top" width="105">
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px"><strong>测试目的</strong></span></p>
</td>
<td valign="top" width="462">
<p><span style="font-size: 15px; font-family: "Microsoft YaHei"">在测试库100% 导入1亿条数据,观察请求状态</span></p>
</td>
</tr>
<tr>
<td valign="top" width="105">
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px"><strong>前置条件</strong></span></p>
</td>
<td valign="top" width="462">
<p><span style="font-size: 15px; font-family: "Microsoft YaHei"">1、mongoDB正常运行</span><br><span style="font-size: 15px; font-family: "Microsoft YaHei"">2、客户端运行正常</span></p>
</td>
</tr>
<tr>
<td valign="top" width="105">
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px"><strong>步骤</strong></span></p>
</td>
<td valign="top" width="462">
<p><span style="font-size: 15px; font-family: "Microsoft YaHei"">1、根据需求测试项,指定mongodb分片,调整测试模型</span></p>
<p><span style="font-size: 15px; font-family: "Microsoft YaHei"">2、准备数据 </span></p>
<p><span style="font-size: 15px; font-family: "Microsoft YaHei"">/opt/ycsb/ycsb-mongodb-binding-0.15.0/bin/ycsb load mongodb</span></p>
<p><span style="font-size: 15px; font-family: "Microsoft YaHei""> -threads 50 -P workloads/workload-s1 -p fieldcount=1 </span></p>
<p><span style="font-size: 15px; font-family: "Microsoft YaHei""> -p fieldlength=1024 -p clientbuffering=true -p </span><span style="font-size: 15px; font-family: "Microsoft YaHei"">table=ycsb1 </span></p>
<p><span style="font-size: 15px; font-family: "Microsoft YaHei""> -p mongodb.url=mongodb://账号:密码@ip:端口,ip:端口,ip:端口/test?authSource=admin </span></p>
<p><span style="font-size: 15px; font-family: "Microsoft YaHei"">1>workload_s1_load.result 2> workload_s1_load.log</span></p>
<p><span style="font-size: 15px; font-family: "Microsoft YaHei"">3、测试数据</span></p>
<p><span style="font-size: 15px; font-family: "Microsoft YaHei"">/opt/ycsb/ycsb-mongodb-binding-0.15.0/bin/ycsb run mongodb -threads 50 -P workloads/workload-s1 -p fieldcount=1 </span></p>
<p><span style="font-size: 15px; font-family: "Microsoft YaHei"">-p fieldlength=1024 -p clientbuffering=true </span></p>
<p><span style="font-size: 15px; font-family: "Microsoft YaHei"">-p table=ycsb1 -p mongodb.url=mongodb://账号:密码@ip:端口,ip:端口,ip:端口/test?authSource=admin</span></p>
<p><span style="font-size: 15px; font-family: "Microsoft YaHei""> 1>workload_s1_run.result 2> workload_s1_run.log</span></p>
<p><span style="font-size: 15px; font-family: "Microsoft YaHei"">4、记录测试结果</span></p>
<p><span style="font-size: 15px; font-family: "Microsoft YaHei"">5、调整线程数,继续测试,并记录结果</span></p>
<p><span style="font-size: 15px; font-family: "Microsoft YaHei"">6、通过调整线程数,直到发现ops不再增加而响应时间继续增加。</span></p>
</td>
</tr>
<tr>
<td valign="top" width="105">
<p><span style="font-size: 15px; font-family: "Microsoft YaHei""><strong>获取指标</strong></span></p>
</td>
<td valign="top" width="462">
<p><span style="font-size: 15px; font-family: "Microsoft YaHei"">1、读写耗时、吞吐量、平均响应时间</span></p>
</td>
</tr>
<tr>
<td valign="top" width="105">
<p><span style="font-size: 15px; font-family: "Microsoft YaHei""><strong>参数化变量</strong></span></p>
</td>
<td valign="top" width="462">
<p><span style="font-size: 15px; font-family: "Microsoft YaHei""> </span></p>
</td>
</tr>
<tr>
<td valign="top" width="105">
<p><span style="font-size: 15px; font-family: "Microsoft YaHei""><strong>数据准备要求</strong></span></p>
</td>
<td valign="top" width="462">
<p><span style="font-size: 15px; font-family: "Microsoft YaHei""> </span></p>
</td>
</tr>
<tr>
<td valign="top" width="105">
<p><span style="font-size: 15px; font-family: "Microsoft YaHei""><strong>备注</strong></span></p>
</td>
<td valign="top" width="462">
<p><span style="font-size: 15px; font-family: "Microsoft YaHei"">在测试前,确保网络畅通</span></p>
</td>
</tr>
</tbody>
</table>
<p> </p>
<h2><strong>5.2 <span style="font-family: 宋体">用例</span><span style="font-family: "Times New Roman"">2 update&read </span></strong><strong>mongoDB<span style="font-family: 宋体">测试库</span></strong></h2>
<table border="1" cellspacing="0">
<tbody>
<tr>
<td colspan="2" valign="top" width="568">
<p align="center"><span style="font-size: 15px; font-family: "Microsoft YaHei""><strong>测试用例2:</strong><strong>update</strong><strong>&read </strong><strong> mongoDB测试库</strong></span></p>
</td>
</tr>
<tr>
<td valign="top" width="105">
<p><span style="font-size: 15px; font-family: "Microsoft YaHei""><strong>测试目的</strong></span></p>
</td>
<td valign="top" width="462">
<p><span style="font-size: 15px; font-family: "Microsoft YaHei"">在测试库90%更新和10%读取测试1亿条数据,观察请求状态</span></p>
</td>
</tr>
<tr>
<td valign="top" width="105">
<p><span style="font-size: 15px; font-family: "Microsoft YaHei""><strong>前置条件</strong></span></p>
</td>
<td valign="top" width="462">
<p><span style="font-size: 15px; font-family: "Microsoft YaHei"">1、mongoDB正常运行</span><br><span style="font-size: 15px; font-family: "Microsoft YaHei"">2、客户端运行正常</span></p>
</td>
</tr>
<tr>
<td valign="top" width="105">
<p><span style="font-size: 15px; font-family: "Microsoft YaHei""><strong>步骤</strong></span></p>
</td>
<td valign="top" width="462">
<p><span style="font-size: 15px; font-family: "Microsoft YaHei"">1、根据需求测试项,指定mongodb分片,调整测试模型</span></p>
<p><span style="font-size: 15px; font-family: "Microsoft YaHei"">2、预备数据 </span></p>
<p><span style="font-size: 15px; font-family: "Microsoft YaHei""> 参照如上命令</span></p>
<p><span style="font-size: 15px; font-family: "Microsoft YaHei"">3.测试数据</span></p>
<p><span style="font-size: 15px; font-family: "Microsoft YaHei""> 参照如上命令</span></p>
<p><span style="font-size: 15px; font-family: "Microsoft YaHei"">4、记录测试结果;</span></p>
<p><span style="font-size: 15px; font-family: "Microsoft YaHei"">5、调整线程数,继续测试,并记录结果;</span></p>
<p><span style="font-size: 15px; font-family: "Microsoft YaHei"">6、通过调整线程数,直到发现ops不再增加而响应时间继续增加。</span></p>
</td>
</tr>
<tr>
<td valign="top" width="105">
<p><span style="font-size: 15px; font-family: "Microsoft YaHei""><strong>获取指标</strong></span></p>
</td>
<td valign="top" width="462">
<p><span style="font-size: 15px; font-family: "Microsoft YaHei"">1、读写耗时、吞吐量、平均响应时间</span></p>
</td>
</tr>
<tr>
<td valign="top" width="105">
<p><span style="font-size: 15px; font-family: "Microsoft YaHei""><strong>参数化变量</strong></span></p>
</td>
<td valign="top" width="462">
<p><span style="font-size: 15px; font-family: "Microsoft YaHei""> </span></p>
</td>
</tr>
<tr>
<td valign="top" width="105">
<p><span style="font-size: 15px; font-family: "Microsoft YaHei""><strong>数据准备要求</strong></span></p>
</td>
<td valign="top" width="462">
<p><span style="font-size: 15px; font-family: "Microsoft YaHei""> </span></p>
</td>
</tr>
<tr>
<td valign="top" width="105">
<p><span style="font-size: 15px; font-family: "Microsoft YaHei""><strong>备注</strong></span></p>
</td>
<td valign="top" width="462">
<p><span style="font-size: 15px; font-family: "Microsoft YaHei"">在测试前,确保网络畅通</span></p>
</td>
</tr>
</tbody>
</table>
<p> </p>
<h2><strong>5.3 <span style="font-family: 宋体">用例</span><span style="font-family: "Times New Roman"">3 read&insert&update </span></strong><strong>mongoDB<span style="font-family: 宋体">测试库</span></strong></h2>
<table border="1" cellspacing="0">
<tbody>
<tr>
<td colspan="2" valign="top" width="568">
<p align="center"><span style="font-family: "Microsoft YaHei"; font-size: 15px"><strong>测试用例3:</strong><strong>update&read mongoDB测试库</strong></span></p>
</td>
</tr>
<tr>
<td valign="top" width="105">
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px"><strong>测试目的</strong></span></p>
</td>
<td valign="top" width="462">
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px">在测试库65%读取,10%插入和25%更新测试1亿条数据,观察请求状态</span></p>
</td>
</tr>
<tr>
<td valign="top" width="105">
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px"><strong>前置条件</strong></span></p>
</td>
<td valign="top" width="462">
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px">1、mongoDB正常运行</span><br><span style="font-family: "Microsoft YaHei"; font-size: 15px">2、客户端运行正常</span></p>
</td>
</tr>
<tr>
<td valign="top" width="105">
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px"><strong>步骤</strong></span></p>
</td>
<td valign="top" width="462">
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px">1、根据需求测试项,指定mongodb分片,调整测试模型</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px">2、预备数据</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px"> 参照如上命令</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px">3.测试数据</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px"> 参照如上命令</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px">4、记录测试结果;</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px">5、调整线程数,继续测试,并记录结果;</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px">6、通过调整线程数,直到发现ops不再增加而响应时间继续增加。</span></p>
</td>
</tr>
<tr>
<td valign="top" width="105">
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px"><strong>获取指标</strong></span></p>
</td>
<td valign="top" width="462">
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px">1、读写耗时、吞吐量、平均响应时间</span></p>
</td>
</tr>
<tr>
<td valign="top" width="105">
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px"><strong>参数化变量</strong></span></p>
</td>
<td valign="top" width="462">
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px"> </span></p>
</td>
</tr>
<tr>
<td valign="top" width="105">
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px"><strong>数据准备要求</strong></span></p>
</td>
<td valign="top" width="462">
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px"> </span></p>
</td>
</tr>
<tr>
<td valign="top" width="105">
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px"><strong>备注</strong></span></p>
</td>
<td valign="top" width="462">
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px">在测试前,确保网络畅通</span></p>
</td>
</tr>
</tbody>
</table>
<p> </p>
<h2><strong>5.4 <span style="font-family: 宋体">用例</span><span style="font-family: "Times New Roman"">4 read&update </span></strong><strong>mongoDB<span style="font-family: 宋体">测试库</span></strong></h2>
<table border="1" cellspacing="0">
<tbody>
<tr>
<td colspan="2" valign="top" width="568">
<p align="center"><span style="font-family: "Microsoft YaHei"; font-size: 15px"><strong>测试用例</strong><strong>4</strong><strong>:</strong>read&update<strong> mongoDB测试库</strong></span></p>
</td>
</tr>
<tr>
<td valign="top" width="105">
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px"><strong>测试目的</strong></span></p>
</td>
<td valign="top" width="462">
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px">在测试库50%读取,50%更新测试1亿条数据,观察请求状态</span></p>
</td>
</tr>
<tr>
<td valign="top" width="105">
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px"><strong>前置条件</strong></span></p>
</td>
<td valign="top" width="462">
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px">1、mongoDB正常运行</span><br><span style="font-family: "Microsoft YaHei"; font-size: 15px">2、客户端运行正常</span></p>
</td>
</tr>
<tr>
<td valign="top" width="105">
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px"><strong>步骤</strong></span></p>
</td>
<td valign="top" width="462">
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px">1、根据需求测试项,指定mongodb分片,调整测试模型</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px">2、预备数据</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px"> 参照如上命令</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px">3.测试数据</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px"> 参照如上命令</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px">4、记录测试结果;</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px">5、调整线程数,继续测试,并记录结果;</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px">6、通过调整线程数,直到发现ops不再增加而响应时间继续增加。</span></p>
</td>
</tr>
<tr>
<td valign="top" width="105">
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px"><strong>获取指标</strong></span></p>
</td>
<td valign="top" width="462">
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px">1、读写耗时、吞吐量、平均响应时间</span></p>
</td>
</tr>
<tr>
<td valign="top" width="105">
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px"><strong>参数化变量</strong></span></p>
</td>
<td valign="top" width="462">
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px"> </span></p>
</td>
</tr>
<tr>
<td valign="top" width="105">
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px"><strong>数据准备要求</strong></span></p>
</td>
<td valign="top" width="462">
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px"> </span></p>
</td>
</tr>
<tr>
<td valign="top" width="105">
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px"><strong>备注</strong></span></p>
</td>
<td valign="top" width="462">
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px">在测试前,确保网络畅通</span></p>
</td>
</tr>
</tbody>
</table>
<p> </p>
<h2><strong>5.5 <span style="font-family: 宋体">用例</span><span style="font-family: "Times New Roman"">5 read </span></strong><strong>mongoDB<span style="font-family: 宋体">测试库</span></strong> </h2>
<table border="1" cellspacing="0">
<tbody>
<tr>
<td colspan="2" valign="top" width="568">
<p align="center"><span style="font-family: "Microsoft YaHei"; font-size: 15px"><strong>测试用例</strong><strong>5</strong><strong>:</strong><strong>read mongoDB测试库</strong></span></p>
</td>
</tr>
<tr>
<td valign="top" width="105">
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px"><strong>测试目的</strong></span></p>
</td>
<td valign="top" width="462">
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px">在测试库100%读取1亿条数据,观察请求状态</span></p>
</td>
</tr>
<tr>
<td valign="top" width="105">
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px"><strong>前置条件</strong></span></p>
</td>
<td valign="top" width="462">
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px">1、mongoDB正常运行</span><br><span style="font-family: "Microsoft YaHei"; font-size: 15px">2、客户端运行正常</span></p>
</td>
</tr>
<tr>
<td valign="top" width="105">
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px"><strong>步骤</strong></span></p>
</td>
<td valign="top" width="462">
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px">1、根据需求测试项,指定mongodb分片,调整测试模型</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px">2、预备数据</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px"> 参照如上命令</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px">3.测试数据</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px"> 参照如上命令</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px">4、记录测试结果;</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px">5、调整线程数,继续测试,并记录结果;</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px">6、通过调整线程数,直到发现ops不再增加而响应时间继续增加。</span></p>
</td>
</tr>
<tr>
<td valign="top" width="105">
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px"><strong>获取指标</strong></span></p>
</td>
<td valign="top" width="462">
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px">1、读写耗时、吞吐量、平均响应时间</span></p>
</td>
</tr>
<tr>
<td valign="top" width="105">
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px"><strong>参数化变量</strong></span></p>
</td>
<td valign="top" width="462">
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px"> </span></p>
</td>
</tr>
<tr>
<td valign="top" width="105">
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px"><strong>数据准备要求</strong></span></p>
</td>
<td valign="top" width="462">
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px"> </span></p>
</td>
</tr>
<tr>
<td valign="top" width="105">
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px"><strong>备注</strong></span></p>
</td>
<td valign="top" width="462">
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px">在测试前,确保网络畅通</span></p>
</td>
</tr>
</tbody>
</table>
<p> </p>
<h1>6 <strong>测试场景</strong></h1>
<table border="1" cellspacing="0">
<tbody>
<tr>
<td rowspan="2" valign="top" width="93">
<p align="center"><span style="font-family: "Microsoft YaHei"; font-size: 15px"><strong>测试类别</strong></span></p>
</td>
<td rowspan="2" valign="top" width="87">
<p align="center"><span style="font-family: "Microsoft YaHei"; font-size: 15px"><strong>场景</strong></span></p>
</td>
<td valign="top" width="209">
<p align="center"><span style="font-family: "Microsoft YaHei"; font-size: 15px"><strong>场景的组织</strong></span></p>
</td>
<td rowspan="2" valign="top" width="141">
<p align="center"><span style="font-family: "Microsoft YaHei"; font-size: 15px"><strong>场景的控制</strong></span></p>
</td>
</tr>
<tr>
<td valign="top" width="209">
<p align="center"><span style="font-family: "Microsoft YaHei"; font-size: 15px"><strong>用例</strong></span></p>
</td>
</tr>
<tr>
<td valign="top" width="93">
<p align="center"><span style="font-family: "Microsoft YaHei"; font-size: 15px">mongoDB性能测试</span></p>
</td>
<td valign="top" width="87">
<p align="center"><span style="font-family: "Microsoft YaHei"; font-size: 15px">场景1</span></p>
</td>
<td valign="top" width="209">
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px">6.1插入性能测试 </span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px">100% insert</span></p>
</td>
<td valign="top" width="141">
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px">云服务自带监控</span></p>
</td>
</tr>
<tr>
<td valign="top" width="93">
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px">mongoDB性能测试</span></p>
</td>
<td valign="top" width="87">
<p align="center"><span style="font-family: "Microsoft YaHei"; font-size: 15px">场景2</span></p>
</td>
<td valign="top" width="209">
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px">6.2更新,读取性能测试</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px">90% update ,10% read</span></p>
</td>
<td valign="top" width="141">
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px">云服务自带监控</span></p>
</td>
</tr>
<tr>
<td valign="top" width="93">
<p align="center"><span style="font-family: "Microsoft YaHei"; font-size: 15px">mongoDB性能测试</span></p>
</td>
<td valign="top" width="87">
<p align="center"><span style="font-family: "Microsoft YaHei"; font-size: 15px">场景3</span></p>
</td>
<td valign="top" width="209">
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px">6.3读取,插入,更新性能测试</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px">65% read ,25% insert, 10% update</span></p>
</td>
<td valign="top" width="141">
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px">云服务自带监控</span></p>
</td>
</tr>
<tr>
<td valign="top" width="93">
<p align="center"><span style="font-family: "Microsoft YaHei"; font-size: 15px">mongoDB性能测试</span></p>
</td>
<td valign="top" width="87">
<p align="center"><span style="font-family: "Microsoft YaHei"; font-size: 15px">场景4</span></p>
</td>
<td valign="top" width="209">
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px">6.4 读取,更新性能测试</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px">50% read , 50% update</span></p>
</td>
<td valign="top" width="141">
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px">云服务自带监控</span></p>
</td>
</tr>
<tr>
<td valign="top" width="93">
<p align="center"><span style="font-family: "Microsoft YaHei"; font-size: 15px">mongoDB性能测试</span></p>
</td>
<td valign="top" width="87">
<p align="center"><span style="font-family: "Microsoft YaHei"; font-size: 15px">场景5</span></p>
</td>
<td valign="top" width="209">
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px">6.5 读取性能测试</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px">100% read</span></p>
</td>
<td valign="top" width="141">
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px">云服务自带监控</span></p>
</td>
</tr>
</tbody>
</table>
<h1>7 <strong>测试结果分析</strong></h1>
<h2>7.1 <strong> Intert</strong><strong>性能测试</strong></h2>
<h3>7.1.1 <strong>测试参数记录</strong></h3>
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px">分片集群100% insert写入测试记录结果如下:</span></p>
<table border="0" cellspacing="0">
<tbody>
<tr>
<td valign="center" width="49">
<p align="center"><span style="font-family: "Microsoft YaHei"; font-size: 15px"><strong>线程</strong></span></p>
</td>
<td valign="center" width="96">
<p align="center"><span style="font-family: "Microsoft YaHei"; font-size: 15px"><strong>类型</strong></span></p>
</td>
<td valign="center" width="61">
<p align="center"><span style="font-family: "Microsoft YaHei"; font-size: 15px"><strong>数据条数</strong></span></p>
</td>
<td valign="center" width="88">
<p align="center"><span style="font-family: "Microsoft YaHei"; font-size: 15px"><strong>runtime(</strong><strong>m</strong><strong>s)</strong></span></p>
</td>
<td valign="center" width="89">
<p align="center"><span style="font-family: "Microsoft YaHei"; font-size: 15px"><strong>O</strong><strong>ps/sec</strong></span></p>
</td>
<td valign="center" width="138">
<p align="center"><span style="font-family: "Microsoft YaHei"; font-size: 15px"><strong>AverageLatency(</strong><strong>u</strong><strong>s)</strong></span></p>
</td>
<td valign="center" width="89">
<p align="center"><span style="font-family: "Microsoft YaHei"; font-size: 15px"><strong>操作执行数</strong></span></p>
</td>
</tr>
<tr>
<td valign="center" width="49">
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px">50</span></p>
</td>
<td valign="center" width="96">
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px">分片-insert</span></p>
</td>
<td valign="center" width="61">
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px"> </span></p>
</td>
<td valign="center" width="88">
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px"> </span></p>
</td>
<td valign="center" width="89"><span style="font-family: "Microsoft YaHei"; font-size: 15px"> </span></td>
<td valign="center" width="138"><span style="font-family: "Microsoft YaHei"; font-size: 15px"> </span></td>
<td valign="center" width="89">
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px"> </span></p>
</td>
</tr>
<tr>
<td valign="center" width="49">
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px">100</span></p>
</td>
<td valign="center" width="96">
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px">分片-insert</span></p>
</td>
<td valign="center" width="61">
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px"> </span></p>
</td>
<td valign="center" width="88">
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px"> </span></p>
</td>
<td valign="center" width="89">
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px"> </span></p>
</td>
<td valign="center" width="138"><span style="font-family: "Microsoft YaHei"; font-size: 15px"> </span></td>
<td valign="center" width="89">
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px"> </span></p>
</td>
</tr>
<tr>
<td valign="center" width="49">
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px">200</span></p>
</td>
<td valign="center" width="96">
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px">分片-insert</span></p>
</td>
<td valign="center" width="61">
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px"> </span></p>
</td>
<td valign="center" width="88">
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px"> </span></p>
</td>
<td valign="center" width="89"><span style="font-family: "Microsoft YaHei"; font-size: 15px"> </span></td>
<td valign="center" width="138">
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px"> </span></p>
</td>
<td valign="center" width="89">
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px"> </span></p>
</td>
</tr>
<tr>
<td valign="center" width="49">
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px">400</span></p>
</td>
<td valign="center" width="96">
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px">分片-insert</span></p>
</td>
<td valign="center" width="61">
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px"> </span></p>
</td>
<td valign="center" width="88">
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px"> </span></p>
</td>
<td valign="center" width="89">
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px"> </span></p>
</td>
<td valign="center" width="138"><span style="font-family: "Microsoft YaHei"; font-size: 15px"> </span></td>
<td valign="center" width="89"><span style="font-family: "Microsoft YaHei"; font-size: 15px"> </span></td>
</tr>
</tbody>
</table>
<h3>7.1.2<strong>测试结果</strong></h3>
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px"> 绘制图表</span></p>
<h3>7.1.3 <strong>资源情况分析</strong></h3>
<p> <span style="font-family: "Microsoft YaHei"; font-size: 15px"> Mongos是数据库集群请求的入口,所有的请求都通过mongos进行协调,不需要在应用程序添加一个路由选择器,</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px">mongos自己就是一个请求分发中心,它负责把对应的数据请求请求转发到对应的shard服务器上。</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px">1.下图100线程时,使用mongostat监测到mongos的情况;</span></p>
<p> <img src="https://img2020.cnblogs.com/i-beta/1963340/202003/1963340-20200307165020726-81911242.png"></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px">参数解释:</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px">inserts 每秒插入次数</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px">command 每秒的命令数</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px">vsize 虚拟内存使用量</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px">res 物理内存使用量</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px">net_in/net_out 网络进出流量</span></p>
<p> </p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px">2.下图为200线程时,mongos的cpu和带宽使用情况;</span></p>
<p> <img src="https://img2020.cnblogs.com/i-beta/1963340/202003/1963340-20200307165153460-382144067.png"></p>
<p> <img src="https://img2020.cnblogs.com/i-beta/1963340/202003/1963340-20200307165158888-19757778.png"></p>
<p><span style="font-size: 14px"> </span> <span style="font-family: "Microsoft YaHei"; font-size: 15px">Mongos的cpu使用率稳定在50%左右,输入流量稳定在13MB/s;mongos进行协调请求,</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px">再将数据进行转发到后端;通过监控到mongos的cpu,内存,网络带宽一直处在稳定的状态;</span></p>
<p> </p>
<p><span style="font-size: 14px"> </span><span style="font-family: "Microsoft YaHei"; font-size: 15px">3.Config server,为配置服务器,存储所有数据库元信息(路由、分片)的配置。在生</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px"> 产环境通常有多个 config server 配置服务器,因为它存储了分片路由的元数据,防止数据丢失。</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px">下图为400线程下config的cpu和内存使用率;cpu稳定在20%以下,内存稳定在30%以下;</span></p>
<p style="text-align: left"><img src="https://img2020.cnblogs.com/i-beta/1963340/202003/1963340-20200307165421562-11683137.png"></p>
<p> <img src="https://img2020.cnblogs.com/i-beta/1963340/202003/1963340-20200307165425567-740664607.png"></p>
<p> </p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px">4.每个分片都是一个独立的数据库,所有的分片组合起来构成一个逻辑上的完整的数据库。</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px">分片机制降低了每个分片的数据操作量及需要存储的数据量,达到多台服务器来应对不断增加的负载和数据的效果。</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px">下图为400线程,share的cpu,内存和带宽使用情况,看到cpu大部分时间已处于100%的状态;内存使用率在60%以下,带宽为16MB/s;</span></p>
<p style="text-align: left"><img src="https://img2020.cnblogs.com/i-beta/1963340/202003/1963340-20200307165520253-716640616.png"></p>
<p> <img src="https://img2020.cnblogs.com/i-beta/1963340/202003/1963340-20200307165524817-1638870003.png"></p>
<p> <img src="https://img2020.cnblogs.com/i-beta/1963340/202003/1963340-20200307165532837-690109318.png"></p>
<p> </p>
<p style="margin-left: 30px"><span style="font-family: "Microsoft YaHei"; font-size: 15px">在云环境上,后端为分布式存储池,无法监控具体的磁盘写入情况;</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px">但每当内存中的数据累计到一定量(或者一定时间),MongoDB会将内存数据flush到磁盘,</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px">并清理脏页数据,此时该shard的cpu使用率也会飙升,达到规格上限;</span></p>
<p style="text-align: left"> </p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px">后续省略</span></p>
<p style="text-align: left"><span style="font-family: "Microsoft YaHei"; font-size: 15px">。</span></p>
<p style="text-align: left"><span style="font-family: "Microsoft YaHei"; font-size: 15px">。</span></p>
<p style="text-align: left"><span style="font-family: "Microsoft YaHei"; font-size: 15px">。</span></p>
<h1>8 <strong>测试结果总结</strong></h1>
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px">1.当前测试结果绘制图表</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px">2.当前瓶颈分析</span></p>
<p style="margin-left: 30px"><span style="font-family: "Microsoft YaHei"; font-size: 15px">Sharding cluster是一种可以水平扩展的模式,在数据量很大时特给力,实际大规模应用一般会采用这种架构去构建。</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px"> sharding分片很好的解决了单台服务器磁盘空间、内存、cpu等硬件资源的限制问题,把数据水平拆分出去,降低单节点的访问压力。</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 15px">从以上测试记录,当share的cpu达到100%时,插入,更新和读取等操作性能有所下降,综上,目前性能受限于分片的cpu。</span></p>
<p style="margin-left: 30px"><span style="font-family: "Microsoft YaHei"; font-size: 15px; background-color: rgba(255, 255, 0, 1)"><span style="color: rgba(255, 0, 0, 1)"><strong>特别说明</strong></span>:测试结论只适用于本次测试;</span></p><br><br>
来源:https://www.cnblogs.com/llwxhn/p/12434732.html
頁:
[1]