2010-12-16 17 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

相关问题