Sven Slootweg (joepie91) 是一名 黑客 ,同时也是 CrytoCC 的创建者,现在提供 Node.js代码评审服务 。近日,他在个人博客上发表了一篇博文《 为什么你应该永远、永远、永远不要再使用MongoDB 》。在文中,他列举了如下理由:
joepie91认为,MongoDB不仅存在诸多问题,而且并无突出之处。如果项目涉及用户账户或者两条记录之间存在某种关系,那么就应该使用关系型数据库,而不是文档存储;如果项目在使用 Mongoose ,那么也应该使用关系型数据库,因为Mongoose只是使用文档存储模拟了有模式的关系型数据库。因此,大多数情况实际上需要的都是一个关系型数据库。 在这些情况下,PostgreSQL是个不错的可选方案。开发者可以使用查询构建器或ORM来简化使用过程,比如,在Node.js中,可以选用 Knex 、 Bookshelf 、 Sequelize 或 Waterline 。即使真得需要一个文档存储,那么也有 比MongoDB更好的选项 。另外,他也不认为MongoDB适合于创建原型,因为如果生产环境使用不同的数据库,则还需要重写所有的代码。总之,MongoDB并没有什么适用场 景。它在技术上比不上其它可选方案,并没有提供真正有用的独有的特性,而且开发人员也无法确保数据一致性和安全。最后,joepie91指出,流行度并不 等同于质量,只能说明产品有一个不错的市场团队:
joepie91的观点 在Hack News上 得到了广泛的赞同。网友karmakaze也认为,有了PostgreSQL 9.4,就没有任何理由要使用MongoDB了(JSONB比BSON更合用),另外还可以使用CouchDB。对于MongoDB的具体限制,网友 giaour建议阅读aphyr的系列文章 Call Me Maybe ,并指出,虽然存在已知的变通方案,但那大大降低了MongoDB的开发体验。网友Animats认为,如果站点的流量比维基小,那么使用某种关系型数据库就可以了。网友PebblesHD有类似的观点:
但是也有一些不同的声音。例如,网友threeseed就表示,MongoDB仍然是最容易安装和使用的数据库之一。对此,joepie91回复如下:
Shodan 的 报道 也佐证了joepie91的这一说法,互联网上有将近3万个MongoDB实例没有启用任何的身份验证。这个问题随处可见,而且已经存在多年。
网友toyg则评论说:
joepie91对“修改三两个类,但变化不大”的说法提出了质疑,因为根据自己从事代码审查的经验,迁移到不同的数据库通常需要大量的工作。至于切换速度,joepie91指出,在一个有回滚机制的系统中,可能会更快。
另外,来自 SourceGear 的软件开发人员Eric Sink在读过的joepie91文章之后 表示 :
他觉得,不能因为那些问题就彻底地否定MongoDB,毕竟: