0

我最近在我的应用程序中添加了用户活动跟踪功能,该功能跟踪用户与多个模型的交互,以及每个模型中的几个不同操作。

class User

  has_many :activities, :order => 'created_at desc'     

  def log_activity(object, type)
    activities.create(:subject_type => object.class.name, :subject_id => object.id, :subject_action_type => type)
  end 

end

现在我在用户创建/更新/删除各种对象并在用户配置文件上显示此活动后调用此方法。我想一段时间后,活动表将包含如此多的记录,它会达到影响加载时间的程度。我想知道以用户友好的方式管理它并保持我的数据库顺利运行的一个好的实现是什么。

我正在考虑设置某种计划任务,在 x 时间后清理旧记录。也许您可以就如何完成此任务提供一些建议或推荐更好的解决方案?

我使用PostgreSQL作为我选择的数据库。

4

1 回答 1

0

您的activities延迟加载,因此除非您要求,否则它不会拉入所有相关活动。所以当你这样说的时候:

activities.create(...)

您对数据库所做的只是一个 INSERT:没有select * from activities where ...to build activities,只有create调用中的 INSERT。

所以你不用担心你的log_activity方法。

如果你想限制你的activities表的大小,那么一个简单的:

Activity.connection.execute("delete from activities where created_at < now() - interval '10 days'")

偶尔清理一下死木应该没问题。'10 days'当然,这只是为了说明。

于 2012-08-11T00:15:07.093 回答