Grande rapporto csv in html

0

Sto lavorando su un front end web + servizi front-end.

Ricevo file csv di buone dimensioni (linee 10k). Il mio servizio li elabora e li condensa in un unico file csv (fino a 300k linee).

Questo file più grande sarà trasformato in un rapporto html / pdf dopo qualche estrapolazione.

Le mie domande sono:

  1. Prendendo 17.000 file e trasformandoli in 1 prende FOREVER (18 ore l'ultima volta che l'ho provato). Il processo corrente consiste nel prendere una riga di csv, analizzarla per vedere se esiste nel mio array master e creare una nuova voce o aggiungere i dati a una voce esistente nell'array. C'è un modo migliore per farlo? Sembra che l'ultimo elemento richiederebbe esponenzialmente più lungo del primo.

  2. Una volta creato questo file di grandi dimensioni, l'analisi sembra richiedere un po 'di tempo. Dovrei passare dalla scrittura a un output csv e andare con JSON per velocizzare il massaggio dei dati? o anche un leggero db?

posta Jeff 04.07.2014 - 01:53
fonte

2 risposte

1

Credo che tu stia cercando di ricreare il concetto di un sistema di gestione dei database nel modo più difficile. File I / O combinato con l'analisi e la ri-analisi dei dati è ciò che uccide le tue prestazioni.

Opzione 1: gestisci la fusione da solo

a) Metti il tuo "array" principale in un database come un insieme di righe in (uno o più) tavoli.

b) Leggi i tuoi file e unisci i risultati alle tabelle.

Opzione 2: lascia che il database gestisca l'unione

a) Metti il tuo "array" principale in una o più tabelle in un database (tabella A). Costruisci i tuoi indici.

b) Importa un file nel tuo database in tabelle simili nella forma alle tabelle principali, ma separate e temporanee (tabella B).

c) Unisci il master e i dati importati usando LEFT JOIN per produrre una tabella di aggiornamento temporanea C. (INNER JOIN)

d) Antimerge il master e importa i dati trovando tutti i record che non sono nella tabella principale e inserendoli in una tabella temporanea D. (RIGHT EXCLUDING JOIN)

e) Eseguire un aggiornamento dalla tabella C nella tabella A. Quindi, aggiungere tutti i record dalla tabella D alla tabella A.

(Per un'eccellente visione della terminologia JOIN, utilizzo questo insieme di diagrammi e codice: Rappresentazione visiva )

    
risposta data 04.07.2014 - 23:53
fonte
0

L'uso di JSON invece non è ovvio, il formato ha una complessità maggiore di CSV ed è il modo migliore per scambiare strutture di dati meschine, preferibilmente contenenti informazioni tecniche. Per accelerare le cose, assicurarsi che la raccolta principale abbia una capacità iniziale realistica per contenere tante righe, poiché il ridimensionamento di raccolte di grandi dimensioni è molto costoso. In secondo luogo, ordina la raccolta in modo che se la riga candidata è maggiore dell'ultimo elemento, non è richiesta un'ulteriore iterazione. Questo non funzionerà con Guid.

    
risposta data 04.07.2014 - 17:14
fonte

Leggi altre domande sui tag