1.现在有一个300M的文件 需要把里面的数据一行一行读取出来,每行进行处理(无法做成幂等)。但是怕处理过程中系统挂掉,不知道该从哪一行再重新读取,怕挂之前已经处理的行再次处理一遍
2.现在想到的方案是 读取一行处理一行之后把该行删除,即时程序挂掉,再次执行从开始读也不会读取到原来已经处理的行
3.看一下各位大牛有没有好的解决方案谢谢
//想读取一行删除一行 该如何操作或者有更好的解决方案 避免同一行执行两次
$fp = fopen($fileName, "r");
if (!$fp) {
return -1;
}
$max = 40960; //40k
while (!feof($fp)) {
$line = fgets($fp, $max);
}
现在的处理方案是把处理到多少行了进行文件存储,避免崩盘之后从头开始再执行,本来打算存redis的,但是就在一台机器上执行,存文件吧
我觉得你可以换个方式来实现你要的效果:你可以读取一行,处理完这行后,在这行后加个特殊的符号。循环遍历每行就能知道哪些行是被处理过的。假如你的程序挂掉,再次执行的时候,直接搜索那个特殊符号最后一次出现的地方。然后这个地方的下一行就是你该开始执行的地方了。