Storie dalla Sala Macchine |
Home Page | Commenti | Articoli | Faq | Documenti | Ricerca | Archivio | Storie dalla Sala Macchine | Contribuire | Imposta lingua:en it | Login/Register
Per prima cosa mi faccio spiegare da Wendy come dovrebbero saltare fuori sti dati, quindi vado a guardare le informazioni che abbiamo nei log e scrivo un programmello che riempie una tabellina ad uopo per rigenerare tali informazioni.
Sembra fare quello che vogliamo, anche se, con un file di log per 1 giorno di un centinaio di giga ci vuole una giornata intera ad elaborarlo. Io schedulo per elaborare sul giorno precedente (log non-attivo) e risolvo brillantemente (penso io).
Fast-forward al giorno dopo quando K mi compare accanto.
K - Allora, stavo vedendo la funzione di fatturazione.
IO - Ma non hai solo 6 giorni da fare? Ti metti a fare la fatturazione adesso?
K - Eh, DB ha madonnato...
IO - Comunque, io ho creato una nuova tabella che dovrebbe contenere tutti
i dati di cui abbiamo bisogno e ci sono gia' dei dati reali dentro.
K - Ah, ma io pensavo invece di modificare le tabelle X, Y e Z per aggiungere
le informazioni che vogliamo e...
IO - Bello, ma dato che le informazioni sono gia' nella mia tabella,
perche' non te la usi e risolvi cosi'?
K - No ma perche' il codice sarebbe gia' scritto...
IO - Hummm... ieri mi dici che quella parte e' stata eliminata dal sistema ed
oggi mi dici che il codice e' gia' scritto?
K - In effetti il codice lo avevamo gia' scritto quando abbiamo deciso di
rimuovere la funzione cosi'...
IO - E questo successe quante versioni del database fa'?
Perche' data la tendenza di questa gente ad alterare la struttura dati ogni due per tre non e' che mi fidi molto del suo codice.
In ogni caso mi metto a guardare le tabelle X, Y e Z che questo rintronato vuole modificare. Allora, la mia tabella e' cosi' composta:
indirizzo char(255)
spam int(11)
virus int(11)
clean int(11)
data data
direzione char(1)
Dove 'direzione' puo' essere "o" per Output e "i" per Input. Semplice no? La
chiave primaria e' ovviamente indirizzo+data+direzione, perche' un singolo
indirizzo puo' esserci solo una volta per data/direzione (i dati sono
storicizzati). Mentre le tabelle che lui vuole usare sono cosi' fatte:
indirizzo char(60)
dominio char(60)
totale int(11)
data data
ora int(11)
id_cliente int(11)
Dove le informazioni sono per ora (non per giorno), l'indirizzo e' separato in
"indirizzo" e "dominio", invece dei 3 valori spezzati c'e' un solo valore
totale ed in piu' compare l'id del cliente (che e' collegato al dominio
tra l'altro).
IO - Hummm... ma noi abbiamo bisogno sia delle mail uscenti che di quelle
entranti, qui hai solo le uscenti.
K - Si infatti io volevo aggiungere due campi alla tabella: incoming e
outgoing ed avere la divisione tra le due.
IO - ...ed il vantaggio tra il modificare questa, modificare la
procedura che la crea e la mantiene e modificare le funzioni che la
visualizzano (perche' io sono sicuro che ci sono) ed aggiungere una funzione
per usare la mia tabella che gia' c'e' ed e' generata sarebbe?
K - Ma perche' la tua tabella ha i dati su diversi record, c'e' un record 'in'
ed un record 'out', quindi devo fare due ricerche per avere tutti i dati e
questo va a scapito delle prestazioni.
Ora, se state pensando "ma perche' non fa una semplice JOIN", e' perche' non conoscete K. Lui ovviamente non si sporca le mani con qualche cosa di vecchio ed antiquato come SQL. Lui ha questa bellissima libreria Object-Oriented che mette insieme i pezzi e costruisce le "dataview" senza che lui manco veda come e' fatto il database sotto. In effetti ho madonnato parecchio quando cercavo di fargli vedere la struttura dati come e' e non come gliela presenta la sua merda di libreria. Quindi la semplice idea di una "join" e' completamente aliena per lui.
Mi trattengo dall'ammaccarlo e gli dico che guardero' come fare. Mi metto a guardare la procedura che genera la foxxuta tabella che io dovrei modificare. Quella procedura e' chiamata in pipe con il sistema di logging, quindi riceve una linea alla volta, scarta tutto meno la linea con l'indirizzo di posta e memorizza i valori in memoria, al cambio d'ora i dati storicizzati sono scaricati sulla tabella. Ok, non dovrebbe essere troppo complicato modificarla in modo da prendere anche i dati relativi alle mail ENTRANTI oltre che uscenti.
Dopo un paio d'ore ho uno script di test, gli do in pasto uno dei file di log di un paio di giorni fa ed aspetto. Alle 6 di sera decido che me ne vado a casa e domani si vedra'. Il mattino dopo arrivo e scopro che lo script sta ancora lavorando. Ok, fankulo alle prestazioni del sistema.
Mentre sto discutendo la faccenda con K ("discutere" = "spiegare che il tuo sistema non funziona ed usiamo il mio che e' meglio"), arriva DaBoss. Gli spiego il problema.
IO - ...quindi per riempire i dati nella tabella come vuole lui ci si mette una
vita, mentre estrarli dalla tabella che dico io e' gia fatto.
DB - Come mai ci mette tanto?
IO - Perche' la procedura che effettua gli inserimenti in quella tabella non e'
stata pensata per fare quello e deve fare i salti mortali per trovare i dati
giusti. E perche' sono 200 milioni di linee da analizzare al giorno.
DB - (rivolto a K) E perche' non usi la sua di tabella se ha gia' tutti
i dati?
K - Perche' nella sua i dati sono su due linee diverse, quindi diventa piu'
lento a dare le risposte.
DB - Piu' lento quanto?
K - Hemmm... qualche minuto...
DB - La fatturazione la facciamo una volta al mese, Wendy puo' anche aspettare
qualche minuto per avere i dati.
K - Ma la responsivita' del sistema...
DB - (rivolto a K) Fila a modificare il codice!
Ecco a volte amo quest'uomo...
DB - (rivolto a me) A proposito, ho ricevuto l'ennesimo bug-fix da parte dei produttori del CRM e ci sarebbe da provarlo...
Ed altre volte invece...
Davide
27/07/2009 08:00
I commenti sono aggiunti quando e soprattutto se ho il tempo di guardarli e dopo aver eliminato le cagate, spam, tentativi di phishing et similia. Quindi non trattenete il respiro.
SQL questo sconosciuto Di Gama postato il 27/07/2009 08:25
Com'è che era? Di Anonymous coward postato il 27/07/2009 09:16
@ Anonymous coward Di Davide Inglima postato il 27/07/2009 12:54
Bellissima libreria Object-Oriented Di Davide Inglima postato il 27/07/2009 09:30
Come iniziare bene la settimana.... Di Lex79_VE postato il 27/07/2009 10:14
pallini... Di Nik postato il 27/07/2009 10:26
CVD Di Anonymous coward postato il 27/07/2009 10:39
Ma che droga assumono? Di Kurgan postato il 27/07/2009 16:11
libreria? Di Riccardo Cagnasso postato il 27/07/2009 16:16
@ Riccardo Cagnasso Di Davide Bianchi postato il 27/07/2009 16:24
@ Riccardo Cagnasso Di Kent Morwath postato il 27/07/2009 17:13
@ Kent Morwath Di Davide Bianchi postato il 27/07/2009 18:26
@ Davide Bianchi Di Kent Morwath postato il 27/07/2009 20:26
@ Kent Morwath Di Anonymous coward postato il 28/07/2009 02:24
@ Anonymous coward Di Davide Bianchi postato il 28/07/2009 07:33
data warehouse Di Anonymous coward postato il 28/07/2009 14:32
@ Anonymous coward Di Riccardo Cagnasso postato il 28/07/2009 22:41
@ Riccardo Cagnasso Di Anonymous coward postato il 29/07/2009 10:41
@ Anonymous coward Di Riccardo Cagnasso postato il 29/07/2009 15:36
@ Riccardo Cagnasso Di Anonymous coward postato il 29/07/2009 19:22
@ Anonymous coward Di Riccardo Cagnasso postato il 30/07/2009 02:21
@ Riccardo Cagnasso Di Anonymous coward postato il 31/07/2009 14:35
@ Anonymous coward Di Lo Zeno postato il 29/07/2009 16:00
@ Lo Zeno Di Davide Bianchi postato il 29/07/2009 16:14
Il presente sito e' frutto del sudore della mia fronte (e delle mie dita), se siete interessati a ripubblicare uno degli articoli, documenti o qualunque altra cosa presente in questo sito per cortesia datemene comunicazione (o all'autore dell'articolo se non sono io), cosi' il giorno che faccio delle aggiunte potro' avvisarvi e magari mandarvi il testo aggiornato.
Questo sito era composto con VIM, ora e' composto con VIM ed il famosissimo CMS FdT.
Questo sito non e' ottimizzato per la visione con nessun browser particolare, ne' richiede l'uso di font particolari o risoluzioni speciali. Siete liberi di vederlo come vi pare e piace, o come disse qualcuno: "Finalmente uno dei POCHI siti che ancora funzionano con IE5 dentro Windows 3.1".