CoffeeCat's IT Blog

坑爹的MongoDB

MongoDB的设计思想很适用于非事务型的Web系统,初始MongoDB的时候,我觉得这就是我想要的数据库系统,它比MySQL要轻量级,提供简单的查询,支持索引,高效的插入数据,更好的支持分布式,更方便的支持Master/Slave,这些都是MySQL没有的优点。但作为一个新兴事物,是否要应用到生产环境中,需要谨慎决策。查询了一些资料,得知MongoDB已有一些在正式环境下的上亿级数据管理的应用,同时看到一篇文章《Do not use mongoDB》,然后作者证实这篇文章是恶作剧,于是我相信MongoDB至少是稳定的产品,于是运用到自己的生产环境中。

于是,问题就来了。

1:MongoDB占用的空间巨大无比。
    我用MongoDB Dump整个数据库,输出的bson文件共1.1个G,但这个数据库在MongoDB的Data目录下竟然占用了30G的空间。

2:真的会丢数据
   某日,我的服务器在没有任何问题的情况下,MongoDB突然就不能读取和写入了,所有的查询都返回Transport endpoint is not connected. 很莫名。于是,我用正常的方式重启MongoDB(不是kill进程),之前的错误没有了,但明显发现查询失败率提高了,更要命的是,有一部分数据丢失了,数据库好像回到几天前一样。于是我用--repair命令尝试修复数据库,更离奇的事情发生了,30G的物理文件,修复完成以后变成7G了,这下MongoDB的所有数据都查询不出来了。幸好我在repair前留了个心眼,备份了30G的文件,又dump了bson文件,不然真要哭死了。

   后来我查了资料,发现MongoDB有Lazy Write的机制。但是我认为即使有这个机制,也不应该在正常操作的情况下丢失数据,而且这个机制是针对意外关闭的情况,但我的服务器又没有突然重启,又没有kill操作,就不应该随便丢数据。之后的--repair为什么会丢数据就不知道了,我也无意去研究,因为我感觉MongoDB太不成熟了,可靠性方面和MySQL没得比。于是我写了程序,将MongoDB的数据导入MySQL,然后将网站的数据库层改成基于MySQL的...MongoDB太坑爹了。

3:查询不够稳定
    MongoDB查询的时候,有时会查询莫名出错。这个概率不大,但相对于MySQL,就大多了。

虽然《Do not use mongoDB》的作者证实是恶作剧,但是我觉得作者是真的遇到了类似的问题,才会恼火写这篇文章的。这些问题是客观存在的,至少我遇到了。我也很恼火。

经过实践,我建议目前数据库还是用MySQL。分布式还是用程序实现比较稳当。MySQL也支持Master Slave,另外,MyISAM引擎的插入效率也不低,虽然没法和MongoDB的速度比,但为了这点速度的提升而牺牲了可靠性,就相当不值得了。MongoDB有着很好的设计思想,但是目前稳定性和可靠性都不够,等到MongoDB再成熟一些,再考虑使用吧。

Ferris

posted on 2012-08-08 00:18 CoffeeCat 阅读(5068) 评论(9)  编辑 收藏 引用

评论

# re: 坑爹的MongoDB 2012-10-24 21:27 陈栋深

楼上正解,不过数据丢失开发阶段还没有发现,怕怕中  回复  更多评论   

# re: 坑爹的MongoDB 2012-10-24 22:08 陈扬柱

没这么坑爹吧! 开发中没遇到过,现在我们项目就快上线了,要真是这样,那可就真坑爹了!  回复  更多评论   

# re: 坑爹的MongoDB 2012-11-19 09:19 CoffeeCat

@陈扬柱
MongoDB应用的门槛比MySQL高,如果不了解MongoDB的内部实现,出了问题很难搞定,特别是对于像我负责开发程序的,顺便维护数据库的,真的数据库出了问题,不但难搞定,还影响自己开发程序的进程。  回复  更多评论   

# re: 坑爹的MongoDB 2012-12-25 17:12 雪洁

针对你说的第二条丢数据我说下哈,从你的描述来看你的mongodb肯定是由于什么情况意外终止了的,“Transport endpoint is not connected”这个提示一般是在Mongodb关闭的时候出现的,至于写不进去我还没碰到过,至于你说的repair后有数据消失的问题,是因为mongodb不是实时往硬盘上写数据的,你需要关闭之前sync同步一下,这就是为什么强制关闭的时候会丢失数据的原因。  回复  更多评论   

# re: 坑爹的MongoDB 2012-12-25 17:17 雪洁

不过稳定性确实欠缺,这也是我们使用好久后得出的结论。  回复  更多评论   

# re: 坑爹的MongoDB 2013-01-10 10:53 1

只能说明你功夫不到家。  回复  更多评论   

# re: 坑爹的MongoDB 2013-03-22 16:30 2

mysql的innodb确实比mongodb稳定得多,mongodb大概和myisam一个级别,myisam还不是各种坏表,repair同样有几率大量丢数据  回复  更多评论   

# re: 坑爹的MongoDB 2013-04-26 09:29 x

mongodb最新版2.4,插入1w多条数据,都还经常丢数据。扶不起阿斗  回复  更多评论   

# re: 坑爹的MongoDB 2014-03-06 16:17 roudy

能共享一下你的那个程序吗?就mongodb转mysql,我们现在也遇到了这个情况。  回复  更多评论   

只有注册用户登录后才能发表评论。
<2012年8月>
2930311234
567891011
12131415161718
19202122232425
2627282930311
2345678

导航

统计

公告

常用链接

留言簿(203)

随笔档案

收藏夹

搜索

最新评论

阅读排行榜

评论排行榜