英文原文:

http://blog.mongodirector.com/how-to-benchmark-mongodb-with-ycsb/

当谈到系统性能特性,大多数DBaaS提供商提供他们预置系统的有限信息。的确,基于在这样一个系统下给定的大量参数的部署,很难准确的讨论云的实际吞吐量和延时。虚拟化环境、不可预测的负载、网络延时、不同地址位置只是考虑的一部分。

然而对于你的MongoDB部署的真实性能有一个公正的理解是个好注意:以至于你可以基于你的应用需求准确预置;以至于你可以真实的比较大量的DBaaS提供商,确保最实惠。

这篇博文是在你的MongoDB集群上运行一些基本的性能检测的入门。详细讲述如何配置和运行YCSB基准测试并解释了结果。灵感来自于当前的MongoDB博客关于MongoDB 3.0性能提高。

YCSB是一个流行的Java开源规范和由雅虎开发的程序套件,用于比较大量NoSQL数据库的相对性能。这些工作负载用于大量NoSQL数据库的比较研究。

部署YCSB

这部分和接下来的部分将会引导你,在你钟爱的DBaaS提供商系统上,一步步安装、配置和运行YCSB测试。

为了运行负载测试,你需要一个客户端机器,与你的MongoDB集群在相同的地理位置最好,可以避免网络延时。选择一个合适的配置运行多线程,恰当的加载你的MongoDB集群。该机器需要安装有当前版本的Java、Maven和git。

步骤:

  • 如果Java、Maven或git还没有在你的系统上安装,安装他们。参照你的操作系统对应的可用文档。确保安装了与你的Java版本兼容的Maven版本。测试所有的依赖正常工作。例如:

1
$ javac -version
1
javac 1.8.0_25
1
$ mvn -version
1
2
3
4
5
6
Apache Maven 3.3.1 (cab6659f9874fa96462afef40fcf6bc033d58c1c; 2015-03-14T01:40:27+05:30)
Maven home: /usr/local/Cellar/maven/3.3.1/libexec
Java version: 1.8.0_25, vendor: Oracle Corporation
Java home: /Library/Java/JavaVirtualMachines/jdk1.8.0_25.jdk/Contents/Home/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "mac os x", version: "10.10.2", arch: "x86_64", family: "mac"

1
$ git -version
1
git version 1.9.5 (Apple Git-50.3)
  • 正如Github页YCSB的建议,你可以wget下YCSB的tar压缩包。但是我们推荐从源文件构建。步骤已在YCSB的MongoDB README文档化。这将帮助我们之后对云提供商启用MongoDB验证。

1
2
3
git clone git://github.com/brianfrankcooper/YCSB.git
cd YCSB
mvn clean package

  • 注意:如果你的`mvn clean package`或`mvn clean install`命令失败,根据位于“mapkeeper”包的错误,在pom.xml的root层删除或注释“mapkeeper”条目的两个实例。查看这里Github问题获取更多信息。

  • 一旦构建成功,我们现在准备运行YCSB测试!

启用验证

大多数MongoDB提供商默认提供MongoDB验证并无法禁用它。不幸的是,YCSB当前不支持MongoDB验证。客户端实现现在主要使用废弃的API调用。为了满足我们的需求,我们添加了一个新的MongoDB专属YCSB属性,'mongodb.auth'和几行代码支持它。这个修改非常简单并且在这里可以找到不同。默认MongoDB专属YCSB属性在这里列出。

再次使用mvn构建包,修改完成。参考上面部分关于如何使用Maven构建YCSB。

运行测试


YCSB wiki这部分详细列出了接下来的活动。我们将在这里简要描述下。

  • 下一步是选择你要运行的负载类型。花时间阅读和理解YCSB wiki的核心负载部分。它们总结在这里:

    • 负载A:重更新负载:50/50%混合读/写

    • 负载B:读为主负载:95/5%混合读/写

    • 负载C:只读:100%读

    • 负载D:最新读负载:更多流量在当前插入

    • 负载E:短距离:短程查询

    • 负载F:读-修改-写:读、修改和更新存在的记录

  • 显然个体工作负载可以使用核心属性调整。你可能想选择一个负载,调整属性匹配你应用程序的特性。例如,对比研究选择了大批有趣的“调整过的”负载。也参考了在第一部分提到的MongoDB博客。例如,对于我们的测试我们将采用负载A带有默认读/写比率。

  • 选择操作的数量(属性“operationcount”)以致测试运行适当的时间。30分钟内完成测试不是系统一般性能的好的指示。

  • 选择适当数量的YCSB运行的线程。这真的依赖于你的客户端机器有多好,你的MongoDB集群可以承受多少负载和你的实际应用多么有代表性。我们将对大量的线程运行基准测试。

  • 运行负载阶段。选择一个接近你想运行的操作数量的记录数量(属性“recordcount”)来插入数据库。选择适当数量的线程以便插入不会花费很长时间。例如:

