文档章节

mongodb的优缺点

流萤飘枫丶
 流萤飘枫丶
发布于 2017/09/06 15:41
字数 1670
阅读 29
收藏 0
点赞 0
评论 0

mongodb的优缺点

对比mysql, mongo的优缺点有:

缺点

l  不支持事务操作

l  占用空间过大

l  MongoDB没有如MySQL那样成熟的维护工具

l  无法进行关联表查询,不适用于关系多的数据

l  复杂聚合操作通过mapreduce创建,速度慢

| 模式自由,  自由灵活的文件存储格式带来的数据错误

|

  1. 预分配模式带来的磁盘瓶颈。

mongodb采用数据文件预分配模式来生成数据文件,数据文件的大小从64M开始,每增加一个文件,大小翻倍,直到2G,以后每次增加数据就会生成2G左右的数据文件,结合mongodb的mmap内存模型,对于写数据文件,将随机写转换为顺序写,一定程度上缓解了磁盘的io压力。

但在实际使用中,遇到了在预分配2G的数据文件时,如果磁盘io较慢,则mongodb基本锁死,无法响应请求的情况。持续时间则根据磁盘io的性能来确定。这个问题在2.0之后版本可能会有些改善,但在磁盘性能低的服务器上,该问题依旧存在.

这个问题目前没有太好的解决方案,只能建议使用读写性能比较好的服务器来跑mongodb。

 

  1. 在数据存量大于内存大小时,mongodb遇到冷数据查询速度变慢。

mongodb使用mmap的内存管理模式,如果查询的都是热数据,那么会在内存中直接查询,如果遇到冷数据,就需要从磁盘读取,并将一部分热数据从内存卸载掉.

有人曾经说mongodb内存管理是加载固定大小的文件块到内存,即如果冷数据在磁盘上,他会根据请求的数据,加载一定大小的数据块到内存,并卸载掉同样的热数据,这个操作本身会带来一定io.

因为mongodb使用的是全局锁,在某个操作缓慢时,整个操作队列会全部变慢。这个问题造成了mongodb会出现偶发性堵塞问题,连带整个库的性能下降。

         该问题在应用需要尽量避免出现,需要将mongodb的数据大小规划好,尽量不要使数据量超过内存的大小,如果超过内存大小后,尽量不要去请求冷数据。

  1. Mongodb全局锁机制。

mongodb最大的问题或者可以说是它的锁机制,在2.2版本之前,一个实例只有一个读写锁,不管有多少数据库和数据集合,当一个操作进行时其他操作只能等待,在2.2版本后,mongodb锁降低了粒度,改为按库锁。

MongoDB 使用的是“readers-writer”锁, 可以支持并发但有很大的局限性,当一个读锁存在,许多读操作可以使用这把锁,然而, 当一个写锁的存在,一个单一的写操作会exclusively 持有该锁,同时其它读,写操作不能使用共享这个锁;举个例子,假设一个集合里有 10 个文档,多个 update 操作不能并发在这个集合上,即使是更新不同的文档。

 

  1. 删除数据集合后空间不会自动释放

mongodb删除集合后磁盘空间不释放,只有用db.repairDatabase()去修复才能释放。

修复可能要花费很长的时间,在使用db.repairDatabase()去修复时一定要停掉读写,并且mongodb要有备机才可以,不然千万不要随便使用db.repairDatabase()来修复数据库,切记。

但是在修复的过程中如果出现了非正常的mongodb的挂掉,再次启动时启动不了的,需要先修复才可以,可以利用./mongod --repair --dbpath=/data/mongo/ 如果你是把数据库单独的放在一个文件夹中指定dbpath时就指向要修复的数据库就可以。

 

