使用Rails和Mongoid模拟连接行为

时间:2011-09-20 12:11:24

标签: ruby-on-rails-3 postgresql mongodb mongoid

在使用mongodb构建数据库时,我想提出一些建议,我已经阅读了很多内容,如果你有一个有大量连接的数据库,那么最好跟postgresql一起使用。

因此,如果我想要灵活性并且需要多次加入我的数据,那么我应该使用Postgresql吗?我知道mongodb具有快速读/写但需要多次查询才能模拟连接。那么什么时候会成为一个性能打击? mongodb是否限制了您在以前不存在的数据上创建新的复杂关系的能力?

我猜mongodb的吸引力在于它的javascript语法和与json的相似性:)

3 个答案:

答案 0 :(得分:4)

我将从最后开始:

  

我猜mongodb的吸引力在于它的javascript语法和   与json相似:)

不仅如此,json风格并非主要优势。 mongodb的主要优点是能够嵌入文档,高性能和完全可扩展性,全索引支持,map / reduce等。

  

因此,如果我需要灵活性并需要多次加入我的数据,   我应该使用Postgresql吗?

这取决于具体的任务,例如,如果您设计报表系统,我更喜欢使用某些关系数据库。但有时候你可以嵌入文件+ mongodb而不是连接和单独的集合,非常适合数据非规范化(在很多情况下你可以在背景中反规范化以避免连接)

  

我知道mongodb具有快速读/写但需要查询多个   时间来模仿连接。那么这什么时候会成为一个性能受损?

如果你将mongodb用作常规关系数据库(没有嵌入和非规范化),你就永远无法达到最佳性能。

  

mongodb是否会限制您创建新的复杂关系的能力   您之前不存在的数据?

没有mongodb不限制你,因为它不包含任何sql数据库中的外键之类的集合之间的任何约束+它允许嵌入和轻松非规范化数据以满足您的业务需求并实现最佳性能。

答案 1 :(得分:2)

另一种选择是对数据进行非规范化。

您可以将数据副本存储在多个表/集合中。这样做可以避免将相关数据拼接在一起所需的JOIN和查找。

您可以避免加入,并且存储的数据更多 - 但您的整体应用程序可以更快。

在mongoid中有两个伟大的宝石可以让这更容易:

Mongoid_alize& Mongoid_denomalize

http://blog.joshdzielak.com/blog/2012/05/03/releasing-mongoid-alize-comprehensive-field-denormalization-for-mongoid/

答案 2 :(得分:1)