1
2
3
./bin/ycsb load mongodb -s -P workloads/workloada -p recordcount=10000000 -threads 16 -p
mongodb.url="mongodb://user:pwd@server1.example.com:9999,server2.example.com:9999/dbname" -p
mongodb.auth="true"

    • ‘load‘标记表名它是一个导入操作。

    • ‘s‘标记以10秒的间隔打印状态。

    • ‘recordcount‘被设置为1千万。

    • ‘threads‘设置客户端线程数量为16

    • ‘mongodb.auth‘是启用MongoDB验证的属性。

  • 记得

    • 重定向标准输出到一个文件

    • 使用‘screen‘或一个等价的方法,以便当运行这些操作的时候你的会话不会丢失。

  • 一旦数据导入阶段完成,你准备运行你的负载。例如:

1
2
3
./bin/ycsb run mongodb -s -P workloads/workloada -p
mongodb.url="mongodb://user:pwd@server1.example.com:9999,server2.example.com:9999/dbname" –p
mongodb.auth="true" -p operationcount=10000000 -threads 2

  • 使用大量的线程重复运行。记住重定向结果以便你之后可以比较它们。例如,我们用2、4、8、16和32个线程重复测试。

分析结果

这篇YCSB wiki页面的最后部分谈到了分析结果。最有趣的一些信息是整体吞吐量(Overall Throughput)和95/99%百分比延时(Percentile Latencies)。直到当收益变平和延时不可接受时,通常增加线程数量增加了吞吐量。例如,这张图描述了对一个我们要检测的测试系统,吞吐量和延时和线程数的对比。选择的负载是负载A和大约3百万操作。

Throughput/Latency vs #Threads

对于MongoDB服务器从负载的角度,从图中可以推断出16个线程也能是热点区域:超过了它,对于线程数呈指数增长,吞吐量的线是平的,而延时变得无法接受的大。

一些观点:

  • 为了云上系统性能的更好的图片,自动化并重复这些测试应该在一天的不同点。我们注意到性能的特性会在这一天显著变化。

  • 当比较两个潜在的DBaaS提供商,确保在相同的地理位置选择你的客户端机器和DBaaS集群。集群应该有类似的配置。也要记住在一天的不同时间运行测试。

接下来

这是一些我们需要研究的事情,因为我们在这个方面做了更多工作:

  • 从多台机器并行运行负载:当尝试加载一个高容量的MongoDB集群,单一一台客户端机器无法满足。YCSB当前没有提供容易的方法并行从多台机器运行负载。然而可以手动完成。当尝试加载数据到一个大型集群时也是有用的。

  • 数据集大小:数据库的大小相对MongoDB系统的内存将完全改变吞吐量/延时特性,对于大型数据集MongoDB只得命中磁盘。

  • 个体记录的大小:当记录尺寸很大,尤其当它接近最大支持的尺寸时,对于性能特性是有趣的。这可能对主要做读-修改-回写操作(像负载F)的应用程序是关键性的。

  • 不同的MongoDB驱动:因为我们当前正对比较两个不同的DBaaS提供商感兴趣,我们没有尝试使用更多有效的数据库驱动。显然使用最新和更有效的驱动可以获得更好的绝对数。对应用程序尝试抽取系统的最后价值是有趣的。这篇博文谈到了使用一个异步的MongoDB驱动通过YCSB的性能提升度量。

  • 不同的检测工具:Sysbench对于MongoDB我们发现是有趣的。我们正在看其他的。

本文转自UltraSQL51CTO博客,原文链接:http://blog.51cto.com/ultrasql/1740989 ,如需转载请自行联系原作者

