Meglio filtrare un flusso di dati all'inizio o alla fine?
-
06-07-2019 - |
Domanda
Sto lavorando a un progetto in cui devo elaborare una grande quantità (più gigabyte) di file con valori separati da virgola (CSV).
Quello che faccio sostanzialmente è il seguente:
- Crea un oggetto che sa come farlo leggi tutti i file correlati
- Registra con questo oggetto una serie di ascoltatori che sono interessati ai dati
- Leggi ogni riga di ogni file, inviando un oggetto creato dalla riga di dati a ciascuno degli ascoltatori
- Ogni Listener decide se questo dato è utile / rilevante
Mi chiedo se sarebbe meglio filtrare invece sul lato sorgente, ad es. a ciascun ascoltatore è associato un oggetto Predicato che determina se un determinato dato deve essere inviato all'ascoltatore, nel qual caso il processo sembrerebbe più simile a
- Crea un oggetto che sa come farlo leggi tutti i file correlati
- Registra con questo oggetto un insieme di coppie
- Leggi ogni riga di ogni file, inviando un oggetto creato dalla riga di dati a ciascuno degli ascoltatori se il Predicato associato restituisce true per i dati
L'effetto netto è lo stesso, dipende solo da dove ha luogo il filtro.
(Ancora una volta, l'unica ragione per cui ho questo "flusso" di dati che elaboro una voce alla volta è perché ho a che fare con gigabyte di file CSV e non riesco a creare una raccolta, filtrarla e quindi affrontalo - devo filtrare mentre vado)
Soluzione
A meno che il costo della chiamata all'ascoltatore non sia enorme (Remoting, WCF, ...) rimarrei con un'interfaccia davvero semplice e lascerei che l'ascoltatore decida cosa fare della riga.