1. Il y a maintenant un fichier de 300 Mo. Les données qu'il contient doivent être lues ligne par ligne et traitées pour chaque ligne (elles ne peuvent pas être rendues idempotentes). Mais j'ai peur que le système raccroche pendant le traitement, et je ne sais pas quelle ligne relire. J'ai peur que les lignes qui ont été traitées auparavant le soient à nouveau 2. La solution à laquelle je pense. Il s'agit maintenant de lire une ligne, de traiter une ligne et de supprimer la ligne immédiatement. Le programme se bloque, et si vous l'exécutez à nouveau et lisez depuis le début, vous ne pourrez pas lire les lignes précédemment traitées. tous les experts ont de bonnes solutions. Merci.
//Je souhaite lire une ligne et supprimer une ligne. Comment dois-je procéder ou existe-t-il une meilleure solution pour éviter d'exécuter la même ligne deux fois ?
$fp = fopen($fileName, "r");
if (!$fp) {
return -1;
}
$max = 40960; //40k
while (!feof($fp)) {
$line = fgets($fp, $max);
}
Puisqu'il est stipulé de lire ligne par ligne, pourquoi ne pas écrire un script pour diviser le fichier en plusieurs petits fichiers (notez le nom, comme la commande
Linux
中的split
), puis écrire un script pour boucler l'opération de lecture.Je pense que vous pouvez obtenir l'effet souhaité d'une autre manière : vous pouvez lire une ligne et, après avoir traité la ligne, ajouter un symbole spécial après la ligne. Une boucle sur chaque ligne vous indiquera quelles lignes ont été traitées. Si votre programme se bloque, lorsque vous l'exécutez à nouveau, recherchez directement le dernier endroit où le symbole spécial est apparu. Ensuite, la ligne suivante est l'endroit où vous devez commencer l'exécution.
Écrivez un fichier séparé pour enregistrer l'emplacement de traitement. Vous pouvez également enregistrer le numéro de ligne et le décalage de l'ensemble du fichier.
Changer de fichiers pendant la lecture est trop lent.