最近、ユーザー アクティビティ追跡機能をアプリケーションに追加しました。この機能は、複数のモデルとのユーザー インタラクションと、各モデル内の複数の異なるアクションを追跡します。
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を使用しています。