Connect.gt

Condividiamo idee e conoscenza dal 2003...
...dopo 17 anni una Nuova Storia è nata
Scopri di più

Tabelle

config

Elminata: i valori saranno hard coded come codice PHP dentro un file di configurazione creato dal programma stesso o in alternativa si può usare una cache.

counters

Conteggia il numero totale di visitatori. Scritta per ogni utente, e letta solo quando accediamo alle stats.

Molto probabilmente si può eliminare (si può sostituire con SELECT SUM(hits) FROM tabella), sicuramente va aggiornata saltuariamente


daily

data (date)

hits (int)

visits(int)


A mio avviso è già ottimizzata. Si potrebbe aggiornare tramite Cronjob (dalla cache o dai dettagli visitatori)


details

visitor_id ip host agent lang date referer currentPage reso colo titlePage
varchar(50) varchar(15) varchar(50) varchar(255) varchar(10) int(10) varchar(255) varchar(255) varchar(10) varchar(10) varchar(255)

E' un id casuale di questo tipo: 9noYQgY7Ji8UkV07Sijn7GWRtKvEZy sono 30 caratteri cioè più di 931.322.574.615.478.515.625.000.000.000.000.000.00 0.000.000.000.000 utenti monitorabili. Un po' troppi, no?

Questo campo è salvato come VARCHAR(50). Per un campo fisso a 30 caratteri sarebbe meglio un CHAR(30). Ancora meglio tuttavia è sostituire tale id con un intero. Basta un bigint.

In effetti, anche un errore su un milione sarebbe più che accettabile, usare un unsigned a 32 bit (2^32 = 4 miliardi) potrebbe andare più che bene, ma si deve tenere conto di un fattore statistico noto come paradosso del giorno del compleanno. Ovvero non interessa la probabilità che un utente coincida con l'altro, ma quella che un qualsiasi utente coincida con qualsiasi altro.


In effetti quasi tutto in PHPStats è salvato come varchar, mentre il suo uso dovrebbe essere ridotto al minimo. CHAR ad esempio è preferivile se la dimensione è fissa, ma valori come l'ip possono essere salvati come numeri.

Gli user agent sono standard vanno sostituiti con un intero hard coded, se la ricerca non lo trova scrive in un file hash(id) = "$useragent". Hash perchè così ogni sistema PHPStats userà gli stessi id per i nuovi useragent.

Risoluzione deve essere un int, la conversione deve essere fatta tramite array associativo hard coded.

Colori tyniint unsigned di 4 invece che varchar(10).

"http://www." sarà sostituito con un carattere singolo magari non url safe (che quindi non potrà mai comparire in un url) accorciando referer e current page.

Il dominio sarà salvato come int e sarà hard coded in un file scritto da PHP stesso.

Lang occupa poco, comunque si potrebbe metterlo sempre come int.

Utilizzare tutto hard coded serve a ridurre al minimo il numero di query al DB.

domains

hourly

ip

langs

pages

query

referer

systems

os bw reso colo hits visits mese
Sistema operativo Browser Risoluzione Colori mese e anno
varchar(20) varchar(20) varchar(10) varchar(10) int int varchar(8)
int int int tinyint int int date

  • Questa pagina è stata modificata per l'ultima volta il 7 giu 2007 alle 13:45.
  • Questa pagina è stata letta 1 171 volte.