0
目前我的應用程序有統計需求和我如何確保使用find_in_batches時的正確性?
彌補後臺作業使用魯弗斯調度,並在3:00
運行,以批量處理這些記錄到CacheStat表。這就像
任何正常應用程序的每週/每月統計需求。
而且我發現使用find_each(說使用User.find_each迭代 所有用戶),它調用find_in_batches,我籤的源代碼軌道 ,
while records.any?
records_size = records.size
primary_key_offset = records.last.id
yield records
break if records_size < batch_size
if primary_key_offset
records = relation.where(table[primary_key].gt(primary_key_offset)).to_a
else
raise "Primary key not included in the custom select clause"
end
end
其中implentation是通過比較主鍵, 我的問題是cocurrency,而我處理批處理, whatif一些記錄插入之間? 有沒有人有這種問題?
雖然我認爲,這個代碼實現可能是problemic,
,因爲新的記錄將始終有較大的PK,後來在
年底纔會發現。
所以這就是這種需求的實現?如果我想
我自己(無軌)實施一批統計處理,然後我
需要確保有一個整數的主鍵,並使用這些字段
比較(最好不要使用其他種田)?
(我想這是因爲我在從MySQL切換
到蒙戈中間是那種的,所以也許以後我需要自己實現這種
功能)。
在交易中放置這麼大的東西真的很好,大多數基於統計的計算會迭代所有將有超過100萬份文件的表,交易是否真的很好?我原來使用find_each而不是User.all(將所有內容加載到內存中)是內存/ CPU使用率問題。 – femto