7. replica set一些隐含问题

                   a) replica set模式最多支持12台服务器,而有投票权的服务器只支持7台,如果超过7台服务器,需设置部分服务器为无投票权服务器

                   b) replica set模式中,一个set服务器如果小于2台服务器,则自动故障恢复不会起作用,如果4台服务器出现2/2互相ping不通的情况,同样不会自动故障恢复。一般来说,一个set中尽量是有单数服务器。

                   c). replica set中,因为mongodb是按照时间进行操作,如果set中某个服务器时间超前或者延迟,很容易出现secondaries不断尝试更新oplog或者同步延迟的问题。甚至造成某些操作失败,如drop操作。

         8. 分片模式的一些隐含问题

                   1. config server尽量按照官方的要求,有3个configserver,如果只有2个configserver,则shard的自动负载均衡和自动切片功能不可用。

                   2. api中的nearest模式在shard中,判断的是set到mongos的距离而非set到client的距离,在切片模式下,尽量不要使用nearest模式,可能会造成一些请求延迟增加的问题。

优点

l  文档结构的存储方式,能够更便捷的获取数据

l  内置GridFS,支持大容量的存储

l  内置Sharding,分片简单

l  海量数据下,性能优越

l  支持自动故障恢复(复制集)

 

mongodb是一个介于nosql数据库和mysql数据库之间的一个数据存储系统,它没有严格的数据格式,但同时支持复杂查询,而且自带sharding模式和Replica Set模式,支持分片模式,复制模式,自动故障处理,自动故障转移,自动扩容,全内容索引,动态查询等功能。扩展性和功能都比较强大。

    mongodb在数据查询方面,支持类sql查询,可以一个key多value内容,可以组合多个value内容来查询,支持索引,支持联合索引,支持复杂查询 ,支持排序,基本上除了join和事务类型的操作外,mongodb支持所有mysql支持的查询,甚至某个客户端api支持直接使用sql语句查询mongodb。

         mongodb的sharding功能目前日渐完善,支持自定义范围分片,hash自动分片等,分片自动扩容,shard之间自动负载均衡等功能。实际使用中功能还不错。

© 著作权归作者所有

共有 人打赏支持
流萤飘枫丶
粉丝 9
博文 174
码字总数 106965
作品 0
成都
程序员
mongodb与mysql相比的优缺点

与关系型数据库相比,MongoDB的优点: ①弱一致性(最终一致),更能保证用户的访问速度: 举例来说,在传统的关系型数据库中,一个COUNT类型的操作会锁定数据集,这样可以保证得到“当前”情...

烽焱10仴
2013/03/05
0
0
CentOS-6安装使用mongodb

Centos-6.3下安装Mongodb,首先从http://www.mongodb.org/downloads下载软件压缩包mongodb-linux-x86_64-2.2.2.tgz。 安装机器:192.168.15.237 上传位置:/usr/local/ 软件安装:/usr/loca...

drewin
2013/10/21
0
0
mongoDB 启动服务提示已存在连接

在我用 F:mongodbbin>mongod --dbpath f:mongodbdata --logpath f:mongodblogsMongoDB.log --auth --install 创建验证的时候,总是创建失败。 原因: MongoDB服务已经存在了,不能重复创建,...

NotFoundException
2012/12/07
0
0
mongodb在linux下安装

mongodb linux 安装 下载 cd /usr/local/src wget http://fastdl.mongodb.org/linux/mongodb-linux-i686-2.4.9.tgz tar -xzvf mongodb-linux-i686-2.4.9.tgz mv mongodb-linux-i686-2.4.9 .......

Le_Guto
2014/01/24
0
0
Windowns、Ubuntu17.10 下安装 MongoDB - [图文并茂]

Windows 下安装 MongoDB MongoDB 安装包下载 点击下载 Windowns 平台: MongoDB 安装包 MongoDB 下载中心 MongoDB 安装 运行安装包,单击Next 选择安装路径 单击Next,完成安装 安装完成后,...

kangvcar
2017/11/01
0
0
Mongodb学习(安装篇): 在centos下的安装

下载解压文件 解压文件 查看解压文件 将/lamp/mongodb-linux-i686-2.2.2/bin目录拷贝到/usr/local/mongodb下 创建数据存放和日志文件: 启动进程(以后台Daemon形式运行服务) 查看mongod进程 ...

tw5566
2013/01/19
0
0
PHP与MongoDB:类库、框架与工具介绍

本文来自MongoDB官方,文中把PHP与MongoDB相关的类库、框架、工具做了汇总和介绍,如果你正使用PHP并在关注MongoDB,那么这篇文章可能对你有用。 架构相关 CakePHP CakePHP是一个非常受欢迎的...

