私はこれを検索しましたが、答えが見つからなかったので驚いたので、これを複雑にしすぎている可能性があります。しかし、基本的に、Rails 3アプリケーションにはRESTfulモデルがいくつかあります。これらのモデルは、時間の経過に伴う人気の追跡のために、非常に簡単な方法で追跡したいと考えています。私の場合、GET / showメソッドでのヒットの追跡にのみ関心があります。ユーザーはログインしてこれら2つのリソースを表示し、表示/ページの読み込みごとに訪問数が増加します。
そこで、Booksモデルに「visits」列を配置しました。
== AddVisitsToBooks: migrating ===============================================
-- add_column(:books, :visits, :integer)
-> 0.0008s
== AddVisitsToBooks: migrated (0.0009s) ======================================
列はゼロに初期化され、その後、基本的に、books_controller内で、
def show
unless @book.owner == current_user #hypothetically, we won't let an owner
"cheat" their way to being popular
@book.visits = @book.visits + 1
@book.save
end
これは正常に機能しますが、showメソッドが呼び出されるたびに、オブジェクトレコードの読み取りアクションだけでなく、書き込みも実行されるようになりました。そして、おそらくそれが私の質問の核心になります。単一の整数の変更を挿入するために必要な総オーバーヘッドは、中小規模の本番アプリで大きな問題になりますか?それとも、それは小さな取引ですか、それとも基本的に何もありませんか?
それを行うためのはるかに賢い方法はありますか?私が思いついた他のすべては、与えられたページが表示されるたびにレコードに書き込むことをまだ含んでいました。フィールドで検索することはめったにありませんが、フィールドのインデックスを作成すると役立ちますか?
ちなみに、データベースはPostgreSQL 9(Herokuで実行)です。
ありがとう!