Je viens de faire une chose similaire et d'utiliser CF souvent pour l'analyse des données.
1) Conserver une table de téléchargement de fichier (table parent). Pour chaque fichier téléchargé, vous devriez pouvoir conserver une liste de chaque fichier et son statut (chargé, traité, non traité)
2) Table temporaire pour stocker toutes les lignes du fichier de données. (table enfant) Importez le fichier de données entier dans une table temporaire. Tenter de tout faire en mémoire conduira inévitablement à quelques erreurs. Chaque ligne de cette table sera liée à une entrée de table de téléchargement de fichiers ci-dessus.
3) Conserver un statut de traitement - Pour chaque ligne du fichier de données que vous introduisez, définissez une variable "process/unprocessed". De cette façon, si elle casse, vous pouvez commencer à partir de l'endroit où vous vous étiez arrêté. Lorsque vous parcourez chaque ligne, définissez-la pour qu'elle soit "traitée".
4) Transaction - utilisez cftransaction si possible pour valider tout cela en même temps, ou au moins une ligne à la fois (avec vos 5 requêtes). De cette façon, si quelque chose bouge, vous n'avez pas une ligne de données qui est à moitié calculée/traitée/mise à jour/testée.
5) Une fois que vous avez terminé le traitement, définissez l'entrée de nom de fichier dans la table à l'étape 1 à « traiter »
En utilisant l'approche ci-dessus, en cas d'échec quelque chose, vous pouvez le configurer pour commencer où il s'est arrêté, ou du moins, il a indiqué clairement où commencer l'enquête ou, dans le pire des cas, nettoyer vos données. Vous aurez une manière claire d'afficher à l'utilisateur l'état du traitement de téléchargement en cours, où il se trouve et où il s'est arrêté s'il y avait une erreur.
Si vous avez des questions, faites le moi savoir.
Autres pensées:
Vous pouvez augmenter les délais d'attente, donner la machine virtuelle plus de mémoire, mettez-le en 64 bits, mais tous ceux qui n'augmenterons la capacité de votre système tant. C'est une bonne idée de faire ces par appel et de le faire en conjonction avec ce qui précède. Java a quelques bibliothèques de traitement de fichiers soignées qui sont disponibles en tant que CFCS. Si vous rencontrez beaucoup de problèmes de vitesse, vous pouvez en utiliser un pour le lire dans une variable puis dans la base de données
Si vous utilisez XML, n'utilisez pas l'analyse xml de coldfusion. Il fonctionne bien pour les fichiers plus petits et a des ajustements quand les choses grossissent. Il y a plusieurs cfc écrits ici (vérifiez riaforge, etc) qui enveloppent d'excellentes bibliothèques java pour analyser les données xml. Vous pouvez ensuite créer une cfquery manuellement si besoin est avec ces données.
Je crois qu'il existe un paramètre de requête que vous pouvez définir pour augmenter le délai jusqu'à la valeur de votre choix. – teabot
Avez-vous essayé? –
Alex
Je suis à peu près sûr qu'il existe aussi une commande qui vous permet d'exécuter une page CF à partir de la ligne de commande, mais que vous ne l'avez pas utilisée depuis longtemps. – teabot