热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

MongoDB数据库性能测试报告

之前做的一些mongodb的测试都是在exsi的两台虚拟间做的,由于虚拟机的问题,性能很不稳定。这两天正好有两台服务器空下来了,就用来跑了一下mongodb的并发测试。服务器软硬件配置:服务器:DellPowerEdgeR710CPU:IntelXeonE55302.4GX2硬盘:SAS3
之前做的一些mongodb的测试都是在exsi的两台虚拟间做的,由于虚拟机的问题,性能很不稳定。这两天正好有两台服务器空下来了,就用来跑了一下mongodb的并发测试。

服务器软硬件配置:

服务器:Dell PowerEdge R710
CPU: Intel Xeon E5530 2.4G X 2
硬盘:SAS 300G X 4 建立 Raid10
内存:16G

windows 2003 sp2 64位
mongodb 1.40 x64 for windows 

mongodb在这台上跑,测试程序在另一台服务器上跑,两台服务器配置基本一样,除了硬盘(另一台是SAS 147G X4  Raid10)。

测试程序在之前的java测试程序基础上做了修改,增加了多线性的并发测试功能,程序源代码可从下面的链接下载:

http://farmerluo.googlecode.com/files/mongotest_0.3.rar

程序用法:
Usage:
mysql test:
java -jar mongotest.jar <[select | update | insert] > < username >    
mongo test:
java -jar mongotest.jar <[select | update | insert] >  

由于时间关系,mysql没有来得急测试,只测试了mongodb。

后期准备再找机器在linux系统上好好的测一下mongodb和mysql的并发性能(因为我发现虽然mongodb在单用户测试的情况下性能很好,但随着并发用户的增加,性能都是往下掉的,而我跑了一次50个并发的mysql,总的吞吐量反而是往上走的,所以很有必要同时测一次mysql和mongodb的并发性能)。

先看一下测试结果,因为这里不好贴表,只能上图了:
【转】 mongodb 性能测试 - keben1983 - reasons blog

有一点需要说明一下,因为并发数为1的时候,select很慢,跑1000万花的时间过长,所以我这边只测试了10万条记录,我看看了数据,差别并不大。

测试的总记录数都是1000万,可以看到,随着并发数的增加,mongdb的insert吞吐量掉得很快。而update稍为平稳一些,总得也在往下走的,从查询来看,随着并发的增加,吞吐量也跟着增加,符合我们的预期。

insert的时候,mongodb会创建多个数据库文件,他会先创建一个64M的文件,不够用了再创建一个128M,然后是256M,512M,1G,2G,然后就是一直2G的创建下去。

测试程序写入的记录是每条1k多一点(4 X 256字符,再加一个int,一个默认的_id),所以1000万记录算出来差不多是10G(除了默认的索引_id,没有另外加其它索引)。而实际上,mongodb总共创建了147G的数据库文件。这样的存储容量对于想用固定硬盘的用户来说是个考验。

insert并发吞往下掉的原因,我怀疑是因为在多并发时mongodb同时操作IO有关,其实通过mongodb服务器上的监控程序我们看到,在mongodb创建1G的数据库文件之前,每秒insert有20000左右,后来就开始低了。我们知道,当写一个1G文件花的时间,总是要比同时写10个100M的文件来得要快。但是这块我想mongodb还有优化的空间,官网上也承认之前的版本并发性能并不好,所以在1.4版本上做了改进。

200并发时update反而比100并发性能要好,或许和单并发测试的数据比较少有关,在200并发时,单并发只测试了5万数据。

另外在高并发时,mongodb的稳定性和健状性也是非常值得关注的。我们在测试200并发时,跑了一段时间后,从mongodb的监控程序发现突然没有了insert的数据,然而java的测试程序也并没有报错,就一直停在那里不动。重启并做一些优化后才测试完200并发。

资源占用方面:cpu 20%上下,任务管理器内显示PF内存占用1G,但mongod进程显示占用了12G的内存做缓存使用了。

或许看线性图表更为直观一些:

【转】 mongodb 性能测试 - keben1983 - reasons blog

【转】 mongodb 性能测试 - keben1983 - reasons blog

另外也测试了一下大数据量的并发测试

内网测试,100线程,每线程50万记录:

D:\dist>java -Xms256M -Xmx1024M -jar mongotest.jar mongo insert 500000 100 192.168.1.12 dbtest
Total thread:100
Total run time:10404 sec
Per-thread rows:500000
Per-thread mongo insert Result:48row/sec
Total rows:50000000
Total mongo insert Result:4805row/sec

