我有模型UserVote
,,,等Comment
,Edit
所有这些都有一个user_id
属性。我正在尝试创建一种最近活动的时间线,这让我分别查询我的所有 5 个模型并按日期时间排序。但是,对于具有大量活动的帐户,这 5 个查询需要很长时间才能执行。我想找到一种优化性能的方法,我认为结合 5 个查询可能会起作用。
我无法提出任何有效的查询来实现我想要的。
谢谢你的帮助!
我有模型UserVote
,,,等Comment
,Edit
所有这些都有一个user_id
属性。我正在尝试创建一种最近活动的时间线,这让我分别查询我的所有 5 个模型并按日期时间排序。但是,对于具有大量活动的帐户,这 5 个查询需要很长时间才能执行。我想找到一种优化性能的方法,我认为结合 5 个查询可能会起作用。
我无法提出任何有效的查询来实现我想要的。
谢谢你的帮助!
我认为评论中最好的建议来自 Steve Jorgensen,“我通常看到这是通过将记录添加到活动日志然后查询它来完成的。”。
如果您想将这个想法提升到一个新的水平,请查看 sphinx(为索引数据库内容而设计的搜索引擎)。您可以使用 thinksphinx - http://freelancing-god.github.com/ts/en/轻松与 rails 集成。
此外,正如 Tim Peters 提出的,无论您如何解决这个问题,您都应该在所有 fkey 上都有索引 - http://apidock.com/rails/ActiveRecord/ConnectionAdapters/SchemaStatements/add_index。
我认为对这个问题使用多态关联是个好主意 - http://guides.rubyonrails.org/association_basics.html#polymorphic-associations
class TimeLine < ActiveRecord::Base
belongs_to :timelineable, :polymorphic => true
end
class UserVote < ActiveRecord::Base
has_many :time_lines, :as => :timelineable
end
class Comments < ActiveRecord::Base
has_many :time_lines, :as => :timelineable
end
现在您可以对 time_line 进行排序并访问相关资源。