Лучше фильтровать поток данных в начале или конце?

StackOverflow https://stackoverflow.com/questions/1625401

  •  06-07-2019
  •  | 
  •  

Вопрос

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

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

<Ол>
  • Создать объект, который знает, как читать все связанные файлы
  • Зарегистрируйте с помощью этого объекта набор прослушивателей, которые заинтересованы в данных
  • Читайте каждую строку каждого файла, отправляя объект, созданный из строки данных каждому из слушателей
  • Каждый слушатель решает, является ли этот фрагмент данных полезным / релевантным
  • Мне интересно, будет ли лучше фильтровать на стороне источника, например У каждого слушателя есть связанный объект Predicate, который определяет, должен ли данный фрагмент данных быть отправлен слушателю, и в этом случае процесс будет больше похож на

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

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

    Это было полезно?

    Решение

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

    Лицензировано под: CC-BY-SA с атрибуция
    Не связан с StackOverflow
    scroll top