kisshua
2012/08/31
0
0
mongodb 3.2.5安装过程详细记录

2016-10-19 mongodb 3.2.5安装 1 准备安装介质 安装介质下载: mongodb的安装方式,我通常使用二进制包的方式,内网不能配置连接外网的yum源; 官方建议的mongodb下载地址为: Downloads.mo...

yumushui991
06/26
0
0
CentOS6.4 安装MongoDB

1、下载MongoDB(32位) wget http://fastdl.mongodb.org/linux/mongodb-linux-i686-2.0.3.tgz 2、安装MongoDB(安装到/usr/local) 复制代码 tar zxvf mongodb-linux-x86_64-2.4.9.tgz mv m......

Surjur
2014/12/02
0
0
tokumx mongoDB conf 文件配置 安装配置

第一节 准备工作 一 安装mongodb 我这里选用rehl 5.6作为其运行载体。 1. 下载mongodb的linux版本(注意32位和64位的区别),下载地址:http://www.mongodb.org/downloads # wget http://fast...

纯洁徐
2015/01/20
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

shell中的函数、shell中的数组、告警系统需求分析

shell中的函数 格式: 格式: function f_name() { command } 函数必须要放在最前面 示例1(用来打印参数) 示例2(用于定义加法) 示例3(用于显示IP) shell中的数组 shell中的数组1 定义数...

Zhouliang6
今天
2
0
用 Scikit-Learn 和 Pandas 学习线性回归

      对于想深入了解线性回归的童鞋,这里给出一个完整的例子,详细学完这个例子,对用scikit-learn来运行线性回归,评估模型不会有什么问题了。 1. 获取数据,定义问题     没有...

wangxuwei
今天
1
0
MAC安装MAVEN

一:下载maven压缩包(Zip或tar可选),解压压缩包 二:打开终端输入:vim ~/.bash_profile(如果找不到该文件新建一个:touch ./bash_profile) 三:输入i 四:输入maven环境变量配置 MAVEN_HO...

WALK_MAN
今天
0
0
33.iptables备份与恢复 firewalld的9个zone以及操作 service的操作

10.19 iptables规则备份和恢复 10.20 firewalld的9个zone 10.21 firewalld关于zone的操作 10.22 firewalld关于service的操作 10.19 iptables规则备份和恢复: ~1. 保存和备份iptables规则 ~2...

王鑫linux
今天
2
0
大数据教程(2.11):keeperalived+nginx高可用集群搭建教程

上一章节博主为大家介绍了目前大型互联网项目的系统架构体系,相信大家应该注意到其中很重要的一块知识nginx技术,在本节博主将为大家分享nginx的相关技术以及配置过程。 一、nginx相关概念 ...

em_aaron
今天
1
0
Apache Directory Studio连接Weblogic内置LDAP

OBIEE默认使用Weblogic内置LDAP管理用户及组。 要整理已存在的用户及组,此前办法是导出安全数据,文本编辑器打开认证文件,使用正则表达式获取用户及组的信息。 后来想到直接用Apache Dire...

wffger
今天
2
0
HFS

FS,它是一种上传文件的软件。 专为个人用户所设计的 HTTP 档案系统 - Http File Server,如果您觉得架设 FTP Server 太麻烦,那么这个软件可以提供您更方便的档案传输系统,下载后无须安装,...

garkey
今天
1
0
Java IO类库之BufferedInputStream

一、BufferedInputStream介绍 /** * A <code>BufferedInputStream</code> adds * functionality to another input stream-namely, * the ability to buffer the input and to * sup......

老韭菜
今天
0
0
STM 32 窗口看门狗

http://bbs.elecfans.com/jishu_805708_1_1.html https://blog.csdn.net/a1985831055/article/details/77404131...

whoisliang
昨天
1
0
Dubbo解析(六)-服务调用

当dubbo消费方和提供方都发布和引用完成后,第四步就是消费方调用提供方。 还是以dubbo的DemoService举例 -- 提供方<dubbo:application name="demo-provider"/><dubbo:registry address="z...

青离
昨天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部