0
私はRails 5 JSON APIを書いています。評価の高い上位N件の投稿をキャッシュする方法は?
私は平均評価に基づいてトップNブログ記事を返すアクションを持っています。応答時間を短くするために、私はposts
にaverage_rating
の列を持つようにデータベースを非正規化しました。
# posts_controller.rb
def top
quantity = params[:quantity]
if quantity.to_i > 0
render json: {
posts: cached_top_posts(quantity)
}, status: :ok
else
render json: '', status: :unprocessable_entity
end
end
def cached_top_posts(quantity)
Rails.cache.fetch(['top', quantity], expires_in: 1.hour) do
Post.limit(quantity).as_json(only: [:title, :content, :average_rating])
end
end
私はこれが最適にはほど遠いことを認識しています(average_rating
順がモデルそのものである):
は、私はまた、キャッシュそうのようなすべてのクエリです。
それが大幅時にすでにキャッシュされた上位1000投稿、それはキャッシュ100回の投稿ませんが、ポストの同じ量を要求する場合ならば、それははるかに良いだろう、応答時間を改善し、代わりに最初のになるだろうけれどものうち10030の投稿がキャッシュされました。1000です。
これを達成するにはどうすればよいでしょうか?