Это большое количество проблем с дизайном и кодом.Параллельная обработка файлов: какие рекомендуемые способы?
Use Case
- Учитывая большое количество файлов журналов в диапазоне (2МБ - 2 Гб), мне нужно, чтобы разобрать каждый из этих журналов и применить некоторую обработку, генерировать Java POJO
.
- По этой причине давайте предположим, что у нас есть только файл журнала 1
- Кроме того, идея состоит в том, чтобы наилучшим образом использовать Систему. Доступны несколько ядер.
Альтернатива 1
- Открыть файл (синхронно), читать каждую строку, генерировать POJO
сек
FileActor -> read each line -> List<POJO>
Pros: простой для понимания
Cons: Последовательный процесс , не воспользовавшись несколькими ядрами в системе
Альтернатива 2
- Open File (синхронно), чтение N
линии (N
настраивается), проходит по разным акторам обрабатывать
/LogLineProcessActor 1
FileActor -> LogLineProcessRouter (with 10 Actors) -- LogLineProcessActor 2
\ LogLineProcessActor 10
Доводы Некоторых распараллеливания, используя разные актеров для обработки части линий. Актеры будут использовать доступные ядра в системе
Против Still Серийных, потому что чтение файла последовательного способом
Вопросы
(как, может быть?) - это любой из вышеперечисленного выбора хороший выбор?
- Есть ли лучшие альтернативы?
Просьба представить ценные мысли здесь
Большое спасибо
Я думаю, что [ParallelStreams] (https://docs.oracle.com/javase/tutorial/collections/streams/parallelism.html) может быть подходящим для вашей проблемы. – Turing85
Или даже https://storm.apache.org/, если вы постоянно получаете новые файлы и хотите действительно надежный конвейер. – Dathan
Это решение должно быть установлено на клиентских машинах, поэтому я не уверен, что «Storm» выполним. – daydreamer