我是从那个看起来像一个API获取数据:减少查询的数量,可能通过表架构?
[{"type": "a", "value": 1, "identifier": 1},
{"type": "b", "value": 9, "identifier": 1},
{...},{...},
{"type": "a", "value": 2, "identifier": n}]
标识符可以是1-500之间的任意值,它不能保证所有的记录都将具有相同的标识符。如果存在标识符,它将具有所有相同的类型和特定的值范围。我最初使用更新记录什么是这样的:
api_data.each do |x|
temp = Object.find_or_create_by_type_and_identifier_and_id(x["type]", x["identifier"], user_id)
temp.update_attributes(x)
end
这是令人难以置信的速度慢,运行的每个此数据将载入时间约2200查询。一旦查看数据是否存在,那么一次更新1100个条目。目前正在使用的表方案是这样的:
create table (type, identifier, id, value)
这是obviously inefficient
,我只是不知道多少等等。我应该尝试减少查询数量,以便在需要更新或提取新用户数据时,应用程序不会抓取?
已经提出的一种方法是批量插入,并在需要更新时删除以前的条目,这会将其减少到2,但我不确定这是否是最好的方法。
做一个批量插入到临时表并从中更新主表。 – 2013-03-19 19:40:16
或使用线程加速 – phoet 2013-03-19 19:40:45