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:
		@@ -14,9 +14,11 @@ class FollowRecommendation < ApplicationRecord
 | 
			
		||||
  belongs_to :account_summary, foreign_key: :account_id
 | 
			
		||||
  belongs_to :account, foreign_key: :account_id
 | 
			
		||||
 | 
			
		||||
  scope :safe, -> { joins(:account_summary).merge(AccountSummary.safe) }
 | 
			
		||||
  scope :localized, ->(locale) { joins(:account_summary).merge(AccountSummary.localized(locale)) }
 | 
			
		||||
  scope :filtered, -> { joins(:account_summary).merge(AccountSummary.filtered) }
 | 
			
		||||
 | 
			
		||||
  def self.refresh
 | 
			
		||||
    Scenic.database.refresh_materialized_view(table_name, concurrently: true, cascade: false)
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def readonly?
 | 
			
		||||
    true
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user