Пакетный процесс Mule 4 для большого входного файла

У меня есть огромный файл, в котором может быть от нескольких сотен тысяч до 5 миллионов записей. Его файл с разделителями табуляции. Мне нужно прочитать файл с FTP-сервера, преобразовать его и, наконец, записать в FTP-адрес.

Я собирался использовать FTP-коннектор, чтобы получить повторяемый поток и поместить его в пакет mule. Идея пакетного процесса Inside mule заключалась в том, чтобы использовать пакетный шаг для преобразования записей и, наконец, в пакетном агрегированном FTP записывать файл в место назначения в режиме добавления 100 записей за раз.

Q1. Это хороший подход или есть лучший подход?

Q2. Как работает этап пакетной загрузки и отправки mule (https://docs.mulesoft.com/mule-runtime/4.3/batch-processing-concept#load-and-dispatch) Ожидает ли он, пока весь поток из миллионов записей будет прочитан в памяти перед отправкой экземпляр партии мула?

Q3. При выполнении FTP-записи в пакетном агрегате существует вероятность, что параллельные потоки одновременно начнут добавлять контент на FTP, тем самым повреждая записи. Этого можно избежать. Я читал о блокировках файлов (https://docs.mulesoft.com/ftp-connector/1.5/ftp-write#locks). Я предполагаю, что это просто вызовет исключение блокировки файла и не обязательно будет ждать записи FTP в режиме добавления.


person vibhor    schedule 07.04.2021    source источник


Ответы (1)


Q1. Это хороший подход или есть лучший подход?

См. Ответ Q3, это может не сработать для вас. Вместо этого вы можете использовать foreach и обрабатывать файл последовательно, хотя это значительно увеличит время обработки.

Q2. Как работает этап пакетной загрузки и отправки mule (https://docs.mulesoft.com/mule-runtime/4.3/batch-processing-concept#load-and-dispatch) Ожидает ли он, пока весь поток из миллионов записей будет прочитан в памяти перед отправкой экземпляр партии мула?

Пакетная обработка не загружает большое количество записей в память, она использует файловые очереди. И да, он загружает все записи в очередь перед тем, как начать их обработку.

Q3. При выполнении FTP-записи в пакетном агрегате существует вероятность, что параллельные потоки одновременно начнут добавлять контент на FTP, тем самым повреждая записи. Этого можно избежать. Я читал о блокировках файлов (https://docs.mulesoft.com/ftp-connector/1.5/ftp-write#locks). Я предполагаю, что это просто вызовет исключение блокировки файла и не обязательно будет ждать записи FTP в режиме добавления

Операция записи файла вызовет ошибку FILE: FILE_LOCK, если файл уже заблокирован. Обратите внимание, что Mule 4 не управляет ошибками через исключения, он использует ошибки Mule.

Если вы используете плоский файл DataWeave для анализа входного файла, обратите внимание, что он загрузит файл в память и будет использовать значительно больше памяти, чем сам файл для его обработки, поэтому вы, вероятно, все равно получите ошибку нехватки памяти.

person aled    schedule 08.04.2021
comment
у меня есть файл ffd (плоский файл). Отличается ли обработка файлов csv и flat? Не работает ли параметр повторяемого потока для потоковой передачи одной строки за раз. Цикл For занимает 8 часов, поэтому необходимо повысить производительность, поэтому ищем лучшее решение. - person vibhor; 15.04.2021
comment
При обработке неструктурированный файл может использовать память в размере 40 к 1 от исходного размера файла. Это задокументировано на docs.mulesoft.com/mule-runtime/4.3/. форматы-данные-плоский файл. Вы должны помнить об использовании памяти преобразованием. Использование неповторяемой потоковой передачи может работать немного лучше. - person aled; 16.04.2021