【发布时间】:2015-04-09 11:05:32
【问题描述】:
我必须使用 PHP 每 10 分钟更新一次 MySQL 数据库中的大表(产品)。我必须使用 cron 作业运行 PHP 脚本,并且从 CSV 文件中获取最新的产品。该表目前有 ~18000 行,不幸的是我无法判断它在 10 分钟内会发生多少变化。最重要的当然是我不希望用户在后台注意到更新。
这些是我的想法和恐惧:
Idea1:我知道有一种方法可以使用 MySQL 来load a csv file into a table,所以也许我可以使用事务来截断表,然后导入 CSV。但是即使我使用事务,只要表很大,恐怕会有一点机会让一些用户看到空数据库。
Idea2:我可以比较旧的和新的 csv 文件 with a library 并且只更新/添加/删除更改的行。这种方式我认为用户不可能看到一个空的数据库,但我担心这种方法会消耗大量的 RAM 和 CPU,而且我在共享主机上。
所以基本上我想知道在用户没有注意到的情况下完全更新表最安全的方法。
【问题讨论】:
-
无论哪种方式,您都必须小心 CPU 和 RAM,因为您使用的是共享主机。您总共说的是大约多少行?十分钟内有多少可能发生变化?偶尔的 RAM 峰值通常是可以原谅的,但 CPU 是一个棘手的问题:您可能会发现
usleep()在这里有助于让盒子上的其他应用程序查看。 (而且,正如我最近发现的那样,CSV 导入无论如何都可以在非常小的 RAM 占用空间中完成)。 -
谢谢halfer,我已经用更多细节更新了我的问题。
-
18K 行对于
-
我做的事情与此非常相似。我以 .csv 格式下载 CDR 记录,并使用 PHP 脚本每小时用新数据更新 MySQL 表。 PHP 脚本使用 cron 运行,效果很好。你的情况有点不同,因为你是在更新,而不是添加。是否有任何理由不每 10 分钟更新一次原始表?您的 CSV 数据是否有可用作主键的字段?您可以梳理该主键的 CSV 并设置一个条件,如果主键已经存在则更新表中的信息,如果主键不存在则插入。
标签: php mysql csv transactions cron