MySQL和MongoDB的性能测试
软硬件环境
MySQL版本:5.1.50,驱动版本:5.1.6(最新的5.1.13有很多杂七杂八的问题)
MongoDB版本:1.6.2,驱动版本:2.1
操作系统:Windows XP SP3(这个影响应该不大)
CPU:Intel Core2 E6550 2.33G
内存:2G(足够了)
MySQL启动参数:bin\mysqld --no-defaults --console --character-set-server=utf8 --max_connections=1000 --max_user_connections=1000
MongoDB启动参数:bin\mongod --dbpath data\ --directoryperdb --rest --maxConns 1000 –quiet
除了加大最大连接数之外,均使用默认参数
测试
该测试主要为改进当前系统的日志的存储和查询性能提供参考,所以表的创建也以实际情况为例,下面是MySQL的建表语句:
CREATE TABLE `flt_evecurrent` ( `NodeID` int(11) NOT NULL DEFAULT '0', `FltID` int(11) NOT NULL DEFAULT '0', `ObjID` int(11) DEFAULT NULL, `StationID` int(11) DEFAULT NULL, `EveType` int(11) DEFAULT NULL, `Severity` int(11) DEFAULT NULL, `ReportTime` date DEFAULT NULL, `CreateTime` date DEFAULT NULL, `EveContent` varchar(1024) DEFAULT NULL, `EveDesc` varchar(256) DEFAULT NULL, PRIMARY KEY (`NodeID`,`FltID`) ); |
MongoDB类似,索引按照查询语句的查询字段创建,该例子中为ObjID和CreateTime两个字段创建索引。
分别插入100万条记录,并对其做100个用户并发查询操作。
MySQL每一次都Drop表,MongoDB每一次都删除data目录。
查询的时候,从第二次查询开始,连续记录三次。
结果
插入时间 |
查询时间 |
|
MySQL InnoDB引擎 无索引 |
10分33秒 |
39.516秒、35.907秒、39.907秒 |
MySQL InnoDB引擎 有索引 |
11分16秒 |
非常不稳定:22.531秒、13.078秒、23.078秒、26.047秒、21.234秒、28.469秒、20.922秒、13.328秒 |
MySQL MyISAM引擎 无索引 |
3分21秒 |
22.812秒、23.343秒、23.125秒 |
MySQL MyISAM引擎 有索引 |
3分50秒 |
10.312秒、10.359秒、10.296秒 |
MongoDB无索引 |
37秒 |
59.531秒、60.063秒、59.891秒 |
MongoDB有索引 |
50秒 |
3.484秒、3.453秒、3.453秒 |
磁盘空间占用(有索引时候的占用,无索引情况差不多):
MySQL MyISAM:57MB
MySQL InnoDB:264MB
MongoDB:464MB
另外测试中还发现一个有意思的现象,如果MongoDB查询中,如果单独查询ObjID字段,耗时约1秒,如果单独查询CreateTime字段,耗时约10秒,如果两个字段合起来查,就是上面的结果,约3秒,估计MongoDB内部对查询顺序作了优化吧。
MySQL和MongoDB的性能测试的更多相关文章
- 上亿数据怎么玩深度分页?兼容MySQL + ES + MongoDB
面试题 & 真实经历 面试题:在数据量很大的情况下,怎么实现深度分页? 大家在面试时,或者准备面试中可能会遇到上述的问题,大多的回答基本上是分库分表建索引,这是一种很标准的正确回答,但现实总是 ...
- MySQL、MongoDB、Redis数据库Docker镜像制作
MySQL.MongoDB.Redis数据库Docker镜像制作 在多台主机上进行数据库部署时,如果使用传统的MySQL的交互式的安装方式将会重复很多遍.如果做成镜像,那么我们只需要make once ...
- MySQL与MongoDB的操作对比,以及区别
MySQL与MongoDB都是开源的常用数据库,但是MySQL是传统的关系型数据库,MongoDB则是非关系型数据库,也叫文档型数据库,是一种NoSQL的数据库.它们各有各的优点,关键是看用在什么地方 ...
- MySQL vs. MongoDB: Choosing a Data Management Solution
原文地址:http://www.javacodegeeks.com/2015/07/mysql-vs-mongodb.html 1. Introduction It would be fair to ...
- [转]MySQL与MongoDB的操作对比
MySQL与MongoDB都是开源的常用数据库,但是MySQL是传统的关系型数据库,MongoDB则是非关系型数据库,也叫文档型数据库,是一种NoSQL的数据库.它们各有各的优点,关键是看用在什么地方 ...
- 转:视觉中国的NoSQL之路:从MySQL到MongoDB
起因 视觉中国网站(www.chinavisual.com)是国内最大的创意人群的专业网站.2009年以前,同很多公司一样,我们的CMS和社区产品都构建于PHP+Nginx+MySQL之上:MySQL ...
- 阿里云下Linux服务器安装Mysql、mongodb
阿里云下Linux服务器安装Mysql.mongodb 一.MySQL的安装和配置 1.安装rpm包 rpm -Uvh http://dev.mysql.com/get/mysql-community ...
- MySQL、MongoDB、Redis 数据库之间的区别
NoSQL 的全称是 Not Only SQL,也可以理解非关系型的数据库,是一种新型的革命式的数据库设计方式,不过它不是为了取代传统的关系型数据库而被设计的,它们分别代表了不同的数据库设计思路. M ...
- MySQL和Mongodb的区别与应用场景对比
MySQL是关系型数据库 优势: 在不同的引擎上有不同 的存储方式. 查询语句是使用传统的sql语句,拥有较为成熟的体系,成熟度很高. 开源数据库的份额在不断增加,mysql的份额页在持续增长. 缺点 ...
随机推荐
- 基于顺序链表的栈的顺序存储的C风格实现
头文件: #ifndef _SEQSTACK_H_ #define _SEQSTACK_H_ typedef void SeqStack; //创建一个栈 SeqStack* SeqStack_Cre ...
- xhtml css 漏 整理
1)文档类型 代码最上部有如下这句话: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" &quo ...
- MFC下拉框
在函数OnInitDialog()中添加一下语句可以添加选项到下拉框中 m_comboBox.AddString(_T("ALKATIP Basma Tom")); m_combo ...
- GDB使用例子
GDB使用例子 一般来说GDB主要调试的是C/C++的程序.要调试C/C++的程序,首先在编译时,我们必须要把调试信息加到可执行文件中.使用编译器(cc/gcc/g++)的 -g 参数可以做到这一点. ...
- Leetcode 336.回文对
回文对 给定一组唯一的单词, 找出所有不同 的索引对(i, j),使得列表中的两个单词, words[i] + words[j] ,可拼接成回文串. 示例 1: 输入: ["abcd&quo ...
- 在table第一行前插入一行
在table的第一行前插入一行. //追加到第一行 var html="<tr><td>xxId</td><td>xxName</td& ...
- 九度oj 题目1021:统计字符
题目描述: 统计一个给定字符串中指定的字符出现的次数. 输入: 测试输入包含若干测试用例,每个测试用例包含2行,第1行为一个长度不超过5的字符串,第2行为一个长度不超过80的字符串.注 ...
- hadoop2.7.0分布式系统搭建(ubuntu14.04)
因为使用需要,在自己小本上建了四个虚拟机,打算搭建一个1+3的hadoop分布式系统. 环境:hadoop2.7.0+ubuntu14.04 (64位) 首先分别为搭建好的虚拟机的各主机重命名 方法: ...
- BZOJ 2190 [SDOI2008]仪仗队 ——Dirichlet积
[题目分析] 考虑斜率为0和斜率不存在的两条线上只能看到3人. 其余的人能被看见,当且仅当gcd(x,y)=1 ,然后拿卷积算一算 发现就是欧拉函数的前缀和的二倍. 注意2的情况要特判. [代码] # ...
- uva 550 有趣的乘法(dfs)
题目大意:给三个数A(进制).B(如*****7的最后一个数字7).C(*****7*4的后面的因数4)求符合条件下的第一个因数的位数最少 例子: 179487 * 4 = 717948 (10进制) ...