Ho pochi script caricati da cron abbastanza spesso. Al momento non memorizzo nessun registro, quindi se uno script non viene caricato, non lo saprò fino a quando non vedo i risultati - e anche quando noterò che i risultati non sono corretti, non posso fare nulla visto che non lo faccio so quale script ha fallito.Cosa c'è di più efficiente: la memorizzazione dei registri nel database o nei file sql?
Ho deciso di archiviare i registri, ma non sono ancora sicuro di come farlo. Quindi, la mia domanda è - che cosa è più efficiente - la memorizzazione dei registri nel database o nei file sql?
Posso creare la tabella 'logs' nel mio database mysql e memorizzare ciascun log in una riga separata, oppure posso semplicemente usare php's file_put_contents o fopen/fwrite per archiviare i log in file separati.
I miei script aggiungono approssimativamente 5 registri (in totale) al minuto mentre si lavora. Ho fatto alcuni test per determinare cosa è più veloce: fopen/fwrite o mysql's insert. Ho fatto un ciclo di istruzioni "insert" 3000 volte per creare 3000 righe e ho fatto un ciclo di fopen/fwrite 3000 volte per creare 3000 file con testo di esempio. Fwrite eseguito 4-5 volte più veloce dell'inserto di sql. Ho fatto un secondo ciclo - ho fatto un ciclo di istruzioni 'select' e l'ho assegnato a una stringa 3000 volte - ho anche aperto 3000 file usando 'fopen' e assegnato i risultati alla stringa. Il risultato è stato lo stesso: fopen/fwrite ha terminato l'operazione 4-5 volte più velocemente.
Quindi, per tutti i programmatori esperti, qual è la vostra esperienza con l'archiviazione dei registri? Qualche consiglio?
// 04.09.2011 EDIT - Grazie a tutti per le vostre risposte, hanno aiutato molto. Ogni post era prezioso, quindi era piuttosto difficile accettare solo una risposta ;-)
@the lentezza è nella testa della dichiarazione 'insert'. Se tu dovessi aggiungere i dati a un file CSV e leggere che nell'uso di 'load data infile', i 4-5 tempi si fonderebbero rapidamente in 2 volte, 1x per scrivere il file CSV, 1x per caricare i dati in infile. – Johan
@firian - Devi solo attivare lo script per inviare un'email (contiene i dettagli) quando c'è un problema – ajreal
Puoi usare un database di cache come redis o memcache e un processo per mantenere tutto questo in un mysql. Anche tu puoi usare MongoDB direttamente o usare redis bridge. Redis è veramente veloce, mongo è il più lento. MySQL è davvero molto lento xD. Anche tu puoi usare qualche servizio di log esterno come loggly.com – user1710825