Ottimizza la lettura di più file

2

Ho un problema unico che spero che qualcuno possa aiutare.

Ho un unico file di testo, il nostro file Produzione . I dati nel file sono delimitati nel seguente formato

Reference|Cost Centre|Analytics Base Value|.... 
UMBY_2288|023437|2883484|... 
NOT_REAL|1343534|283434|...

La dimensione media di questo file è di circa 30 MB. con circa 120000 righe.

e quindi ho circa 20 file regionali . questi file sono simili al grande file attuale nella struttura. tranne che sono più piccoli. dimensione media di 50000 righe.

Ora devo scorrere ogni riga del file Prod grande. Per ogni codice Riferimento , devo cercare tra tutti i file "Regionali" per vedere quali contengono questo specifico codice di riferimento. e quindi copiare alcuni dati da quella linea in un report. Non c'è modo di predeterminare quali file esaminare. E ogni riferimento può trovarsi in più file Regionali .

Come puoi immaginare, il looping di ogni riga in ogni file, più volte è un processo che richiede molto tempo. A causa dei limiti di memoria, non riesco a caricare i file in memoria.

Qualcuno ha qualche idea intelligente su come posso farlo? Non ho bisogno di campioni di codice. solo indicazioni su come risolvere questo problema.

Sto sviluppando lo strumento in C #.

    
posta greenkode 09.07.2013 - 12:18
fonte

2 risposte

4

La soluzione è leggere ogni file una volta, memorizzando la data in memoria. Mantieni un array associativo o una struttura di dati simile in cui la chiave è il numero di riferimento. Quindi, mentre elabori il file principale, la ricerca di ciascun riferimento dovrebbe richiedere solo microsecondi.

Se i dati sono troppo grandi per adattarsi alla memoria, è possibile creare un database SQLite temporaneo.

    
risposta data 09.07.2013 - 12:56
fonte
3

Questi carichi sembrano abbastanza piccoli per la memoria, quindi potrebbe esserci un bug nella tua applicazione. Non sembra che tu stia usando molto su quello che probabilmente è un sistema multi-gigabyte.

Ma ... c'è una soluzione al tuo problema, si chiama "database relazionale" e questo tipo di carico è molto piccolo per molti di loro. Per il tipo di carico che stai osservando, sembra SQL Express è probabilmente quello che vuoi.

Puoi caricare tutti i tuoi file regionali in tabelle e creare indici per gestire i riferimenti in modo molto più efficiente rispetto a quanto fai attualmente.

    
risposta data 09.07.2013 - 12:38
fonte

Leggi altre domande sui tag