2012-08-10 24 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

相關問題