Pregunta

Estoy trabajando en un proyecto en el que necesito procesar una gran cantidad (varios gigabytes) de archivos de valores separados por comas (CSV).

Lo que básicamente hago es lo siguiente:

  1. Crear un objeto que sepa cómo leer todos los archivos relacionados
  2. Registre con este objeto un conjunto de oyentes interesados ??en los datos
  3. Lea cada línea de cada archivo, despachando un objeto creado a partir de la línea de datos a cada uno de los oyentes
  4. Cada oyente decide si este dato es útil / relevante

Me pregunto si sería mejor filtrar en el lado de la fuente, p. cada escucha tiene un objeto Predicate asociado que determina si un dato dado debe enviarse al escucha, en cuyo caso el proceso se parecería más a

  1. Crear un objeto que sepa cómo leer todos los archivos relacionados
  2. Registre con este objeto un conjunto de pares
  3. Lea cada línea de cada archivo, despachando un objeto creado a partir de la línea de datos a cada uno de los oyentes si su predicado asociado devuelve verdadero para los datos

El efecto neto es el mismo, solo es cuestión de dónde tiene lugar el filtrado.

(Nuevamente, la única razón por la que tengo este 'flujo' de datos que proceso una entrada a la vez es porque estoy tratando con gigabytes de archivos CSV, y no puedo crear una colección, filtrarla y luego lidiar con eso: necesito filtrar sobre la marcha)

¿Fue útil?

Solución

A menos que el costo de la llamada al oyente sea enorme (Remoting, WCF, ...), me quedaría con una interfaz realmente simple y dejaría que el oyente decidiera qué hacer con la fila.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top