2010-06-21 80 views
1

我正在使用ar-extensions的導入功能來執行批量導入,但它很快,但速度並不像我想的那麼快。兩個問題我從日誌中看到:在Rails中批量插入和「批量驗證」的問題

  1. 我仍然看到單個SQL INSERT語句 - 爲什麼沒有做多行插入?

  2. 我有一個:validates_uniqueness_of,我看到它爲每一行做了SELECT操作。是否有一種「批量驗證」的方式,它可以只用WHERE子句選擇所有的東西,然後驗證唯一性呢?

我猶豫下降到SQL這樣做的,所以任何建議 - 或使用不同的寶石/插件嗎?謝謝!

回答

1

我在我的模型中使用instance_attribute(@bulk_loading)來進行批量插入。如果變量爲真,那麼一些驗證不會運行。

正如egarcia所說,目前AR不支持多行插入。

validate_uniqueness_of驗證的加速

1)建立在DBMS中唯一索引做檢查,並且不要使用AR進行檢查。 - 由於違反唯一索引而導致插入失敗時,從dbms驅動程序中捕獲相應的錯誤。2)在db中爲uniqueness_validation創建非唯一索引並檢查(使用db查詢分析技術)正在使用索引,並且sql唯一性檢查正在儘可能快地執行。

+0

謝謝拉里 - 我沒有想過只使用一個唯一的索引 – ambertch 2010-06-22 04:55:27

1

我在幾個項目上使用FasterCSV,它似乎足夠快。但是,它不會執行「多行插入」。我不認爲ActiveRecord能夠做到這一點,特別是涉及到驗證。

使用你的數據庫的本地導入機制將會更快,但你會失去一些AR的優點 - 驗證和過濾器,主要是。