D:\dist>java -Xms256M -Xmx1024M -jar mongotest.jar mongo update 500000 100 192.168.1.12 dbtest
Total thread:100
Total run time:13103 sec
Per-thread rows:500000
Per-thread mongo update Result:38row/sec
Total rows:50000000
Total mongo update Result:3815row/sec

D:\dist>java -Xms256M -Xmx1024M -jar mongotest.jar mongo select 500000 100 192.168.1.12 dbtest
Total thread:100
Total run time:1869 sec
Per-thread rows:500000
Per-thread mongo select Result:267row/sec
Total rows:50000000
Total mongo select Result:26752row/sec

用这个数据对比表中100并发的数据,我们发现,虽然性能也在往下掉,但相比因并发增加而下降的性能来说并不夸张,在预期范围之内。由此可见,mongodb对于大数据量来说性能还是不错的。


推荐阅读
  • Docker的安全基准
    nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 58同城的Elasticsearch应用与平台构建实践
    本文由58同城高级架构师于伯伟分享,由陈树昌编辑整理,内容源自DataFunTalk。文章探讨了Elasticsearch作为分布式搜索和分析引擎的应用,特别是在58同城的实施案例,包括集群优化、典型应用实例及自动化平台建设等方面。 ... [详细]
  • 优化联通光猫DNS服务器设置
    本文详细介绍了如何为联通光猫配置DNS服务器地址,以提高网络解析效率和访问体验。通过智能线路解析功能,域名解析可以根据访问者的IP来源和类型进行差异化处理,从而实现更优的网络性能。 ... [详细]
  • 本文详细介绍了 Dockerfile 的编写方法及其在网络配置中的应用,涵盖基础指令、镜像构建与发布流程,并深入探讨了 Docker 的默认网络、容器互联及自定义网络的实现。 ... [详细]
  • 在Linux系统中配置并启动ActiveMQ
    本文详细介绍了如何在Linux环境中安装和配置ActiveMQ,包括端口开放及防火墙设置。通过本文,您可以掌握完整的ActiveMQ部署流程,确保其在网络环境中正常运行。 ... [详细]
  • 如何配置Unturned服务器及其消息设置
    本文详细介绍了Unturned服务器的配置方法和消息设置技巧,帮助用户了解并优化服务器管理。同时,提供了关于云服务资源操作记录、远程登录设置以及文件传输的相关补充信息。 ... [详细]
  • 本文深入探讨了Linux系统中网卡绑定(bonding)的七种工作模式。网卡绑定技术通过将多个物理网卡组合成一个逻辑网卡,实现网络冗余、带宽聚合和负载均衡,在生产环境中广泛应用。文章详细介绍了每种模式的特点、适用场景及配置方法。 ... [详细]
  • 本文详细分析了Hive在启动过程中遇到的权限拒绝错误,并提供了多种解决方案,包括调整文件权限、用户组设置以及环境变量配置等。 ... [详细]
  • 字节跳动夏季招聘面试经验分享
    本文详细记录了字节跳动夏季招聘的面试经历,涵盖了一、二、三轮面试的技术问题及项目讨论,旨在为准备类似面试的求职者提供参考。 ... [详细]
  • Spring Cloud因其强大的功能和灵活性,被誉为开发分布式系统的‘一站式’解决方案。它不仅简化了分布式系统中的常见模式实现,还被广泛应用于企业级生产环境中。本书内容详实,覆盖了从微服务基础到Spring Cloud的高级应用,适合各层次的开发者。 ... [详细]
  • 近期参与了一个旨在提高在线平台大规模查询响应速度的项目,预计处理的数据量为2-3亿条,数据库并发量约为每秒1500次,未来可能增至3000次。通过对比Redis和MongoDB,最终选择了MongoDB,因其具备优秀的横向扩展性和GridFS支持下的Map/Reduce功能。 ... [详细]
  • 掌握远程执行Linux脚本和命令的技巧
    本文将详细介绍如何利用Python的Paramiko库实现远程执行Linux脚本和命令,帮助读者快速掌握这一实用技能。通过具体的示例和详尽的解释,让初学者也能轻松上手。 ... [详细]
  • 本文探讨了如何优化和正确配置Kafka Streams应用程序以确保准确的状态存储查询。通过调整配置参数和代码逻辑,可以有效解决数据不一致的问题。 ... [详细]
  • Mongoose 5.12.10 发布:MongoDB 异步对象模型工具的新特性与修复
    Mongoose 是一款专为异步环境设计的 MongoDB 对象模型工具,支持 Promise 和回调函数。最新版本 Mongoose 5.12.10 带来了多项修复和改进,包括查询选项中的默认值设置、嵌入式判别器填充、以及 TypeScript 定义文件的优化。 ... [详细]
author-avatar
gj08rpb
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有