2010-12-16 15 views
0

我遇到了以下問題: 有2個模型:X和Y,它們如下相互關聯:has n, :<name>, :through => Resouce;當我做類似x.ys = array_with_500_ys的事情時,需要很長時間,因爲DataMapper每個查詢只插入一個關聯(insert into xs_ys(x_id, y_id) values(xid, yid))。這需要很長時間。 問題是:如何讓這個更快?Ruby:DataMapper並且有n,:xyz,:through =>資源

謝謝。

回答

0

因爲DataMapper已經抽象了「後端」,所以標準行爲是一次插入一條記錄作爲SQL(或任何您正在使用的)。

假設你使用的是SQL後端,如Postgres的,你可能會回落到原始的SQL,並執行以下操作:

x = X.first 
query = "INSERT INTO xs_ys(x_id, y_id) VALUES" 
vals = [] 
array_with_500_ys.each do |y| 
    vals << "(#{x.id}, #{y.id})" 
end 

repository.adapter.execute(query + vals.join(',')); 

這將創建一個「插入」,傳遞給插入的所有記錄。不知道這是否會更快,但如果您需要應用程序不超時爲用戶,你可以把它放到後臺作業。

+0

是的,得到了​​atm,只是認爲有更好的解決方案。謝謝你,將會保持原樣。 – Daniel 2011-01-14 03:02:22

相關問題