ロールバックは手動のクリーンアップと同じではなく、ほとんどの場合、推奨される方法であることは承知しています。とはいえ、データベース内の他のテーブルで同時に保存と削除が行われる場合、大規模なデータベースのロールバックと手動のクリーンアップのパフォーマンスの違いは何ですか?
追加の詳細:
現在、ユーザーがネストされた学校データの大きな CSV をインポートできるようにする Rails アプリに取り組んでいます。学校には多くの教師がいて、教師には多くの教室があり、教室には多くの生徒がいます。したがって、CSV は次のようになります。
School 1
Teacher 1
Class 1
Student 1
Student 2
Student 5
Class 2
Student 3
Teacher 2
Class 4
Student 1
Student 4
バックグラウンド ジョブで、私は現在この CSV を取得しており、データベース トランザクション ブロック内で、メモリ内に巨大な学校オブジェクトを構築してから、1 回の保存を試みています。検証の理由またはタイムアウトが原因で保存が失敗した場合、トランザクション ブロックはデータベースを以前の状態にロールバックします。
このロールバックのパフォーマンスが本番環境で非常に遅いことに気付きました。その理由の一部は、ロールバック中にデータベースへの読み取りと書き込みが同時に行われるためだと思います。私は現在、:dependent => :delete_all アプローチを介してデータベースを手動でクリーンアップする方が速いかどうかを考えています。開発中にこれらをベンチマークすると、手動のクリーンアップはロールバックよりもわずかに遅くなりますが、これも同時読み取り/書き込みなしです。