2016-09-28 122 views
0

我有一个PHP程序,它从API获取以下240小时的天气预报数据,为100个不同的城市(总共24000条记录;我保存它们在一个表中)。该计划针对每个城市和每个小时获取温度,湿度,降水概率,天空覆盖和风速。这些数据采用JSON格式,我必须将其全部存储到数据库中,最好是mySQL。对于所有城市来说,这个操作必须一次完成,这一点很重要。使用来自JSON对象的值批量更新数据库表

由于我想每10分钟更新一次数值,因此性能非常重要。如果有人能告诉我哪个是最有效的方式来更新我的表与JSON的值,这将是非常有帮助的。

到目前为止,我已经尝试了以下策略:
1)解码JSON,并使用一个带准备语句的循环来更新每个值{太慢};
2)使用存储过程{我不知道如何传递整个JSON对象的过程,并且我知道我可以传递的个体参数数量有限};
3)使用LOAD DATA INFILE {生成csv文件太慢};
4)使用UPDATE和CASE,动态生成sql(字符串变得太长,执行速度太慢)。

如果需要,我很乐意提供更多信息。

+1

我100%肯定这API将阻止此类流量。 –

+0

好的,在介绍中我简化了一些东西,但这不是我问题的关键。我有一个json对象,我想把它放到一个DB中,就是这样。 –

回答

0

你有一个大约有十几列的表格,对吗?你需要每10分钟插入100行,对吗?

像这样插入100行,每只会有一点挑战性。请向我们展示SQL代码;有些事情一定是错误的。我无法想象你的任何选择会花费几秒钟的时间。 “几秒钟”太慢了?

或者表格只有100行吗?你每隔10分钟发布100次更新?尽管如此,没有汗水。

重建技术:

如果可行,我将建立一个新表与新数据,然后交换表:

CREATE TABLE new LIKE real; 
Load the data (LOAD DATA INFILE is good if you have a .csv) 
RENAME TABLE real TO old, new TO real; 
DROP TABLE old; 

没有停机时间 - 在real始终可用,不管负载需要多长时间。

(做了大规模的更新更加“努力”在数据库内;重装应该会更快。)

+0

我的错误,抱歉。我的意思是我有24000行,我想每10分钟更新一次。 虽然你说得对,但我的代码错了。我已经重写了它,现在查询需要大约5秒钟。 但是,由于我必须更新表中的所有行,所以我可能有兴趣创建一个新表,您有什么想法?在这种情况下,我该怎么做,只需创建一个表,插入数据而不是更新它们,然后重命名这些表? 谢谢你的回答。 –

+0

我增加了我的答案。 –

相关问题