Sven Slootweg (joepie91)是一名黑客,同时也是CrytoCC的创建者,现在提供Node.js代码评审服务。近日,他在个人博客上发表了一篇博文《为什么你应该永远、永远、永远不要再使用MongoDB》。在文中,他列举了如下理由:
- 丢失数据(见1、2);
- 默认忽略错误,假设每次写入都是成功的,在32位系统上,这可能会导致数据无声无息地丢失;
- 即使是在MongoDB宣传的适用场景下,其性能依然不高(见3、4);
- 几乎在所有的应用场景下,开发者都会被迫养成使用隐式模式的坏习惯(见4);
- 存在锁问题(见4);
- 对安全问题响应很慢(见5);
- 不符合ACID(见6);
- 扩展和维护困难;
- JSON存储也不是MongoDB独有的功能,PostgreSQL、CouchDB也支持(见7、8)。
joepie91认为,MongoDB不仅存在诸多问题,而且并无突出之处。如果项目涉及用户账户或者两条记录之间存在某种关系,那么就应该使用关系型数据库,而不是文档存储;如果项目在使用Mongoose,那么也应该使用关系型数据库,因为Mongoose只是使用文档存储模拟了有模式的关系型数据库。因此,大多数情况实际上需要的都是一个关系型数据库。在这些情况下,PostgreSQL是个不错的可选方案。开发者可以使用查询构建器或ORM来简化使用过程,比如,在Node.js中,可以选用Knex、Bookshelf、Sequelize或Waterline。即使真得需要一个文档存储,那么也有比MongoDB更好的选项。另外,他也不认为MongoDB适合于创建原型,因为如果生产环境使用不同的数据库,则还需要重写所有的代码。总之,MongoDB并没有什么适用场景。它在技术上比不上其它可选方案,并没有提供真正有用的独有的特性,而且开发人员也无法确保数据一致性和安全。最后,joepie91指出,流行度并不等同于质量,只能说明产品有一个不错的市场团队:
Read full article from 别再用MongoDB了! | 程序师
No comments:
Post a Comment