diff options
author | Claire <claire.github-309c@sitedethib.com> | 2021-05-05 22:04:52 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-05-05 22:04:52 +0200 |
commit | d9ae3db8d5543cf0b7fa44186c191c9bb2472d23 (patch) | |
tree | 512309009b33d99557dbfbc7d2513b1b3792bf60 /app/workers | |
parent | 351c74459084ccffce1333b57c2af9a6b55cac8d (diff) |
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**.
Diffstat (limited to 'app/workers')
-rw-r--r-- | app/workers/scheduler/follow_recommendations_scheduler.rb | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/app/workers/scheduler/follow_recommendations_scheduler.rb b/app/workers/scheduler/follow_recommendations_scheduler.rb index 0a0286496..cb1e15961 100644 --- a/app/workers/scheduler/follow_recommendations_scheduler.rb +++ b/app/workers/scheduler/follow_recommendations_scheduler.rb @@ -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 |