【问题标题】:Rails 3 Activity Tracker Database ManagementRails 3 活动跟踪器数据库管理
【发布时间】:2012-08-10 22:56:34
【问题描述】:

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

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 作为我选择的数据库。

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 postgresql activerecord


    【解决方案1】:

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

    activities.create(...)
    

    您对数据库所做的只是一个 INSERT:没有用于构建 activitiesselect * from activities where ...,只有来自 create 调用的 INSERT。

    因此,您无需担心 log_activity 方法。

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

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

    不时清理死木应该没问题。当然,'10 days' 只是为了说明。

    【讨论】:

    • 我想我总是可以手动运行查询。如果它变得太麻烦,我相信仅仅自动化这个过程不会太麻烦。
    猜你喜欢
    • 2020-01-04
    • 2017-12-20
    • 2022-01-13
    • 2010-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多