2015-05-03 3 views
0

Это скорее проблема дизайна. Я не знаю, как добиться этого в AkkaОбработка файлов с помощью Akka?

История пользователя
- мне нужно разобрать большие файлы (> 10 миллионов строк), которые выглядят как

2013-05-09 11:09:01 Local4.Debug 172.2.10.111 %MMT-7-715036: Group = 199.19.248.164, IP = 199.19.248.164, Sending keep-alive of type DPD R-U-THERE (seq number 0x7db7a2f3) 
2013-05-09 11:09:01 Local4.Debug 172.2.10.111 %MMT-7-715046: Group = 199.19.248.164, IP = 199.19.248.164, constructing blank hash payload 
2013-05-09 11:09:01 Local4.Debug 172.2.10.111 %MMT-7-715046: Group = 199.19.248.164, IP = 199.19.248.164, constructing qm hash payload 
2013-05-09 11:09:01 Local4.Debug 172.2.10.111 %ASA-7-713236: IP = 199.19.248.164, IKE_DECODE SENDING Message (msgid=61216d3e) with payloads : HDR + HASH (8) + NOTIFY (11) + NONE (0) total length : 84 
2013-05-09 11:09:01 Local4.Debug 172.22.10.111 %MMT-7-713236: IP = 199.19.248.164, IKE_DECODE RECEIVED Message (msgid=867466fe) with payloads : HDR + HASH (8) + NOTIFY (11) + NONE (0) total length : 84 
  • Для каждой строки I необходимо сгенерировать Event, которые будут отправлены на сервер.

Вопрос
- Как я могу прочитать этот файл журнала эффективно в Akka модели? Я читал, что чтение файла синхронно лучше из-за меньшего движения магнитной ленты.
- В таком случае, может быть FileReaderActor на один файл, который будет читать каждую строку и отправить их на переработку позволяет говорить EventProcessorRouter и Router может иметь много актеров, работающих на line (из файла) и создание Event. Будет 1 Event за line
- Я также думал о отправке Event в пакетном режиме, чтобы избежать слишком большой передачи данных в сети. В таких случаях, где я буду продолжать накапливать эти Events? и как я узнаю, если я все Events генерируются из inputFile?

Благодаря

ответ

0

Я думаю, я знаю, что ваш запрошенных, ваши в основном говорят, что если вы читаете и proccess файл в mannor вы описываете вы рискуете имея огромное количество сообщений, если обрабатывающ занимает значительно больше времени, чем чтение. Кроме того, если вы отправляете сообщения по сети в идеале, вам нужно будет свести к минимуму количество отправляемых сообщений. Если ваши строки не занимают много времени, я не буду отправлять их для обработки по сети. Вы рассматривали использование фьючерсов вместо этого? Не знаю, если вы делаете так просто, как Parallel File Processing: What are recommended ways?, тогда вам следует использовать потоки. Но я думаю, что дело обстоит с актерами, хотя они хороши для дросселирования их главной цели - обернуть состояние, и у вас нет так много с обработкой файла. Возможно, вам будет лучше с фьючерсами, я приведу пример этого здесь Executing Dependent tasks in parallel in Java. Но вы можете использовать таких актеров, как вы говорите, и заставить обработчиков взаимодействовать с актером-читателем и говорить, чтобы он прекратил чтение, и позволяет говорить секунду, как только количество сообщений, ожидающих обработки, превышает 1000000 или сколько бы вы ни решили.

Смежные вопросы