這是我的導入腳本。我有大約40萬條記錄。而我的連接在插入記錄期間關閉。如何將它分割成小塊?如何將我的插頁分成更小的片段?
def extract_to_database(collection)
tmp = []
type = K
inserts = []
collection.each_with_index do |line, i|
_type = line.strip
_changed = TYPES.include? _type
if _changed && i > 0
case type
when K then @k << tmp
when F then @f << tmp
when FB then @f << tmp
when I, D
pharmaceutic = Pharmaceutic.find_by pzn: tmp[PZN]
if pharmaceutic
inserts.push "(#{pharmaceutic.id}, '#{tmp[UNIT]}', '#{tmp[DOSE]}')"
end
end
tmp = []
type = _type
end
tmp << clean(line)
end
sql = "INSERT INTO pharmaceutic_dosages (`pharmaceutic_id`, `unit`, `dose`) VALUES #{inserts.join(", ")}"
CONN.execute sql
end
您面臨的實際問題是什麼? –
這可能是一個X,Y問題,當你試圖解決Y可能有完全不同的,更好的和/或更有效的解決方案的時候,你正在追尋解決方案的下游路徑X,如果你願意告訴我們更多關於數據和數據庫的信息。關閉自動索引可以加速更新/插入,關閉提交併在* n *記錄之後定期提交。你說你的連接正在關閉,但是不要告訴我們是否有錯誤產生,哪些應該存在,但是不要給我們實際的文本。 –
另外,在準備好使用它之前,請不要打開數據庫連接。你不會顯示你連接的時間/地點,但它被認爲是不好的形式來打開它,讓它掛起一段不確定的時間,然後最終使用它。打開的連接使用服務器上的資源,因此當您加載數據時,打開連接,立即執行您需要做的事情,然後斷開連接。 –