使用YCSB检测MongoDB相关推荐

  1. 使用ycsb对mongodb做性能测试

    我的专栏地址:我的segmentfault,欢迎浏览 一.ycsb压测工具 1.1ycsb workload ycsb的workloads目录下保存了6种不同的workload类型,代表了不同的压测负 ...

  2. YCSB benchmark测试mongodb性能——和web服务器测试性能结果类似

    转自:http://blog.sina.com.cn/s/blog_48c95a190102v9kg.html         YCSB(Yahoo! Cloud Serving Benchmark) ...

  3. ycsb 测试验证模式的mongodb

    相关信息 Down load url:  https://github.com/brianfrankcooper/YCSB ycsb version:   0.3.1 环境: python2.6    ...

  4. test.php.bak,MongoDB热备份工具:解决官方版备份缺陷

    贺春旸,凡普金科DBA团队负责人,<MySQL管理之道:性能调优.高可用与监控>第一.二版作者,曾任职于中国移动飞信.安卓机锋网.致力于MariaDB.MongoDB等开源技术的研究,主要 ...

  5. Mongodb系列:初识Mongodb

    一.背景: 月初进行了期末考试很荣幸能够参加到了考试系统维护中(详情请阅读:<那些年我们一起参加的活动:15年上半年考试系统维护总结>)!主要负责服务器维护,在维护期间对Mongodb相逢 ...

  6. MongoDB不同压缩算法的影响

    1.基本信息 版本3.4.5 测试 zlib 和snappy 4.2支持zetc没有测试 2.过程 数据大小: fieldcount=8 fieldlength=250 db.createCollec ...

  7. 《Linux运维实战:Centos7.6一键离线部署mongodb4.2.23副本集群》

    一.部署背景 由于业务系统的特殊性,我们需要面向不通的客户安装我们的业务系统,而作为基础组件中的mongodb针对不同的客户环境需要多次部署,作为一个运维工程师,提升工作效率也是工作中的重要一环.所以 ...

  8. 打造自己的弱口令扫描工具

    在内网检测中,弱口令扫描是必不可少的环节,选择一个好用的弱口令扫描工具,尤为重要. 我曾写过一款弱口令检测工具,经常有童鞋在后台询问关于iscan源代码的事情,但其实通过Python打造自己的弱口令扫 ...

  9. 响应式Spring的道法术器(Spring WebFlux 教程)

    Spring WebFlux 2小时快速入门 Spring 5 之使用Spring WebFlux开发响应式应用. lambda与函数式(15min) Reactor 3 响应式编程库(60min) ...

最新文章

  1. NLP文本标注工具与平台(数据标注公司)
  2. “剁手”的第十年,AI加持下的快递速度你还满意吗?
  3. python----四种内置数据结构(dict、list、tuple、set)
  4. .dat文件写入byte类型数组_文件字节流、文件字符流、缓冲字节流、缓冲字符流字节数组流、数据流、转换流、对象流...
  5. bzoj 4898: [Apio2017]商旅【Floyd+分数规划+二分】
  6. JQuery的Ajax标准写法
  7. ios刺客信条一直显示连接服务器,刺客信条本色iOS进不去怎么办
  8. Engineering Dynamics 2 --- 动量和角动量
  9. nx531j android版本,努比亚Z11(NX531J)安卓6.0 魅族Flyme6.7.12.29R刷机包 紫火版 20180108更新...
  10. 把ip导入mysql_纯真IP数据库导入mysql
  11. 合并excel方法汇总
  12. php推送手机,PHP_解析php做推送服务端实现ios消息推送,准备工作1.获取手机注册应用 - phpStudy...
  13. 《机器学习基石》第12节课学习笔记
  14. 错过了落日余晖 还有满天繁星
  15. Linux网卡驱动pcnet32.c的注释(AM79C9*系列网卡的驱动)
  16. 苹果开发者注册设备异常记录
  17. NETDMIS5.0建立坐标系举例2023
  18. 【泛函分析】Thomae function
  19. 大数据分析处理关键技术有哪些?
  20. Iptables与Firewalld防火墙(最详细说明)

热门文章

  1. 有关于近期大量数据库暴光的分析
  2. Net设计模式实例之备忘录模式(Memento Pattern)
  3. prim算法求最小生成树_克鲁斯卡尔算法(Kruskal算法)求最小生成树
  4. 修改 pip 下载源
  5. 机器人学习--卡尔曼滤波及各种滤波解析
  6. Matlab | 数字信号处理:卷积
  7. HTML+CSS+JavaScript复习笔记持更(六)——CSS3常用属性之文本
  8. Linux下的socket演示程序
  9. VC++获取屏幕大小第三篇 物理大小GetDeviceCaps 下
  10. PyTorch机器学习从入门到实战