我有這兩個表安裝和客戶端。 安裝有大約一萬條記錄,大約有40萬客戶嘗試爲百萬條記錄生成csv時,RAM使用率爲99%Rails
class Installation < ApplicationRecord
belongs_to :client, optional: true
end
和
class Client < ApplicationRecord
has_many :installations
end
我需要生成一個CSV文件,其中將有百萬的安裝記錄,包括相關的客戶端的用戶名和LINK_TO_PROFILE(如果本)
代碼來生成CSV是
require 'csv'
def self.generate_csv
attributes = %w{ app_identifier app_name device_type installation_id app_version time_zone created_date updated_date username link_to_profile }
CSV.generate(headers: true) do |csv|
csv << attributes
Installation.all.each do |installation|
data = [installation.app_identifier, installation.app_name , installation.device_type , installation.db_id , installation.app_version , installation.time_zone , installation.created_date , installation.updated_date ]
if installation.client.present?
data << installation.client.username
data << installation.client.link_to_profile
end
csv << data
end
end
end
所以在每次安裝時,其相應的客戶端(如果存在)也會加載以獲取其用戶名和link_to_profile
我有8 GB RAM,當我調用generate_csv時,RAM使用率爲20%。 它開始增加,並在一段時間後,像一個Lac記錄它達到約99.7%,並交換到50%和系統掛起,沒有進一步處理。
這裏有什麼問題,我該如何解決這個問題?
您檢查了[批量](http://api.rubyonrails.org/classes/ActiveRecord/Batches.html)? – jvillian
沒有嘗試過,但渴望加載工作 –