Devo sempre memorizzare i dati analizzati nel database prima di manipolarli?

6

Sto per iniziare un nuovo progetto che comporta l'acquisizione di un file excel, l'analisi dei dati (php-excel-reader) e l'utilizzo dei valori analizzati in un messaggio HTML.

La mia domanda è piuttosto semplice. È preferibile archiviare prima i dati analizzati in un database e poi utilizzare i dati come preferisco?

Per me ha più senso, perché non ho bisogno di ri-analizzare se si verificano errori quando si invia l'e-mail, per esempio.

    
posta Robert 14.01.2016 - 04:08
fonte

6 risposte

2

Penso che analizzare il file e archiviare i dati in un database sarebbe una buona idea.

Fornisce una cronologia transazionale in modo che tu possa riprovare i messaggi non riusciti, controllare i record inviati e fornire rapporti.

Detto questo, se non hai i requisiti per supportare nessuna di queste funzioni e nessuna possibilità di averle in futuro, scrivere in un database sarebbe solo inutile.

    
risposta data 14.01.2016 - 04:29
fonte
5

For me it makes more sense as then I don't need to re-parse if errors occur when sending the email for example.

In tal caso, i criteri decisionali principali sono la semplicità e le prestazioni (che dipendono non solo dal processo che stai implementando, ma anche dal modo in cui lo fai).

Ad esempio, quando il tempo di esecuzione per ri-analizzare il file di input è trascurabile e hai bisogno nuovamente dei dati completi del foglio excel in caso di un errore di invio di email, sarà probabilmente più semplice e veloce ripetere l'excel file di nuovo e non prendere l'onere di archiviare i dati in un database prima e recuperarlo di nuovo quando l'e-mail deve essere nuovamente inviato. La ripetizione degli stessi dati due volte non è "cattiva" solo perché accade due volte, purché fornisca in modo affidabile lo stesso output dallo stesso input e fintanto che l'analisi non comporti un processo di trasformazione complesso e molto lento.

Se l'analisi stessa può mostrare errori che devono essere corretti prima (forse il foglio di calcolo non ha la struttura prevista?), o se c'è un passaggio di pulizia, la situazione inizia a cambiare. Quindi è necessario un archivio dati intermedio aggiuntivo per i dati puliti comunque. Questo potrebbe essere un nuovo file Excel, ovviamente, e potrebbe essere ancora la soluzione più semplice. Ma se è necessario integrare ulteriori dati da altre fonti di dati, se è necessario applicare qualche tipo di vincoli relazionali sui dati, una sorta di database leggero potrebbe essere una soluzione che serve meglio.

Tuttavia, supponiamo che dovrai generare 1000 email da un file Excel, ognuna basata su una parte diversa dei dati nel file. Ora nel processo di invio della posta, 5 delle e-mail tornano e è necessario recuperare i dati esattamente per quei 5 ricevitori per preparare un nuovo invio. Per un tale caso è molto probabile che utilizzando il database per ri-interrogare esattamente i dati necessari solo per quelle 5 persone, è possibile rendere il processo più semplice e veloce. E se hai bisogno di memorizzare metadati aggiuntivi come il numero di tentativi di invio per ciascun ricevitore, un database ti offre un posto dove puoi introdurre tabelle o colonne aggiuntive per questi metadati.

Quindi la risposta è dipende . Un database introduce un sovraccarico aggiuntivo, ma offre anche vantaggi, questo è un compromesso. E se al momento non conoscete abbastanza bene i prossimi requisiti, inizia prima con l'approccio più semplice (che probabilmente non usa inizialmente un database), ma assicurati che la tua generazione di HTML utilizzi alcune strutture di dati intermedi. Ciò ti dà la possibilità di passare a un database in un secondo momento, quando ottieni requisiti che lo richiedono.

    
risposta data 14.01.2016 - 07:21
fonte
1

(dal momento che esegui il codice in PHP, suppongo che il file Excel venga caricato in alcuni browser, quindi viene da Internet; se non è così, ignora la mia risposta)

Is it better practice to store the parsed data in a database first and then use the data however I wish?

Credo che sì. I dati provengono da una fonte non attendibile, la "cattiva Internet", quindi analizzarla attentamente è convalidare i dati.

(un hacker malintenzionato potrebbe "falsificare" alcune richieste HTTP e costruire quelle cattive)

Nel tuo database, vuoi memorizzare in qualche modo i dati fidati (non dannosi).

Le cose potrebbero essere diverse in un'applicazione web intranet (interna a una società): quindi potresti fidarti in qualche modo dei tuoi utenti, e la convalida dei dati potrebbe essere leggermente meno importante.

Fai sempre attenzione all'iniezione di codice.

    
risposta data 14.01.2016 - 09:21
fonte
0

Dipende dal modello di business. Diciamolo così.

Se il file excel elaborato dovesse generare un risultato diverso da quello precedente, direi store e, in base alla richiesta, il modello elaborerà l'output in modo diverso precedente secondo l'uri.

Ma se i dati sono in esecuzione sugli stessi dati con la stessa routine (richiesta), con il set di risultati del servizio, elaborarli e quindi memorizzarli nel DB.

    
risposta data 14.01.2016 - 04:13
fonte
0

C'è una battuta molto antica intorno al 1916. Un tenente giovane molestato ha inviato il messaggio "Invia rinforzi che avremo intenzione di avanzare" tramite un corridore che ha trasmesso il messaggio per telefono e alla fine è stato ricevuto un telegramma al quartier generale. Un generale confuso ha ricevuto il messaggio "Invia tre e quattro pence andiamo a un ballo" e ha debitamente inviato il cambiamento corretto.

EXCEL è un archivio di dati abbastanza decente (con un'API c *** p) analizzalo solo quando è necessario. L'utilizzo di un archivio dati intermedio introdurrà solo bug e dubito che l'I / O aggiuntivo coinvolto nella scrittura in un database possa portare a un miglioramento delle prestazioni.

    
risposta data 14.01.2016 - 09:42
fonte
0

Se la tua idea è che memorizzando i dati in un database nel caso si verifichi un errore non è necessario analizzarlo di nuovo: gli errori dovrebbero essere rari, sono comunque un grande successo, quindi un po 'di tempo per l'analisi non sarebbe non importa. D'altra parte, ora devi assicurarti che il file di database sia ancora lì, che non sia stato modificato o sovrascritto, devi cancellarlo quando non è più necessario, ..., aggiungi tutti i tipi di lavoro inutile che devi codice, che devi testare, che devi andare bene. Soprattutto perché tutto questo deve funzionare correttamente se si verifica un errore, che è difficile da testare e difficile - perché c'è stato appena un errore.

Si aggiunge un'enorme quantità di lavoro aggiuntivo per un caso raro, in cui a nessuno importa delle prestazioni e non è quello probabile che si ottenga effettivamente alcuna prestazione, perché l'analisi dei file di Excel non è Questo è lento e i database non sono così veloci.

C'era un articolo sui mali di "ottimizzazione prematura"; quell'intero articolo presupponeva che ci fosse in realtà un'ottimizzazione, che in qualche modo dubito. Qualcuno si è davvero lamentato del fatto che rieseguire l'analisi del file Excel in caso di errore è troppo lento?

    
risposta data 14.01.2016 - 10:22
fonte

Leggi altre domande sui tag