在我继续之前,这纯粹是一种直觉问题。也就是说,我不是在寻找答案来解决我的PHP / MySQL代码中的特定错误。相反,我想了解在解决我的问题时需要考虑的一系列可能问题。为此,我不会发布代码或附加脚本 - 我将简单地解释我做了什么以及发生了什么。
我编写了
的PHP脚本我每隔30分钟通过单独的预定cron任务处理几个CSV文件。所有人都说,从各种来源,估计有420,000个从文件到根表的插入事务,以及通过计划任务从根表到主表的另外420,000个插入事务。
其中一项任务涉及一个大约400,000条记录的CSV文件。处理中没有错误,但问题在于:MySQL指示的400,000条记录已经成功插入到根表中,这些记录中只有大约92,000条实际存储在根表中 - 我从那个计划中丢失了大约308,000条记录任务。
其他计划任务分别处理大约16,000和1,000个事务,这些事务处理完美。事实上,如果我将交易数量从400,000减少到10,000,那么这些过程也很好。显然,这不是目标。
为解决这个问题,我尝试了几种补救措施......
......并且这些补救措施都没有按照预期发挥作用。
鉴于到目前为止所采取的行动缺乏成功,此时应考虑采取哪些补救措施?感谢...
答案 0 :(得分:0)
csv中的源数据可能有重复的记录。即使csv中有400,000条记录,您的“插入或更新”逻辑也会将它们修剪为简化集。较少的内存可能导致异常等,但这种数据丢失。
答案 1 :(得分:0)
我怀疑CSV文件存在问题。
我的建议:
这是这样的:
<?php
$csv = fopen('sample.csv', 'r'); $line = 1;
while (($item = fgetcsv($csv)) !== false) {
echo 'Line ' . $line++ . '... ';
$sql = ''; // your SQL query
mysql_query($sql);
$error = mysql_error();
if ($error == '') {
echo 'OK' . PHP_EOL;
} else {
echo 'FAILED' . PHP_EOL . $error . PHP_EOL;
}
}
因此,如果有任何错误,您可以看到它并找到问题(CSV的哪些行有问题)。