Я только что сделал подобное и часто использую CF для анализа данных.
1) Ведение таблицы загрузки файлов (родительская таблица). Для каждого загружаемого файла вы должны иметь возможность хранить список каждого файла и состояние, в котором он находится (загружен, обработан, необработан)
2) Временная таблица для хранения всех строк файла данных. (дочерняя таблица) Импорт всего файла данных во временную таблицу. Попытка сделать все это в памяти неизбежно приведет к некоторым ошибкам. Каждая строка в этой таблице будет ссылаться на запись таблицы загрузки файлов выше.
3) Сохранение статуса обработки - Для каждой строки файла данных, который вы вводите, установите тег «process / unprocessed». Таким образом, если он сломается, вы можете начать с того места, где остановились. Когда вы пробегаете каждую строку, установите ее как «обработанную».
4) Транзакция - используйте cftransaction, если это возможно, чтобы зафиксировать все сразу или хотя бы по одной строке за раз (с вашими 5 запросами). Таким образом, если что-то произойдет, у вас не будет ни одной строки данных, которая была бы наполовину вычислена / обработана / обновлена / протестирована.
5) Как только вы закончите обработку, установите запись имени файла в таблице на шаге 1, чтобы она была «обработана»
Используя описанный выше подход, если что-то не получается, вы можете настроить его так, чтобы оно начиналось с того места, где оно остановилось, или, по крайней мере, иметь более четкий путь, с которого следует начинать расследование, или очистить данные в худшем случае. У вас будет четкий способ отображения пользователю статуса текущей обработки загрузки, где она находится и где остановилась в случае ошибки.
Если у вас есть какие-либо вопросы, дайте мне знать.
Другие мысли:
Вы можете увеличить тайм-ауты, дать ВМ больше памяти, перевести ее в 64-битный режим, но все это только увеличит емкость вашей системы. Это хорошая идея, чтобы сделать это за вызов и сделать это в сочетании с вышеуказанным.
В Java есть несколько удобных библиотек обработки файлов, которые доступны как CFCS. если вы столкнулись со многими проблемами со скоростью, вы можете использовать одну из них, чтобы прочитать ее в переменную, а затем в базу данных
Если вы играете с XML, не используйте разбор xf Coldfusion. Он хорошо работает для небольших файлов и подходит, когда все становится больше. Есть несколько написанных cfc (проверьте riaforge и т. Д.), Которые обертывают несколько превосходных библиотек java для анализа XML-данных. Затем вы можете вручную создать cfquery с этими данными.