martedì 5 luglio 2011

I tempi della migrazione

Sono alcuni giorni che sto lavorando alle elaborazioni per la migrazione dati che dovremo fare per un cliente al lavoro.

Scrivere procedure che manipolano centinaia di migliaia di record è una cosa che mi da soddisfazione: produrre codice che poi, alla pressione di un solo tasto, prende e comincia a spostare da un lato all'altro degli archivi quantità più che industriali di dati combinandoli, riorganizzandoli, riclassificandoli, è in certo qualo modo esaltante; mi da il senso di saper fare qualcosa e saperla fare bene, anche perchè pure quando quelle procedure contengono degli errori, sono in grado - dopo un indispensabile giro di test - di locallizzarli e rimuoverli.
Però c'è una cosa che non mi riesce di fare al meglio... una cosa che mi innervosisce e mi sconforta e che temo sia collegata ad un difetto che ho sempre avuto: le mie procedure non sempre sono ottimizzate in termini di performance. Una procedura che manipola mezzo milione di record, con il sistema che usiamo, se è nelle condizioni ottimali può cavarsela anche con pochi secondi, ma se le condizioni non ti aiutano possono volerci ore. E' sempre possibile ottimizzare le cose, ridurre i tempi, mettersi in condizioni tali per cui il risultato sia accessibile in pochi minuti, ma per fare questo i minuti che servono sono parecchi di più, se la cosa non è già nata con un occhio all'orologio e con in mente un quadro semplice di passaggi, ed io, che in questo progetto ci sono entrato in corsa, non ho il quadro generale... me lo sono ricostruito, sia chiaro, ma questa cosa non è il massimo: io già di mio ho l'incredibile capacità di trovare sempre la via più complicata per fare una cosa (che spesso è anche estremamente generica e flessibile, per carità, ma meno una cosa è specializzata e meno sarà ottimizzata, di solito), figuriamoci se le mie sono le ennesime mani a tocchicciare un progetto, nato in un modo, ripensato in un secondo momento a seguito di notizie venute fuori solo a cose fatte, ecc, ecc...

Oggi sto tirando accidenti su una procedura che mi fa impazzire: è una migrazione dati che, lanciata sull'ambiente di produzione ieri, se l'è cavata con due ore di elaborazione (per un totale di record toccati superiore al milione), ma, assurdamente, lanciata sull'ambiente di test (che è la replica di quello di produzione) stamattina ha già raggiunto e superato le tre ore di elaborazione.
So già che mi aspettano ore a spaccarmi la testa per far scendere quei tempi di almeno un ordine di grandezza, magari di notte e portandomi a far diventare il problema molto più che non una semplice questione pratica, ma resta che una domanda fluttua sulla mia testa: semplicemente perchè tanta differenza? La risposta la intuisco (questioni di cache) ed una parte di me vorrebbe approfondirla, ma un'altra parte vorrebbe semplicemente risolvere il problema, portando i tempi della migrazione ad essere tanto ridotti da rendere ininfluenti questi aspetti tecnici.
Non so se ci riuscirò, ma un obiettivo bisogna pur averlo...

Resta che un angoletto sarcastico del mio cervello genera una domanda: vale la pena di perdere tanto tempo per ridurre il tempo che impieghi per una cosa?