J'ai une base de données où chaque entrée a un chemin de fichier et un dernier champ modifié:La façon la plus efficace de mettre à jour une liste de fichiers plats
1284581625555 C:\docs\text1.txt
1284581646992 C:\docs\text2.txt
1284581654886 C:\docs\text3.txt
1284581662927 C:\docs\subfolder\text4.txt
1284581671986 C:\docs\subfolder\text5.txt
...
Chaque entrée dispose également d'un résumé du contenu des fichiers et les entrées ont été créés en parcourant récursivement un certain dossier (dans ce cas C: \ docs) et en ajoutant tous les fichiers visités. Maintenant, je voudrais mettre à jour la base de données, à savoir
- Ajouter fichiers nouvellement créés
- Supprimer les fichiers supprimés
- mise à jour des fichiers modifiés
De toute évidence, je dois marcher à nouveau le dossier racine pour voir ce qui a changé. Mais quel est le moyen le plus efficace de le faire?
Il y a deux approches que je peux penser:
- première traversée de la base de données, supprimer toutes les entrées supprimées et mettre à jour toutes les entrées modifiées. Pour cela, chaque fois que vous devez créer un objet fichier à partir de la chaîne de chemin d'accès stockée, appelez file.exists() ou file.isModified(). Ensuite, parcourez récursivement le dossier racine et ajoutez les fichiers qui ne sont pas encore dans la base de données.
- Commencez par parcourir l'arborescence de fichiers et rappelez-vous dans une liste ce qui a été ajouté/supprimé/modifié --- ceci nécessite d'avoir stocké un instantané complet de l'état précédent de l'arborescence de fichiers. Parcourez ensuite la base de données et ajoutez/supprimez/modifiez les entrées, en fonction de la liste créée précédemment.
Quelle approche est la meilleure? Y en a-t-il d'autres?
EDIT: La création du récapitulatif est très coûteuse (extraction de texte intégral) et la traversée de la base de données est également coûteuse, car elle est basée sur des fichiers.