我有一个 PHP 程序,它从 API 获取接下来 240 小时内 100 个不同城市的天气预报数据(总共 24.000 条记录;我将它们保存在一个表中)。该程序获取每个城市每小时的温度、湿度、降水概率、天空覆盖和风速。这些数据是 JSON 格式,我必须将其全部存储到数据库中,最好是 mySQL。重要的是,此操作必须在所有城市一次完成。
由于我想每 10 分钟左右更新一次值,因此性能非常重要。如果有人可以告诉我哪种方法是使用 JSON 中的值更新表的最有效方法,那将会有很大帮助。
到目前为止,我已经尝试了以下策略:
1) 解码 JSON 并使用带有准备好的语句的循环来一次更新每个值{太慢};
2)使用存储过程{我不知道如何将整个JSON对象传递给该过程,但我知道我可以传递的单个参数数量有限};
3)使用LOAD DATA INFILE {生成csv文件太慢};
4)使用UPDATE和CASE,动态生成sql{字符串太长,执行速度太慢}。
如果需要,我很乐意提供更多信息。
最佳答案
您有一个包含大约十二列的表,对吗?您需要每 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
始终可用。
(在数据库内进行大规模更新要花费更多的“精力”;重新加载应该更快。)
关于php - 使用 JSON 对象中的值批量更新数据库表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39756796/