2012-06-17 35 views
6

我的ActiveRecord模型使用基於uuid的主鍵,我想用find_in_batches一次加載1000條記錄。但是,看到documentation,它只能使用基於整數的主鍵。我瀏覽了代碼,我發現它只是通過「primary_key ASC」訂購記錄。爲什麼它不適用於基於非整數的主鍵?僅僅是因爲這個順序?我用這種方法試用了我的模型,它工作正常。find_in_batches僅適用於基於整數的主鍵?

任何人都可以解釋我嗎?

回答

7

猜猜文檔不是100%正確的。它與增量主鍵正常工作。如果您可以保證任何新記錄的uuid將大於表中任何現有記錄的密鑰,則它將正常工作。否則,在開始批處理後,您有機會錯過添加的新記錄。

在內部,每一步都會獲取最後一條記錄的標識(last_id),並在下一步中選擇1000條記錄的ID大於last_id的記錄。因此,如果應用程序在處理步驟中創建了具有唯一標識< last_id的新記錄,則該記錄將被排除在處理之外。

+0

是的,這是一個很好的解釋。我沒有考慮添加新記錄。 – Chamnap