赞
踩
软硬件环境
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内部对查询顺序作了优化吧。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。