Лучше фильтровать поток данных в начале или конце? - PullRequest
1 голос
/ 26 октября 2009

Я работаю над проектом, в котором мне нужно обработать огромное количество файлов (CSV) (несколько гигабайт).

Что я в основном делаю, так это:

  1. Создать объект, который умеет читать все связанные файлы
  2. Зарегистрируйте с этим объектом набор Слушателей, которые заинтересованы в данных
  3. Чтение каждой строки каждого файла, диспетчеризация объекта, созданного из строки данных каждому из слушателей
  4. Каждый слушатель решает, является ли этот фрагмент данных полезным / релевантным

Мне интересно, лучше ли фильтровать вместо этого на стороне источника, например У каждого слушателя есть связанный объект Predicate, который определяет, должен ли данный фрагмент данных быть отправлен слушателю, и в этом случае процесс будет больше похож на

  1. Создать объект, который умеет читать все связанные файлы
  2. Зарегистрировать с этим объектом набор пар
  3. Читайте каждую строку каждого файла, отправляя объект, созданный из строки данных каждому из слушателей, если связанный с ним предикат возвращает true для данных

Чистый эффект тот же, вопрос только в том, где происходит фильтрация.

(Опять же, единственная причина, по которой у меня есть этот «поток» данных, который я обрабатываю по одной записи за раз, заключается в том, что я имею дело с гигабайтами файлов CSV, и я не могу создать коллекцию, отфильтровать ее и тогда разберитесь с этим - мне нужно фильтровать, как я иду)

1 Ответ

2 голосов
/ 26 октября 2009

Если только стоимость звонка для слушателя невелика (Remoting, WCF, ...), я бы оставался с очень простым интерфейсом и позволял слушателю решать, что делать со строкой.

...