我正在从如下所示的 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,但我不确定这是否是最好的方法。