我遇到过以下问题:
有两种模式: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)
)。这需要很长时间。
问题是:如何加快速度?
感谢。
答案 0 :(得分: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(','));
这会创建一个'insert',传递要插入的所有记录。不确定这是否会更快,但如果你需要应用程序不为用户超时,你可以把它放到后台工作。