Разбор файлов с другого сервера - использование потоков - PullRequest
0 голосов
/ 14 июля 2010

У меня есть этот сценарий. ОС - это UNIX. На сервере A имеется множество файлов. Необходимо отправить эти файлы (они в формате XML) по FTP на сервер B, проанализировать их и сохранить значения, извлеченные из определенных тегов, в БД. Текущая реализация парсера в perl такова, что файлы обрабатываются последовательно. Можно ли использовать здесь многопоточную концепцию для ускорения выборки?

Ответы [ 3 ]

0 голосов
/ 14 июля 2010

Да, это значительно повысит производительность. У вас есть две операции ввода-вывода (FTP, доступ к базе данных), и некоторые потоки могут использовать ядра процессора для анализа, в то время как другие ожидают во время операций ввода-вывода.

0 голосов
/ 14 июля 2010

Мне пришлось выполнить почти ту же задачу на Java. Объекты высокого уровня параллелизма мне очень помогли. В частности, я использовал от ThreadPoolExecutor до Executors.newFixedThreadPool(concurrentCount);.

Каждый FTP-файл был загружен с использованием нового FTP-соединения. Преимущество заключается в том, что вы экономите время на установление соединения и запрашивает файл, поскольку в это время другой процесс использует вашу пропускную способность.

Для задач, связанных с FTP, я использовал org.apache.commons.net.ftp.FTPClient

Редактировать: вы можете начать обработку XML сразу после завершения загрузки, используя метод Future.get().

0 голосов
/ 14 июля 2010

Выборка и обработка - это отдельные шаги.

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

Для шага обработки: если файлы не связаны, да, вы увидите ускорение при обработке более чем одного в унисон (если сервер сам по себе не является более старой одноядерной машиной без гиперпотока).

Ни одно из этих изменений не требует перехода на Java. Это отдельная проблема.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...