2012-08-10 44 views
0

我最近添加了用户活动跟踪功能到我的应用程序,该应用程序跟踪用户与多个模型的交互以及每个模型中的几个不同操作。Rails 3活动跟踪器数据库管理

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 

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

我正在考虑设置某种计划任务,在x时间后清理旧记录。也许你可以给出一些建议,以告知如何实现这个目标或推荐更好的解决方案?

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

回答

0

您的activities懒加载,所以它不会拉动所有相关的活动,除非你要求他们。所以,当你这样说:

activities.create(...) 

所有你正在做的数据库是一个INSERT语句:没有select * from activities where ...建立activities,还有刚刚从create调用INSERT。

所以你没有什么可以从log_activity方法中担心。

如果你想限制你activities表的大小,然后进行简单:

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

飘飞应该罚款,以清除枯木。当然,'10 days'只是为了说明。

+0

我想我总是可以手动运行查询。如果它太麻烦了,我相信只要自动化这个过程并不麻烦。 – Noz 2012-08-13 18:44:32