MongoDB和PostgreSQL的想法

时间:2010-12-13 07:15:41

标签: sql mongodb postgresql database nosql

我有一个完全使用PostgreSQL的应用程序。在阅读了MongoDB之后,我有兴趣了解应用程序如何使用它。几周后,我将整个系统迁移到MongoDB。

我喜欢MongoDB的一些东西。但是,我发现我在PostgreSQL中做的某些查询,我无法在MongoDB中有效地执行。特别是,当我不得不加入几个表来计算一些逻辑时。例如,this

此外,我正在使用Ruby on Rails 3和一个名为Mongoid的ODM。 Mongoid仍处于测试阶段。文档很好,但有时我发现ODM与Active Record提供的传统(SQL)数据库系统相比非常有限。

即使到了这个日期,我觉得使用PostgreSQL比使用MongoDB更舒服。只是因为我可以连接表并对数据做任何事情。

我做了两种类型的备份。一个是PostgreSQL,另一个是MongoDB。有人说,有些应用程序更适合使用一种或另一种类型的数据库。我应该继续使用MongoDB并最终希望它的RoR ODM(Mongoid)完全成熟,还是应该考虑使用PostgreSQL?

还有一些问题: 1)哪一个更适合开发类似于Facebook的社交网站。 2)哪一个更适合4页标准布局类型的网站(主页,产品,关于,联系)

6 个答案:

答案 0 :(得分:51)

您为一个年轻,品质优良,功能薄的文档商店推出了经过数十年测试,功能齐全的RDBMS,几乎没有社区支持。除非你已经在服务器上每月运行数万美元并且认为MongoDB更适合数据的性质,否则你可能会浪费大量时间来获得负面利益。 MongoDB玩具很有趣,而且由于这个原因,我自己构建了一些使用它的应用程序,但它几乎不是比Postgres / MySQL / SQL Server /等更好的选择。用于生产应用。

答案 1 :(得分:14)

让我们引用你写的内容并看看它告诉我们的内容:

"I like a few things with Mongodb. However, I found certain queries I was
 doing in PostgreSql, I couldn't do efficiently in Mongodb. Especially,
 when I had to join several tables to calculate some logic."

"I found the ODM to be very limiting compared to what Active Record offered
 with traditional (SQL) database systems."

"I feel more comfortable working with PostgreSql than Mongodb. Only because
 I can join tables and do anything with the data."

根据你所说的,我认为你应该坚持使用PostgreSQL。密切关注MongoDB,并在适当的时候使用它。但鉴于你所说的,听起来PG现在更适合你。

分享并享受。

答案 2 :(得分:2)

我还没有使用过MongoDB,可能永远都不会使用它,因为我还没有发现任何我可以用Postgres做的事情,只是引用PostgreSQL 9.2发行说明:< / p>

  

使用PostgreSQL 9.2,查询结果可以作为JSON数据类型返回。   结合新的PL / V8 Javascript和PL / Coffee数据库   编程扩展,以及可选的HStore键值存储,用户   现在可以使用PostgreSQL,就像#No; NoSQL&#34;文档数据库,而   保留PostgreSQL的可靠性,灵活性和性能。

所以在Postgres的新版本中,您可以充分利用这两个世界。我还没有使用它,但作为PostgreSQL的一个粉丝(优秀的文档/邮件列表),我几乎不会在任何与RDBMS相关的内容中使用它。

答案 3 :(得分:2)

首先,postgres是RDBMS,MongoDB是NoSQL 但是,独立的NoSQL技术不符合ACID标准,因为它们牺牲了关键数据保护,有利于非结构化应用程序的高吞吐量性能。

Postgres 9.4提供NoSQL功能以及完整的事务支持,存储对字段数据有约束的JSON文档。

所以你将从RDBMS和NoSQL获得所有优势

查看详细文章http://www.aptuz.com/blog/is-postgres-nosql-database-better-than-mongodb/

为自己体验Postgres的NoSQL性能。在GitHub下载pg_nosql_benchmark。这是链接https://github.com/EnterpriseDB/pg_nosql_benchmark

答案 4 :(得分:1)

我们也研究过更好的研究。 PostGresMongoDb。但是有了所有的事实和数据,我们发现PostGres比MongoDb好得多。在MongoDb中,除了占用内存和CPU之外,它还占用了大量的磁盘空间。它在一定的时间间隔内增加了2倍的磁盘大小。

答案 5 :(得分:1)

在我的项目中使用两个数据库后,我对Postgres和Mongo的经验。

<强>的Postgres(RDBMS)

如果您未来的应用程序具有需要大量连接的复杂架构或所有数据都有关系或者我们写得很多,建议使用Postgres。 Postgres是开源的,速度更快,符合ACID并且在磁盘上使用更少的内存,并且对于JSON存储也具有良好的性能,并且包括具有3级事务隔离的事务的完全可序列化。

与Postgres合作的最大好处是我们两全其美。我们可以通过约束,一致性和速度将数据存储到JSONB中。另一方面,我们可以将所有SQL功能用于其他类型的数据。底层引擎非常稳定,可以很好地处理大量数据。它还可以在您选择的硬件和操作系统上运行。 Postgres提供NoSQL功能以及完整的事务支持,存储对字段数据有约束的JSON文档。

Postgres的一般约束

水平缩放Postgres非常难,但可行。

使用Postgres无法完全实现快速读取操作。

无SQL数据库

Mongo DB(有线老虎)

MongoDB可能会以“水平比例”的维度击败Postgres。存储JSON是Mongo优化的功能。 Mongo以二进制格式存储其数据,称为BSONb,它(大致)只是JSON超集的二进制表示。 MongoDB完全按照设计的方式存储对象。据MongoDB称,对于写密集型应用程序,Mongo表示新引擎(Wired Tiger)为用户提供了高达10倍的写入性能提升(我应该尝试这一点),存储利用率降低80%,有助于降低存储成本,实现更高的硬件利用率。

MongoDb的一般限制

使用无架构的存储引擎会导致隐式架构的问题。这些模式不是由我们的存储引擎定义的,而是根据应用程序行为和期望定义的。

独立的NoSQL技术不符合ACID标准,因为它们牺牲了关键数据保护,有利于非结构化应用程序的高吞吐量性能。在NoSQL数据库上应用ACID并不难,但它会使数据库在某种程度上变得缓慢且不灵活。 “大多数NoSQL限制都在新版本和版本中得到优化,这些版本在很大程度上克服了以前的限制。”

  1. 哪一个更适合开发类似Facebook的社交网站? Facebook目前使用Hive和Cassandra等数据库的组合。
  2. 哪一个更适合4页标准版面网站(主页,产品,关于,联系方式) 同样,这取决于您希望如何存储和处理数据。但任何SQL或NOSQL数据库都可以完成这项任务。