Pergunta

Eu estou trabalhando em um projeto em que eu preciso para processar uma quantidade enorme (vários gigabytes) de vírgula valor arquivos (CSV) separados.

O que eu basicamente fazer é a seguinte:

  1. Criar um objeto que sabe como ler todos os arquivos relacionados
  2. Register com esse objeto um conjunto de ouvintes que estão interessados ??nos dados
  3. Leia cada linha de cada arquivo, despachando um objeto criado a partir da linha de dados a cada um dos ouvintes
  4. Cada ouvinte decide se este pedaço de dados são úteis / relevantes

Eu estou querendo saber se seria melhor para filtrar vez ao lado da fonte, por exemplo, cada ouvinte tem um objeto predicado associado que determina se uma determinada peça de dados devem ser enviados para o ouvinte, caso em que o processo seria mais parecido com

  1. Criar um objeto que sabe como ler todos os arquivos relacionados
  2. Register com esse objeto um conjunto de pares
  3. Leia cada linha de cada arquivo, despachando um objeto criado a partir da linha de dados a cada um dos ouvintes se o seu predicado associado retorna verdadeiro para os dados

O efeito líquido é o mesmo, é apenas uma questão de onde a filtragem ocorre.

(Mais uma vez, a única razão pela qual eu tenho essa 'stream' de dados que eu processar uma entrada de cada vez é porque eu estou lidando com gigabytes de arquivos CSV, e eu não posso criar uma coleção, filtrá-la e, depois lidar com isso - eu preciso para filtrar como eu ir)

Foi útil?

Solução

A menos que o custo da chamada para o ouvinte é enorme (Remoting, WCF, ...) eu ficaria com uma interface muito simples e deixar o ouvinte decidir o que fazer com a linha.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top