Я работаю над проектом, в котором мне нужно обработать огромное количество файлов (CSV) (несколько гигабайт).
Что я в основном делаю, так это:
- Создать объект, который умеет
читать все связанные файлы
- Зарегистрируйте с этим объектом набор Слушателей, которые заинтересованы в данных
- Чтение каждой строки каждого файла, диспетчеризация объекта, созданного из строки данных
каждому из слушателей
- Каждый слушатель решает, является ли этот фрагмент данных полезным / релевантным
Мне интересно, лучше ли фильтровать вместо этого на стороне источника, например У каждого слушателя есть связанный объект Predicate, который определяет, должен ли данный фрагмент данных быть отправлен слушателю, и в этом случае процесс будет больше похож на
- Создать объект, который умеет
читать все связанные файлы
- Зарегистрировать с этим объектом набор пар
- Читайте каждую строку каждого файла, отправляя объект, созданный из строки данных
каждому из слушателей, если связанный с ним предикат возвращает true для данных
Чистый эффект тот же, вопрос только в том, где происходит фильтрация.
(Опять же, единственная причина, по которой у меня есть этот «поток» данных, который я обрабатываю по одной записи за раз, заключается в том, что я имею дело с гигабайтами файлов CSV, и я не могу создать коллекцию, отфильтровать ее и тогда разберитесь с этим - мне нужно фильтровать, как я иду)