2012-06-17 6 views
6

私のActiveRecordモデルでは、uuidベースの主キーを使用しています。find_in_batchesを使用して一度に1000レコードをロードします。しかし、documentationを見ると、整数ベースの主キーのみで動作すると言っています。私はコードを見て、それは単に "primary_key ASC"でレコードを注文することがわかります。非整数ベースのプライマリキーで動作しないのはなぜですか?この注文のためだけですか?私はこの方法で私のモデルを試しました、それは大丈夫です。find_in_batchesは整数ベースの主キーでのみ機能しますか?

誰でもこのことについて私に説明できますか?

答えて

7

ドキュメントが100%正しくないと思います。 増分プライマリキーで正しく動作します。新しいレコードのuuidがテーブル内の既存のレコードのキーよりも大きくなることが保証できる場合は、正しく動作します。それ以外の場合は、バッチ処理を開始した後に追加された新しいレコードを見逃す可能性があります。

内部的に、各ステップで、最後のレコードのID(last_id)を取得し、次のステップでIDがlast_idより大きい1000レコードを選択します。したがって、処理ステップ中にアプリケーションが固有IDが< last_idの新しいレコードを作成した場合、このレコードは処理から除外されます。

+0

はい、いい説明です。私は新しいレコードが追加されたとは思わなかった。 – Chamnap

関連する問題