6

find_in_batches私の ActiveRecord モデルは uuid ベースの主キーを使用しており、一度に 1000 レコードをロードするために使用したいと考えています。ただし、ドキュメントを参照すると、整数ベースの主キーでのみ機能すると述べています。コードを調べたところ、" " でレコードが並べ替えられていることがわかりましたprimary_key ASC。非整数ベースの主キーでは機能しないのはなぜですか? この順番だから?この方法でモデルを試してみましたが、問題なく動作します。

誰かがこれについて私に説明してもらえますか?

4

1 に答える 1

8

ドキュメントが 100% 正しいとは限りません。増分主キーで正しく機能します。新しいレコードの uuid がテーブル内の既存のレコードのキーよりも大きいことを保証できれば、正しく機能します。そうしないと、バッチ処理の開始後に追加された新しいレコードを見逃す可能性があります。

内部的には、各ステップで最後のレコード ( ) の ID を取得し、次のステップlast_idよりも大きい ID を持つ 1000 個のレコードを選択します。last_idそのため、アプリケーションが処理ステップ中に一意の ID < を持つ新しいレコードを作成するlast_idと、このレコードは処理から除外されます。

于 2012-06-17T18:08:40.567 に答える