2011-04-05 68 views
6

我正在构建一个应用程序,允许对5种独特模型(帖子,照片,事件等)进行评论,还有2或3种模式。就目前而言,每个模型都有一个相关的评论模型(PostComments,PhotoComments,EventComments等),虽然评论本身在所有模型中通常是相同的。许多不同型号的评论:多态与否? (Ruby on Rails)

我最近发现了多态关联的力量,在Railscast #154中完美地解释了这一点,它基本上将许多模型合并成一个模型,并将许多表合并成一个表。

尽管多态关联会清除代码和冗余,但它们如何影响性能?我对数据库优化知之甚少,但似乎需要更长时间才能从通用注释表中的1,000,000行以上的查询中查询特定注释表中的200,000行以上的注释。是否值得切换到多态关联(虽然应用程序在开发中还相对较早),还是应该继续为每种类型的评论制作模型/表格?

+2

评论功能实际上是多态关联的最好例子。 1000000行对于具有适当索引和查询的体面的mysql服务器来说没有任何意义。不要试图解决不存在的问题:) – keymone 2011-04-05 07:44:42

回答

3

这确实取决于网站的规模。首先,你必须在2个colums上添加一个索引。

add_index :comments, [:commentable_type, commentable_id] 

这会提高速度很多。

如果您将来因为您有1.000.000条评论而存在很大的速度问题,您可以随时使用缓存,甚至可以迁移到多个表。但是真的需要很多评论来解决速度问题。只要你索引你的桌子!在1.000.000记录中执行搜索查询并不是那么重要。

我说,做1桌!

+0

谢谢,我正在计划正确的索引,但忘了在原始问题中提及。 – aguynamedloren 2011-04-05 08:10:35

0

一点提高了迈克尔的回答是:

add_index :comments, [:commentable_id, :commentable_type] 

我觉得这个答案会比较好,因为:commentable_id属性会缩小查询更多,这意味着整体的查询速度比指数将是一个很大更快。请给我反馈:)