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
_______________________________________________
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python

Rispondere a