使用YCSB检测MongoDB
使用YCSB检测MongoDB
英文原文:
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版本。测试所有的依赖正常工作。例如:
javac 1.8.0_25
$ mvn -version
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"
$ git -version
git version 1.9.5 (Apple Git-50.3)
正如Github页YCSB的建议,你可以wget下YCSB的tar压缩包。但是我们推荐从源文件构建。步骤已在YCSB的MongoDB README文档化。这将帮助我们之后对云提供商启用MongoDB验证。
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”)来插入数据库。选择适当数量的线程以便插入不会花费很长时间。例如:
- 使用YCSB检测MongoDB
- Android 使用LeakCanary检测安卓中的内存泄漏
- 如何检测使用Qt Creator制作的程序中的括号是否匹配
- mongoengine|mongodb|flask_sqlalchemy简单使用对比
- MongoDB导出工具mongoexport的使用
- windows下mongodb的安装使用
- 使用Gflags来检测heap问题
- 使用python让nao检测naomark并输出信息
- cgroup实践---使用cgroup限制mongodb进程内存
- 使用 MongoDB 的兄弟,有没有采用 GridFS 做分布式文件系统的?
- 使用MongoDB.NET 2.2.4驱动版本对 Mongodb3.3数据库中GridFS增删改查
- 自己封装的三维AABB包围盒类,用于三维模型静态碰撞检测,可以直接调用,使用OpenGL进行绘制
- 使用 Kafka 和 MongoDB 进行 Go 异步处理
- 使用errno检测错误
- Unix下C程序内存泄漏检测工具Valgrind的安装与使用详解
- mongoDB2.6,java使用详解
- MongoDB的基本操作与在Python中的使用
- 使用KSAT检测可加载内核模块
- Wordnik的MongoDB使用经验
- 十个 MongoDB 使用要点