Ich schreibe eine Rails 5 JSON API.Wie cache Top N Beiträge nach Bewertung sortiert?
Ich habe eine Aktion bekam die oben N Blog-Beiträge liefert basierend auf durchschnittliche Bewertung. Um eine niedrige Antwortzeit zu erreichen, denormalisierte ich meine Datenbank so, dass posts
eine average_rating
Spalte hat.
Ich bin auch Caching jede Abfrage wie folgt:
# 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
(Sortieren nach average_rating
im Modell selbst)
Ich bin mir bewusst, dass dies bei weitem nicht optimal ist.
Während es drastisch Reaktionszeit verbessert, wenn die gleiche Menge Beiträge anfordert, wäre es viel besser, wenn, wenn es bereits oben gecached 1000 Beiträge, wird es nicht Cache 100 Beiträge, sondern würde sich zuerst 100 Beiträge aus der zwischengespeichert 1000.
Was ist ein guter Weg, dies zu erreichen?