Massimizzare la velocità di elaborazione dei dati: in memoria o scrivere in db prima?

2

Attualmente stiamo lavorando su un sistema che consente agli utenti di caricare file di dati, che poi "puliamo" (cioè processo in vari modi). La velocità di elaborazione e di ritorno all'utente è una considerazione importante, quindi vogliamo farlo il più velocemente possibile.

Il piano originale era che una volta che l'utente aveva caricato il file, lo leggevamo in memoria ed eseguivano tutta l'elaborazione lì, prima di scrivere i dati su un nuovo file che l'utente può scaricare. Ritenevamo che ciò sarebbe stato più rapido rispetto all'I / O del disco richiesto per scrivere i dati in una tabella di dati.

Per complicare ulteriormente i problemi, stiamo usando MySQL per questo, che non abbiamo mai usato prima. Inoltre, non possiamo essere certi del formato dei dati che otterremo: sarà un file delimitato, ma potrebbe essere una varietà di formati (ad es. Delimitatori diversi, possibili encapuslation ecc.). Abbiamo sviluppato una serie di test per elaborare queste variabili prima dell'elaborazione.

Ad ogni modo, uno dei passaggi di pulizia è rimuovere le oscenità dai dati. Per fare questo, dobbiamo confrontare ciascuna riga di dati più combinazioni ovvie come nome e cognome, contro un elenco di ~ 700 oscenità possibili. Ho scritto alcune schede C # per farlo in memoria, e con mia sorpresa ci sono voluti 48 secondi per scorrere un file di registrazione di 30.000.

Quindi ho importato i dati in MySql e ho eseguito una query. La query stessa ha richiesto circa un secondo, ma il caricamento dei dati tramite l'importazione guidata dei dati di tabella di MySql ha richiesto circa dieci minuti, il che sembra assurdamente lungo. Lo stesso processo nel server SQL ha richiesto 30 secondi.

Volendo eseguire un test end-to-end più equo, ho iniziato a studiare come importare il file in MySql tramite C #. Sembra che ci siano molte opzioni, dal tentare un inserto di massa, all'iterazione e all'esecuzione linea per linea - troppe per testarle realisticamente tutte.

C'è un altro modo in cui posso affrontare questo? In termini di velocità, è generalmente un'idea migliore attaccare alla memoria o prendere il colpo di scrittura del disco?

    
posta Matt Thrower 19.04.2016 - 12:03
fonte

0 risposte

Leggi altre domande sui tag