Scrap di dati: un'applicazione o più?

2

Ho 30+ fonti di dati che scrivo quotidianamente in vari formati (xml, html, csv). Negli ultimi tre anni ho creato circa 20 applicazioni console in uscita, scaricato i dati e riformattato in un database. Ma sono curioso di sapere cosa fanno gli altri per questo tipo di attività. Le persone costruiscono uno strumento che ha molte variabili e input o sono persone che progettano più di 20 programmi per analizzare e analizzare questi dati. Tutto è hard-coded in ogni console e viene eseguito tramite Task Manager di Windows.

Aggiunti un paio di pensieri / dettagli aggiuntivi:

  • Delle 30 fonti, tutte hanno proprietà uniche, tutte sono caricate in tabelle individuali MySQL e tutte hanno frequenze variabili. Ad esempio, una fonte di dati viene colpita una volta al minuto, un'altra su intervalli di 5 minuti. La maggioranza è una volta all'ora e una volta al giorno.

Al momento scarro i formati (xml, csv, html), li analizzo in un csv formattato e li metto in cartelle di staging. All'interno di quella cartella, eseguo un'applicazione che legge un file di configurazione specifico per la cartella. Quando un nuovo CSV viene aggiunto alla cartella, l'applicazione carica i dati nelle specifiche tabelle MySQL designate nel file di configurazione.

Mi chiedo se valga la pena ricostruire tutto questo in un programma più complesso che è più capace di aggiungere in modo dinamico contenuti + scarti e adeguamento alle modifiche del formato.

Alla ricerca di pensieri esterni.

    
posta JAS 05.11.2011 - 17:54
fonte

5 risposte

2

Ciò su cui stai lavorando è fondamentalmente ETL. Quindi ad un livello elevato hai bisogno di un componente di esportazione (ottieni materiale) un componente di trasformazione (mappa in formato noto) e un carico (prendi il formato noto e metti roba da qualche parte). Se ti senti a tuo agio con un RDBMS potresti usare qualcosa come i pacchetti SSIS di SQL Server. Quello che vorrei fare è creare un'applicazione host che gestisca aspetti comuni del processo generale (errori e elaborazione della pipeline). Quindi rendi le specifiche della E, T e L inseribili. Un modo semplice per ottenere questo sarebbe ospitare il runtime di PowerShell e creare ogni versione con oggetti di contesto comuni che gli script useranno per comunicare. Si ottiene un modello di pipe e filtro integrato per gli script e un'estensibilità facile e sicura. Questo design ha funzionato estremamente per il mio team con una situazione simile.

    
risposta data 05.11.2011 - 18:34
fonte
2

Resisti alla tentazione di riscrivere.

Tuttavia, per il nuovo codice, è possibile pianificare ciò che si è già verificato. Scrivi un meccanismo di recupero che puoi riutilizzare attraverso la configurazione. Scrivi un meccanismo di traduzione che puoi riutilizzare (magari in una libreria che puoi chiamare con un codice molto piccolo). Scrivi un meccanismo di salvataggio che può essere chiamato o configurato.

A questo punto, hai scritto # 21 (+). Ora, i seguenti possono essere gestiti con un minimo di codice e configurazione. Yay!

(Potresti implementarlo in un servizio che gestisce più conversioni, ma ne appesantisci i benefici rispetto alla possibilità di separare gli errori in un modulo dal resto.)

    
risposta data 05.11.2011 - 21:50
fonte
1

Dipende - se hai bisogno che gli scrapers si inseriscano in una singola applicazione / database e abbiano un formato dati uniforme, ha senso averli tutti in un unico programma (possibilmente ereditando da un raschiatore di base comune).

Se non lo sono e sono completamente indipendenti l'uno dall'altro, potrebbe anche tenerli separati, quindi i cambiamenti in uno non hanno alcun effetto su un altro.

Aggiorna, seguendo le modifiche alla domanda:

Non cambiare le cose solo per il gusto di cambiare. Hai qualcosa che funziona, non scherzare troppo.

Poiché le origini dati e i sink di dati sono tutti separati l'uno dall'altro, la combinazione di essi in un'unica applicazione creerà semplicemente un'applicazione molto complicata che sarà molto difficile da modificare quando necessario.

Poiché gli scraper sono separati, mantieni la separazione come ora.

    
risposta data 05.11.2011 - 18:25
fonte
1

Come ha detto sbrenton, questo è il massimo con ETL. Dovresti dare un'occhiata a Talend Open Studio. È specializzato nella gestione di flussi di dati come immagino che siano tuoi anche altri aspetti come la rimozione duplicata, la normalizzazione dei campi; decine / centinaia di trascina e rilascia i componenti ETL, puoi anche scrivere codice personalizzato in quanto Talend è anche un generatore di codice, sia Java che Perl sono opzioni. Puoi anche usare Talend per eseguire i comandi di sistema. Lo uso per il mio lavoro ETL, anche se non in produzione, in produzione useremo SSIS, principalmente a causa di molti altri prodotti Microsoft in casa.

Ecco un video informativo: link

    
risposta data 06.12.2011 - 15:27
fonte
0

Potresti voler utilizzare una buona libreria di pianificazione, come Quartz.NET .

In poche parole, ecco cosa puoi aspettarti:

  • I tuoi compiti sono rappresentati da classi e non processi
  • Puoi impostare e dimenticare le attività e ridimensionarle su più server
  • Hai un sistema pronto all'uso per occuparti effettivamente di ciò che è necessario eseguire quando, cosa è fallito e deve essere rieseguito, ecc. ecc.

Vedi anche: link

    
risposta data 05.11.2011 - 18:44
fonte

Leggi altre domande sui tag