Improve performance of follow recommendation scheduler (#16159)
Express follow_recommendations in terms of account_summaries rather than accounts, integrate filters that are unconditionally used, and materialize the resulting view. This should result in the bulk of the computation being performed only once instead of **once per recommendation language**.
This commit is contained in:
parent
351c744590
commit
d9ae3db8d5
5 changed files with 75 additions and 16 deletions
|
@ -14,13 +14,14 @@ class Scheduler::FollowRecommendationsScheduler
|
|||
def perform
|
||||
# Maintaining a materialized view speeds-up subsequent queries significantly
|
||||
AccountSummary.refresh
|
||||
FollowRecommendation.refresh
|
||||
|
||||
fallback_recommendations = FollowRecommendation.safe.filtered.limit(SET_SIZE).index_by(&:account_id)
|
||||
fallback_recommendations = FollowRecommendation.limit(SET_SIZE).index_by(&:account_id)
|
||||
|
||||
I18n.available_locales.each do |locale|
|
||||
recommendations = begin
|
||||
if AccountSummary.safe.filtered.localized(locale).exists? # We can skip the work if no accounts with that language exist
|
||||
FollowRecommendation.safe.filtered.localized(locale).limit(SET_SIZE).index_by(&:account_id)
|
||||
FollowRecommendation.localized(locale).limit(SET_SIZE).index_by(&:account_id)
|
||||
else
|
||||
{}
|
||||
end
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue