class Search
has_many :items , dependent: :destroy
end
class Item
has_many :sub_items , dependent: :destroy
end
class SubItem
end
アイテムは100〜10,000の範囲とすることができます。 SumItemsは平均で約100です。
私の記憶を低く維持しようとすると、私は次のように使用:
クラスの検索
before_destroy :destroy_items_in_batches
def destroy_items_in_batches
self.try(:items).try(:in_batches, { of: 300 }).try(:destroy_all)
end
クラス項目
before_destroy :destroy_transactions_in_batches
def destroy_transactions_in_batches
self.try(:sub_items).try(:in_batches, { of: 100 }).try(:destroy_all)
end
は、それはまだ十分ではなかったので、私私はそれを破壊するので、ロードされたメモリを減らすためにクエリにselect
を追加しました。私が気にするのは、データベースから削除する必要があるIDです。
self.try(:items).try(:select,:id).try(:in_batches, { of: 300 }).try(:destroy_all)
self.try(:sub_items).try(:select,:id).try(:in_batches, { of: 100 }).try(:destroy_all)
メモリ使用量を削除するには他に何もできますか? (バッチサイズを減らす明白な解決策以外に)
ありがとうございます。ここで提案する破壊コールバックに依存して自分自身を実装します。 –