Ricerca in FOLBlog

[SdSM] La Tabella Del Discontento

 Scritto da alle 00:15 del 08/08/2009  Aggiungi commenti
Ago 082009
 
closeQuesto articolo è stato pubblicato 8 anni 3 mesi 13 giorni giorni fa quindi alcuni contenuti o informazioni presenti in esso potrebbero non essere più validi. Questo sito non è responsabile per eventuali errori causati da questo problema.


Siamo ancora qui’ che litighiamo con la foxxutissima applicazione, dopo la tragica scoperta che i dati necessari per la fatturazione sono spariti dal database ed apparentemente dall’applicazione, io sono stato nuovamente chiamato in causa per tamponare la falla intanto che K si inventa un qualche paperocchio per riottenerli.

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

legenda personaggi

Technorati Tags: Storie dalla Sala Macchine,humor

Articoli simili:

  • Facebook
  • Twitter
  • Delicious
  • StumbleUpon
  • Wikio
  • Reddit
  • Technorati
  • Segnalo
  • Live
  • Add to favorites
  • Email
  • RSS

 Lascia un commento

Puoi usare questi tag e attributi HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

(richiesto)

(richiesto)

Pinterest
EmailEmail
PrintPrint
%d blogger hanno fatto clic su Mi Piace per questo: