YCSB的调研使用(针对MongoDB)

1  YCSB是什么

    YCSB(Yahoo! Cloud Serving Benchmark)是雅虎开源的一款通用的性能测试工具。通过这个工具我们可以对各类NoSQL产品进行相关的性能测试,包括:HBase、Cassandra、Mongodb、Voldemort、Redis等。通过配置workload文件,YCSB可以灵活的模拟不同的测试负载和读写模式。

 

YCSB的几大特性:

  1. 支持常见的数据库读写操作,如插入,修改,删除及读取
  2. 多线程支持。YCSB用Java实现,有很好的多线程支持。
  3. 灵活定义场景文件。可以通过参数灵活的指定测试场景,如100%插入, 50%读50%写等等
  4. 数据请求分布方式:支持随机,zipfian(只有小部分的数据得到大部分的访问请求)以及最新数据几种请求分布方式
  5. 可扩展性:可以通过扩展Workload的方式来修改或者扩展YCSB的功能

 

2  YCSB安装

https://github.com/brianfrankcooper/YCSB/tree/master/mongodb  

$ curl -O --location

https://github.com/brianfrankcooper/YCSB/releases/download/0.5.0/ycsb-0.5.0.tar.gz

$ tar xfvz ycsb-0.5.0.tar.gz

$ cd ycsb-0.5.0

 

3  YCSB运行

异步驱动加载和运行数据:

./bin/ycsb load mongodb-async -s -P workloads/workloada > outputLoad.txt

./bin/ycsb run mongodb-async -s -P workloads/workloada > outputRun.txt

 

使用MongoDB公司的同步驱动加载和运行数据:

./bin/ycsb load mongodb -s -P workloads/workloada > outputLoad.txt

./bin/ycsb run mongodb -s -P workloads/workloada > outputRun.txt

 

4  YCSB配置参数和文件

参数:

-P file             指定workload文件

    -cp path            额外指定Java classpath路径

    -jvm-args args      额外指定JVM的参数

    -p key=value        workload的一些设置

    -s                  把状态达到stderr中

    -target n           目标每秒总共操作的次数(默认:unthrottled)

    -threads n          客户端线程数(默认:1)

   

mongodb.url:   默认值是mongodb://localhost:27017/ycsb?w=1, w=1表示writeConcern为acknowledged。默认数据库是ycsb

mongodb.batchsize:  默认1

mongodb.upsert:     默认false

mongodb.writeConcern:   已废弃,使用mongodb.url里的w 和 journal替代。默认acknowledged

mongodb.readPreference: 已废弃,使用mongodb.url里的readPreference 替代。默认primary

mongodb.maxconnections: 已废弃,使用mongodb.url里的maxPoolSize 替代。默认100

mongodb.threadsAllowedToBlockForConnectionMultiplier:       已废弃,使用mongodb.url里的waitQueueMultiple  替代。默认5

 

举例:

./bin/ycsb load mongodb -s -P workloads/workloada -p mongodb.url=mongodb://192.168.10.13:27017/ycsb?w=1 -threads 500 > outputLoad.txt



./bin/ycsb run mongodb -s -P workloads/workloada -p mongodb.url=mongodb://192.168.10.13:27017/ycsb?w=1 -threads 500 > outputRun.txt

 

 

workload文件

recordcount=10000000 # 测试数据集的记录条数

operationcount=10000000 # 测试过程中执行的操作总数

workload=com.yahoo.ycsb.workloads.CoreWorkload # workload实现类

 

readallfields=true # 查询时是否读取记录的所有字段

readproportion=0.5 # 读操作的百分比

updateproportion=0.5 # 更新操作的百分比

scanproportion=0 # 扫描操作的百分比

insertproportion=0 # 插入操作的百分比

requestdistribution=zipfian # 请求分布模式

 

       再次,运行YCSB。YCSB的运行分为两个阶段:测试数据加载阶段和测试操作执行阶段,前者用来加载测试数据集,后者用来执行正真的测试操作,两个阶段都要使用上面的配置文件。数据加载的执行命令为:./bin/ycsb load mongodb -threads 100 -P workloads/workloada,即根据workloada的配置要求启动100个线程并发加载测试数据,在执行完成后YCSB会打印出类似于下面的数据加载性能统计数据:

 

[OVERALL], RunTime(ms), 905346.0 # 数据加载所用时间(毫秒)

[OVERALL], Throughput(ops/sec), 11045.500836144412 # 加载操作的吞吐量(ops/sec)

[INSERT], Operations, 10000000 # 执行insert操作的总数

[INSERT], AverageLatency(us), 9024.8155659 # 每次insert操作的平均延时(微秒)

[INSERT], MinLatency(us), 139 # 所有insert操作的最小延时(微秒)

[INSERT], MaxLatency(us), 1022876 # 所有insert操作的最大延时(微秒)

[INSERT], 95thPercentileLatency(ms), 27 # 95%的insert操作延时在27毫秒以内

[INSERT], 99thPercentileLatency(ms), 42 # 99%的insert操作延时在42毫秒以内

[INSERT], Return=0, 10000000 # 成功返回数10000000

[INSERT], 0, 3793117 # 以下insert操作在各个延时时间区域的分布情况

[INSERT], 1, 37171

[INSERT], 2, 8035

[INSERT], 3, 6294

...

[INSERT], 999, 0

[INSERT], >1000, 5

 

 

5  YCSB提供的几个测试的模式

workloada:

特点:更新负载大。

        应用举例:会话存储记录最近的动作

        读/更新 比例: 50/50

        默认数据大小:1 KB的记录(10个字段,每个字段100 bytes,加上key)

请求分布模式:zipfian(YCSB提供uniform等概率随机选择记录, zipfian随机选择记录,存在热纪录, latest近期写入的记录是热记录三种分布模式)

 

workloadb:

特点:大部分是读负载。

        应用举例:照片标签:添加标签是更新,但大部分操作是读取标签

        读/更新 比例: 95/5

        默认数据大小:1 KB的记录(10个字段,每个字段100 bytes,加上key)

        请求分布模式:zipfian

 

workloadc:

特点:只读取。

        应用举例:用户配置文件缓存,其中配置文件是在别处构建的(例如,Hadoop)

        读/更新 比例: 100/0

        默认数据大小:1 KB的记录(10个字段,每个字段100 bytes,加上key)

        请求分布模式:zipfian

 

workloadd:

特点:读取最近数据的负载。

        应用举例:用户状态更新,用户想获取到最新的状态。

        读/更新/插入 比例: 95/0/5

        默认数据大小:1 KB的记录(10个字段,每个字段100 bytes,加上key)

        请求分布模式:latest

 

workloade:

特点:Short ranges。

        应用举例: 线程会话,其中每个扫描是针对给定的线程(假定由线程ID聚集)

        扫描/插入 比例: 95/5

        默认数据大小:1 KB的记录(10个字段,每个字段100 bytes,加上key)

        请求分布模式:zipfian

 

workloadf:

特点:。读-修改-写 负载

        应用举例:用户数据库,用户记录读取和修改用户记录或记录用户活动

        读/读-修改-写 比例: 50/50

        默认数据大小:1 KB的记录(10个字段,每个字段100 bytes,加上key)

        请求分布模式:zipfian

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值