Nodejs中的Mongodb与Postgres比较

40

我正在构建一个NodeJS应用程序,对于NoSQL的MongoDB和RMDS的PostregresSql,我完全无法决定使用哪一种。我的项目是创建一个开源示例项目,使用NodeJS记录访问者并在网页上实时显示访问者统计信息。起初我计划使用MongoDB,因为很多NodeJS的示例和教程使用它,尽管大多数是旧版,但提供免费服务的PaaS主机比比皆是。然而,最近我看到了很多关于MongoDB的抨击,并发现尝试使用MongoDB的人最终都转向了Postgres:

我也喜欢Heroku,并听说过很多关于Postgres的信息,因此发现SQL查询有时非常友好。

我不是数据库专家,所以完全不知道该怎么选择。如果您能就应该选哪个提供一些建议,我会非常感激。

我有几个标准:

  1. 由于我希望这是一个示例,因此最好有一种方法来托管相当数量的数据。我知道MongoDB绝对可以做到这一点,但像Heroku这样的Postgres PaaS似乎只支持很小的数据库(因为我要记录访问者)

  2. 一个简单易懂的数据库。

  3. 性能并不重要,但速度肯定没坏处。

感谢所有的帮助! 注意: 请勿引发争端,每个人都有自己的观点 :)

13
我不明白为什么人们对这个问题投反对票。 - Nam Nguyen
12
我不理解为什么这个问题被关闭为“基于主观看法”。这种问题——何时使用SQL和何时使用NoSQL——是计算机科学和架构决策的实质。 - Oliver Moran
Cory House在他的文章中进行了一些很好的分析,题为“为什么我不相信MongoDB”。特别注意其中关于Schema = Protection的部分。http://www.bitnative.com/2015/04/13/why-im-not-sold-on-mongodb/ - mg1075
如果您正在寻找一个有趣的PostgreSQL、Express、Angular、Node样板项目,那么可以看看基于MEAN.JS样板的这个项目。https://github.com/StetSolutions/pean - mg1075
1个回答

25
选择SQL数据库和NoSQL数据库之间的争论正在激烈地进行中,这方面有很多好的文章。我会在最后列出一些。对于您特定的需求,我毫不犹豫地推荐SQL而不是NOSQL。
NoSQL有一组特定的用例,其中数据存储在称为文档的大型紧密耦合包中,而不是关系模型中。简言之,与单个实体(例如单个用户使用的所有文本文档)紧密耦合的数据更适合在NoSQL文档模型中存储。行为类似于Excel电子表格并且适合在行中很好地适应聚合计算的数据更适合存储在SQL数据库中,其中postgresql仅是几个良好选择之一。
第三个选项是redis(http://redis.io/),它是一个简单的键值数据存储,当像SQL一样查询时非常快,但不像SQL那样严格类型化。

你提到的例子似乎是一个简单的行/列类型问题。你会发现SQL语法比MongoDB的查询语法要简单得多。Node有许多值得推荐的东西,而且工具集在过去一年中已经显著成熟了。我建议使用monogoose npm包,因为它减少了使用原生mongodb所需的样板代码量,而且我没有注意到任何性能降低。

http://slashdot.org/topic/bi/sql-vs-nosql-which-is-better/

http://www.infoivy.com/2013/07/nosql-database-comparison-chart-only.html


1
我一定会看看 Redis。 - joshua-anderson
Java服务器环境存在问题。Node.JS更加稳定。 - dman
我的回答并不是为了打击Node。我在生产环境中使用Node、Java和Dart,它们都有各自的优点。当我查看OP的个人资料时,他似乎有更传统的服务器环境背景,我想指出Node工具集可能没有他们想象的那么丰富。随着node-inspector和一些编辑插件的不断改进,这已经不再是一个问题了。 - Nathaniel Johnson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接