[Python] python DB/TABLES ...
Daniele Varrazzo
piro a develer.com
Sab 11 Maggio 2013 17:12:35 CEST
On 2013-05-11 15:51, Remo The Last wrote:
> ...forse effettivamente c'è un pochino di nebbia nella mia logica e
> nel mio approccio.
>
> Per fare l'esempio:
> Lancio un traceroute e catturo gli indirizzi IP di ogni hop.
> L'indirizzo di ogni hop viene registrato in tabella in maniera
> successiva tipo hop1, hop2, hopn, ognuno con il proprio indirizzo IP.
> Di per sè il traceroute è dinamico con hop che cambiano anche in
> numero e dunque devo creare dei hopn+1, hopn+2... in più rispetto ad
> un traceroute precedente con numero inferiore di hop.
>
> Come mi muovo con i campi delle tabelle? Da dove inizio? Come creo un
> campo per ogni hop successivo ovvero hopn++? E ancora: gli hop
> devono
> essere indicizzati in ogni tabella per un approccio più facile.
>
> Cosa sbaglio o cosa non capisco?
che non vedi (ma è normale, bisogna farci l'occhio) che puoi
memorizzare ogni hop in un record diverso della stessa tabella. Puoi
avere 2 tabelle: in una (chiamiamo tr) hai un record per ogni richiesta
di traceroute (che può memorizzare es. ip di partenza, ip di arrivo,
timestamp della prima richiesta ecc. ed ha un id univoco) ed una
(chiamiamo tr_hop) che memorizza tutti gli hop, che contiene es. i campi
- tr_id (fkey all'id della richiesta)
- hop_n (numero dell'hop nella richiesta: 1, 2, 3 ecc.)
- ip_addr (indirizzo del nodo)
- timestamp (in cui il nodo è stato raggiunto)
- time (tempo per raggiungere il nodo dal precedente)
- ... altre informazioni che vuoi memorizzare per hop.
la coppia (tr_id, hop_n) è univoca e potrebbe essere una buona chiave
primaria in questo caso.
Con questa tabella puoi ricostruire un solo traceroute (select * from
tr_hop where tr_id = %s) oppure puoi sapere quanto è lento in media un
nodo (select avg(time) from tr_id where ip_addr = %s) e così via.
Impara a riconoscere questo "code smell": nei database esistono solo 3
numeri possibili: 0, 1 e "tanti". Se di una cosa ne hai "tanti" li devi
mettere come diversi record in una sola tabella. Se fai "tante tabelle"
oppure "tanti campi" stai sbagliando. Garantito al limone.
La tabella più cretina con cui abbia mai lavorato non ricordo cosa
conteneva, ma aveva un record per ogni anno e una colonna per ogni mese:
gennaio febbraio marzo aprile ...
2010 10 20 30 ...
2011 45 66 ...
2012 ...
...
buona fortuna a capire i pezzi venduti, o qualunque cosa fosse, da
luglio 2010 a marzo 2012...
--
Daniele Varrazzo - Develer S.r.l.
http://www.develer.com
Maggiori informazioni sulla lista
Python