在32位平台,MongoDB和容易出现“mmap failed with out of memory”错误,因为在32位平台MongoDB不允许数据库文件(累计总和)超过2G,而64位平台没有这个限制。本想在新系统(64bit)中尝试采用MongoDB,但做一下MongoDB性能测试,结果却也报“mmap failed with out of memory”错误,好几天找不到答案,弄了个灰头土脸
今天终于找到了答案,原来是虚拟内存不足所致,这使我想起某年攒电脑,就是没声音,换驱动,换内存、换主板折腾了两天,最后才发现------------音箱电源没开!呵呵。google时发现很多同学也碰到类似问题,记录下来,希望有所帮助。
取消虚拟内存限制的方法:修改etc/profile文件,在文件最后加入一行
ulimit -v unlimited
保存,在命令行执行
# source /etc/profile
(重启linux也可以生效)
顺便记录测试结果:
# 硬件环境 :suse11-64bit、xeon3.6*2、4G DDR333、scsi73G*2无raid 的老机器
# Client:java
1、连续“INSERT”3千万条简单数据(3个字段):平均值大约在27700条/s;同时,插入第一个一百万和第九个一百万效率没有明显差异,数据文件体积大概在10G,比较大;
2、连续“INSERT”10万条标准数据(10个字段,含200字节文本字段):平均值大约在19531条/s; 标准数据体积记录比大概为2.5G/百万(简单数据为:330M/百万);
3、"SELECT"一万条数据(有索引):46~58ms(个别的也达到180ms),一千条大概在6ms左右,非常稳定; CPU占用率也很低,2%左右;有一点需要说明的是,百万容量级别的数据库和千万容量级别的数据库在检索效率上几乎没有什么差异,我想,这是因为mongodb采用文件内存映射机制,不管多少数据,都是通过内存执行索引检索,所以数据库容量跟检索效率没有直接联系。
注意!在MongoDB中,没有索引的检索效率相当低下,所以在进行系统设计时,必须做好索引的规划,在这点上mongoDB和其他RDBMS其实是非常相似的。
# 对比Mysql 5.1的测试结果
# 采用InnoDB存储引擎
# Client:java+c3p0
1、连续“INSERT”1千万条标准数据(单条数据量和Mongodb测试中使用的等同):平均值大约在3448条/s;同时,插入第一个一百万和第九个一百万效率没有明显差异,数据文件体积3.38G,标准数据体积记录比大概为346M/百万,对比Mongodb相当小了,仅仅相当其1/7;
2、"SELECT"一万条数据(有索引):87~89ms(个别的也达到131ms,但极少),一千条大概在3~4ms左右; 百万容量级别的数据库和千万容量级别的数据库在检索效率上也没有什么差异。
3、“UPDATE”一万条数据(有索引):120~123ms,一千条大概在12ms左右;
对比说明(仅针对千万级别数据库):
I、插入效率Mongodb1.3是mysql5.1的 5.7 倍;
II、万条检索效率Mongodb1.3是mysql5.1的 2.35 倍;
II、千条检索效率mysql5.1是 Mongodb1.3 的 1.7 倍(这一回合Mysql获胜);
III、Innodb的update单字段性能相当强悍,平均 83333条/秒(看来有时间我还得把Mongodb的update数据补上)
IV、在测试过程中我发现mysql的表现更为稳定,测试结果跳跃很小,在某次select循环中竟获得了完全一致的测试结果,一大串88ms,很惊艳。而相对的,Mongodb则产生了较大跳跃;
V、Mongodb在以5.7倍的插入效率完胜mysql的同时,它也损失了约7倍的空间利用率;
注意,你的测试结果很可能和我的有较大差异,原因是mysql不同参数配置对测试结果影响非常大,我记得曾看到网上某个相当全面的测试,结果Mongodb的插入效率竟然可以达到mysql的20倍之多,场景也是千万级别数据库。我怀疑他的mysql没有做优化,或者使用的是MyISAM引擎(MyISAM的插入效率和InnoDB能差一个数量级)。当然,也有可能人家善于做Mongodb优化,而这方面我是fish,呵呵
分享到:
相关推荐
本报告旨在通过一系列实验对比MySQL和MongoDB两种不同类型的数据库(关系型数据库与NoSQL数据库)在数据插入性能上的差异,帮助开发者在实际应用中做出更加合适的选择。 #### 测试环境 - **硬件配置**:CPU i5 ...
本次性能对比测试主要关注不同规模的数据插入操作在MySQL和MongoDB中的表现情况,特别是在处理千万级别数据时的表现。测试涵盖了不同的数据提交方式和数据量,旨在全面评估两种数据库系统的性能差异。 #### MySQL...
MongoDB性能测试报告详细分析了在大数据量环境下,包括GridFS和组合索引在内的性能表现。通过对5亿数据级别的插入与查询进行测试,本报告旨在探讨不同索引配置、数据量、查询方式等因素对性能的影响。 首先,测试在...
针对"mongodb Windows7 64位"这个主题,我们将深入探讨MongoDB在Windows 7 64位操作系统上的安装、配置和使用。 1. **安装MongoDB** - 下载:首先,你需要访问MongoDB官方网站...
在Linux 64位系统上安装MongoDB,是很多开发人员和系统管理员的常见需求。以下是对"mongodb linux 64位安装包"的详细说明,以及如何在Linux环境下安装和管理MongoDB的步骤。 首先,你需要了解MongoDB的版本信息。在...
它在Windows 64位平台上运行,提供了强大的数据存储和管理能力。"mongodb-win32-x86_64-2008plus-ssl-3.4.4-signed.msi" 是一个适用于Windows 64位系统的MongoDB安装包,版本为3.4.4,支持SSL(安全套接字层)连接,...
综上所述,MongoDB在Windows 64位系统上的安装涉及多个环节,包括下载安装包、配置服务、启动与验证、以及后续的安全性和性能优化。熟悉这些知识点将有助于你在实际操作中顺利部署和管理MongoDB数据库。
在此次性能对比测试中,bankmarkUG使用了Yahoo Cloud Serving Benchmark(YCSB)作为测试平台,目的是为了比较SequoiaDB、Cassandra和MongoDB在不同工作负载场景下的性能表现。YCSB是一个用于评估云存储系统中数据库...
2018.8.17号MongoDB官网发布的window free版MongoDB-64位-4.0.1安装包
Windows 64位版本的MongoDB安装包是为64位操作系统设计的,能充分利用系统资源,提供更好的性能。在这个压缩包中,你将找到专为Windows 64位系统优化的MongoDB安装程序,以及Java API的文档,这对于使用Java进行...
MongoDB的32位版本虽然在内存使用和性能上可能受限,但它仍然是一个可靠的数据库解决方案,尤其适合小型项目或测试环境。 MongoDB 32位版的主要特点: 1. 内存限制:32位系统最大可使用的物理内存有限,因此MongoDB...
这个“mongodb-测试数据”压缩包显然包含了一些用于测试MongoDB功能的样例数据集,特别是针对增、删、改、查(CRUD)操作的学习和性能测试。 在深入探讨MongoDB的测试数据之前,我们先来了解一下MongoDB的基本概念...
64位版本的MongoDB是专为64位操作系统设计的,能够利用现代计算机系统的大内存,提供更高的性能和可扩展性。 64位MongoDB的主要优势在于: 1. 大内存支持:64位环境可以访问超过4GB的物理内存,这对于大数据处理至...
MongoDB windows 64位安装包最新版,msi格式.windows下直接解压安装即可 国内MongoDB官网下载不了,找了好久的安装包,亲测没问题,分享给大家
首先,64位版本的MongoDB意味着它可以利用现代64位操作系统的内存优势,处理更大的数据集和更高的并发性能。64位系统可以支持超过4GB的内存,这对于大数据存储和处理至关重要。因此,如果你的应用预计会处理大量数据...
MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。他支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是他...
在这个场景中,我们关注的是一个Java客户端,它被设计用于并发访问MongoDB数据库并进行性能测试。这个客户端涵盖了三个主要操作:查询、修改和插入,这些都是数据库操作中的基本且重要的功能。 首先,让我们深入...