使用JSON对象中的值批量更新数据库表

时间:2016-09-28 20:10:40

标签: php mysql json performance

我有一个PHP程序,可以从API获取100个不同城市的以下240小时的天气预报数据(共计24.000条记录;我将它们保存在一个表中)。该计划为每个城市和每小时提供温度,湿度,降水概率,天空覆盖和风速。这些数据是JSON格式的,我必须将它们全部存储到数据库中,最好是mySQL。重要的是,必须在一个时间内为所有城市进行此项操作。

由于我想每10分钟左右更新一次,因此性能非常重要。如果有人能告诉我使用JSON中的值更新我的表的最有效方法,那将会有很大的帮助。

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

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

1 个答案:

答案 0 :(得分: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始终可用。

(进行大规模更新更多"努力"在数据库内;重新加载应该更快。)