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

标签 php mysql json performance

我有一个 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/

相关文章:

php - 如何加速 CURL 任务?

多行的MySQL AVG TimeDiff

php - 我如何检查包含 ip 地址(inet_aton)的 php 变量($stat_ip)是否位于两个 ip(inet_aton 格式)的范围内

json - 我们如何遍历震动规范?

java - 如何将变量数组传递给android中的REST URL?

PHP mysql 检查多个表中的变量

php - 为什么这些具有相同样式标签的页面会产生不同的字体大小?

php - 如何从数组中删除键并更新索引?

java - Solr 中的修剪空格并忽略哈希符号

php - 我应该在 CouchDB/Ajax 应用程序中使用 PHP 中的数组还是对象?