你还在用MongoDB吗?
发布日期:2016-4-22 20:4:5
你还在用MongoDB吗? Sven Slootweg (joepie91)不仅是一名黑客,同时他也是CrytoCC的创建者,现在也提供Node.js代码评审服务。最近,他在个人的博客上发表了一篇博文《为什么你应该永远、永远、永远不要再使用MongoDB》。在这篇文中,他列举了以下9点理由:
joepie91认为,MongoDB不仅存在诸多问题,而且他认为MongoDB并无突出之处。原因如下:
所以,大多数情况实际上需要的都是一个关系型数据库,如mysql,PostgreSQL。在这些情况下,PostgreSQL是个不错的可选方案。开发者可以使用查询构建器或者ORM来简化使用过程,例如,在Node.js中,可以选用Knex、Bookshelf、Sequelize或者Waterline。即使真得需要一个文档存储,那么也有比MongoDB更好的选项。最后,joepie91指出,流行度并不等同于质量,只能说明产品有一个不错的市场团队: “永远不要因为“其他人那样做”就使用一个数据库,对于一个特定的数据库,要自己研究它的优点和不足。” 在Hack News上joepie91的观点得到了广泛的赞同。网友karmakaze也认为,现在我们有了PostgreSQL 9.4,就没有任何理由去使用MongoDB了(JSONB比BSON更合用),此外还可以使用mysql。对于MongoDB的具体限制,网友giaour建议阅读aphyr的系列文章Call Me Maybe,并指出,尽管存在已知的变通方案,但是那大大降低了MongoDB的开发体验。网友Animats认为,如果站点的流量比维基小,那么使用某种关系型数据库就可以了。网友PebblesHD的观点如下: “作为一个规模较小的部署……,只安装一个基本的MySQL有什么问题吗?在我们的内部维基上,我们每天的访问量已经超过了2万次……” 但是这里也有一些不同的声音。网友threeseed就表示,MongoDB仍然是最容易安装与使用的数据库之一。joepie91对此做了如下所示的回复: “以错误的方式做事,想不容易都难——MongoDB恰好就是那么做的。它不需要设置身份验证或表模式,因此才看上去“易于安装”。但实际上,为了节省10分钟,你正在浪费几个小时的时间。因为稍后,你将会遇到入侵(没有身份验证)或数据破坏……” 还有一些人也佐证了joepie91的这一说法,就是Shodan的报道。互联网上有将近3万个MongoDB实例没有启用任何的身份验证。这个问题不仅随处可见,而且还已经存在多年。 网友toyg的评论如下: “我最近首次使用了MongoDB,是在一个内部项目里。我认为,没有模式确实显著了提升了开发速度……现在项目已经成熟,回过头来,我可以看到为什么关系型数据库会更合适,但如果我从开始就使用RDBMS,那么我可能无法这么快地完成迁移。虽然切换到真正的RDBMS意味着要修改三两个类,但变化不大。所以,我不同意MongoDB不适合原型开发的说法。” 对“修改三两个类,但变化不大”的说法,joepie91提出了质疑,由于根据自己从事代码审查的经验,迁移到不同的数据库通常需要大量的工作。至于切换速度,joepie91指出,在一个有回滚机制的系统中,可能会更快。 然而,在有些情况下,开发者并没有其它选择。例如,有网友就提出,Meteor就使用而且只能使用MongoDB。而因为同Hadoop的合作伙伴关系,MongoDB同Hadoop有很好的集成,所以,它在大数据分析领域非常流行。 另外,来自SourceGear的软件开发人员Eric Sink在读过的joepie91文章之后表示: “(他所列举的内容)部分(也许全部)确有其事。事实上,现在,就假设他所写的都是正确的。我这里不是要说作者是错的。更确切地说,我这里想指出的是,这种博文只能让我了解很少有关MongoDB的知识,但却让我感受到了写这篇博文的人的许多情感。” 然而他也觉得,不能因为那些问题就彻底地否定MongoDB,原因是: MongoDB是顶级的NoSQL供应商。每天,成千上万的企业用它为数以百万计的用户提供服务。像所有有大量用户的新生软件一样,它有漏洞与缺陷。但是它正稳步改善。任何有关技术缺陷的讨论,如果无助于解决问题,那么很大程度上只能是一种情绪的宣泄。 上一条: MySQL 的Binlog Server
|