1

ロールバックは手動のクリーンアップと同じではなく、ほとんどの場合、推奨される方法であることは承知しています。とはいえ、データベース内の他のテーブルで同時に保存と削除が行われる場合、大規模なデータベースのロールバックと手動のクリーンアップのパフォーマンスの違いは何ですか?


追加の詳細:

現在、ユーザーがネストされた学校データの大きな 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 アプローチを介してデータベースを手動でクリーンアップする方が速いかどうかを考えています。開発中にこれらをベンチマークすると、手動のクリーンアップはロールバックよりもわずかに遅くなりますが、これも同時読み取り/書き込みなしです。

4

0 に答える 0