`
cloudmail
  • 浏览: 271043 次
  • 来自: 广州
社区版块
存档分类
最新评论

MongoDB、HandlerSocket和MySQL性能测试及其结果分析

 
阅读更多

一、测试环境
1、测试服务器状况
共涉及4台测试服务器:

压力测试服务器
Web服务器
MongoDB服务器

MySQL服务器。

 

机器配置为:
CPU:Intel(R) Core(TM)2 Duo CPU     E7200  @ 2.53GHz
RAM:8G DDR2 667
磁盘:SATA

操作系统:Redhat 5.5

 

1. 压力测试服务器
安装Webbench 1.5,通过Webbench来压Web服务器。

 

2. Web服务器
Nginx 0.8.54 + PHP 5.3.3 (php-fpm),安装有Mongodb和HandlerSocket的php驱动。
Mongodb的php驱动为:mongodb-mongo-php-driver-1.1.1-19-gc584231.tar.gz
HandlerSocket的php驱动为:php-handlersocket-0.0.7.tar.gz
通过Php程序来调用Mongodb和HandlerSocket。

 

3. MongoDB服务器
MongoDB版本:1.6.5

 

4. MySQL服务器
MySQL版本:5.1.53
HandlerSocket版本:1.0.6-60-gf51e061
MySQL存储引擎:Innodb,调整了innodb的Thread Pool Size为2G


2、测试程序和测试数据提取
1. 为了避免打开连接和Http服务器成为瓶颈,在测试程序里设置为每1000个请求公用同一个连接,同时设置为每个页面请求执行1000次数据请求。
2. 测试的数据,包括QPS、CPU、IO等方面的数据,从操作系统提供的命令(如vmstat、iostat等)或者Mongodb、Mysql提供的命令(如mongostat、mysqladmin等)来获取。


二、测试结果
1、100万条记录
1. 查询

 

 

2. 插入


2、1000万条记录
1. 查询


2. 插入

 

3、2000万条记录

1. 查询

 
2. 插入

 


4、5000万条记录
1. 查询

 

2. 插入 


三、测试分析总结

1、 I/O读写情况
从插入情况下的TPS数据可以看出, MySQL、HandlerSocket和Mongodb的数据有比较明显的差别,这主要跟他们的内部实现和测试方式有关系。

 

测试场景下MySQL采用的是单条Insert的方式,所以可以看出QPS数和TPS数是基本一致的,也就是每个Insert操作,都对应有一次I/O写入操作。可以从MySQL数据库本身做一些优化,这次测试没有覆盖到这种场景。

 

HandlerSocket内部采用的是Bulk Insert操作,所以,可以看出QPS数明显大于TPS数,批量的插入操作明显提高了整体性能。

 

Mongodb内部采用合并操作的方式,采用数据先存放到内存中,然后再Flush到磁盘上的方式。所以,从测试数据可以看出,TPS曲线坡度非常大:有时候TPS是零,这时候是还放到内存中,还没有Flush到磁盘上;有时候TPS非常高,同时这时候CPU也非常高,几乎是100%,这时候是在做Flush到磁盘的操作。基于此种机制,以后会再做一些更细化的优化和测试,因为这样有可能会存在几种问题:
第一, 可能会导致某个时间段IO和CPU的压力非常大,甚至达到峰值,这种情况下,服务的整体健康状态将面临着一些挑战。
第二, 如果服务器重启,可能会出现数据丢失的情况,内存中的数据还没有Flush到磁盘的会丢失。当然这种情况是两面性的,因为采用这种方式,从测试结果也可以看出,整体的写入性能比MySQL和HandlerSocket都高,这是一种取舍,就看具体业务是否可以接受这样的以高性能换取数据可靠性,有些业务可能是可以接受的,比如Feed。


2、 CPU占用情况
从查询情况下的CPU数据可以看出,MySQL和Mongodb几乎都接近100%,而HandlerSocket由于省去了各种Sql Parser和相关的操作,CPU占用率保持在40%-60%之间,在一个比较合理的范围内。

 

从插入情况下的CPU数据可以看出,HandlerSocket的CPU占用率还是保持在40%-60%之间,低于MySQL和Mongodb。MySQL和Mongodb大部分情况保持在50%-90%之间。

 

3、 QPS情况
从查询情况下的QPS数据可以看出,HandlerSocket和Mongodb的查询性能几乎差不多,都达到3万以上,并且随着数据量的增长,性能没有回落,还是保持在3万以上。目前只是最大测试到5000万数据的情况,更高的数值这次测试还没有覆盖到。而MySQL的性能相比之下则差一些,一般在18000到25000之间。当然这次没有太多的针对MySQL做优化,只是增大了innodb_thread_pool大小和每次分配的数据块的大小,如果针对MySQL做优化,可能能同时提高HandlerSocket和MySQL的性能。

 

从插入情况下的QPS数据可以看出,Mongodb明显占有比较大的优势,这根之前说的它的实现方式有关。随着数据量的增长,QPS都相应的在减少,这方面,MySQL的幅度最大,数据量到达5000万以上时,MySQL的插入性能为2000-3000,而HandlerSocket能保持在1万以上,Mongodb为2万以上。

 

 

转自: http://www.cnblogs.com/inrie/archive/2011/02/22/1961415.html

分享到:
评论

相关推荐

    千万级Mysql-MongoDB性能对比报告

    本次性能对比测试主要关注不同规模的数据插入操作在MySQL和MongoDB中的表现情况,特别是在处理千万级别数据时的表现。测试涵盖了不同的数据提交方式和数据量,旨在全面评估两种数据库系统的性能差异。 #### MySQL...

    mysql和mongodb性能对比报告

    **MongoDB测试结果** | 用例编号 | 提交次数 | 单次提交个数 | 运行时间(秒) | 系统资源变化 | 数据量(条) | |----------|----------|-------------|----------------|--------------|--------------| | 1 | ...

    Mongodb的并发访问性能测试的java客户端

    通过查看这些文件,我们可以更详细地了解客户端的设计和实现细节,以及具体的并发策略和性能指标。 总结来说,这个Java客户端为MongoDB并发访问性能测试提供了一个实用工具,涵盖了查询、修改和插入操作。它利用...

    MongoDB性能测试报告

    MongoDB性能测试报告详细分析了在大数据量环境下,包括GridFS和组合索引在内的性能表现。通过对5亿数据级别的插入与查询进行测试,本报告旨在探讨不同索引配置、数据量、查询方式等因素对性能的影响。 首先,测试在...

    jdbc java mongodb mysql 相互同步

    在IT行业中,数据库同步是一个重要的任务,特别是在分布式系统或者混合数据库环境里。本文将深入探讨如何使用Java的JDBC...解压并研究这些代码,可以帮助你更好地理解和实践Java与MySQL、MongoDB的数据交互和同步技术。

    12、MongoDB复制集实战及其原理分析-ev.rar

    12、MongoDB复制集实战及其原理分析_ev.rar12、MongoDB复制集实战及其原理分析_ev.rar12、MongoDB复制集实战及其原理分析_ev.rar12、MongoDB复制集实战及其原理分析_ev.rar12、MongoDB复制集实战及其原理分析_ev.rar...

    springboot2.1.3 + mysql(mybatis) + mongodb maven项目

    该项目是一个集成SpringBoot 2.1.3、MySQL(MyBatis)、MongoDB的Maven工程,旨在构建一个能够同时处理关系型数据和非关系型数据的系统。下面将详细介绍这三个核心组件及其在项目中的作用。 **SpringBoot 2.1.3** ...

    02mongodb与mysql性能比较.mp4

    02mongodb与mysql性能比较.mp4

    MySQL与MongoDB数据库架构介绍.pptx

    MySQL 与 MongoDB 数据库架构介绍 MySQL 数据库架构介绍 MySQL 是由 Oracle 公司开发、发布和支持的受欢迎的开源关系... MySQL 和 MongoDB 都有其优缺点,选择哪一个数据库管理系统取决于具体的应用场景和需求。

    MongoDB TPCC事务性能基准测试.pdf

    MongoDB的readPreference策略(如primary、primaryPreferred、secondary等)影响了客户端如何选择副本集中的成员进行读操作,以适应不同的可用性和性能需求。此外,索引的使用是优化查询性能的关键,MongoDB提供了...

    1亿条记录的MongoDB数据库随机查询性能测试

    性能测试的主要目标是观察MongoDB在数据完全驻留在内存后的查询速度和并发能力。测试结果显示,在这种情况下,MongoDB的查询速度可以稳定在每秒10万次(10W/S),系统负载(load)保持在1以下。这表明当所有数据都在...

    HandlerSocket详细介绍

    #### 四、MongoDB、HandlerSocket和MySQL性能测试及其结果分析 ##### **测试环境** 为了全面评估这三个系统的性能差异,测试在相同的硬件环境下进行。测试硬件包括多台配备高速SSD硬盘和高性能CPU的服务器。 ####...

    NoSQL(SequoiaDB&Cassandra&MongoDB)Benchmark性能对比测试报告

    在此次性能对比测试中,bankmarkUG使用了Yahoo Cloud Serving Benchmark(YCSB)作为测试平台,目的是为了比较SequoiaDB、Cassandra和MongoDB在不同工作负载场景下的性能表现。YCSB是一个用于评估云存储系统中数据库...

    mongodb-测试数据

    这个“mongodb-测试数据”压缩包显然包含了一些用于测试MongoDB功能的样例数据集,特别是针对增、删、改、查(CRUD)操作的学习和性能测试。 在深入探讨MongoDB的测试数据之前,我们先来了解一下MongoDB的基本概念...

Global site tag (gtag.js) - Google Analytics