Sto lavorando senza un sito che memorizza le singole pagine viste in una tabella 'vista':modo migliore per conservare views/stats in MySQL
CREATE TABLE `views` (
`view_id` bigint(16) NOT NULL auto_increment,
`user_id` int(10) NOT NULL,
`user_ip` varchar(15) NOT NULL,
`view_url` varchar(255) NOT NULL,
`view_referrer` varchar(255) NOT NULL,
`view_date` date NOT NULL,
`view_created` int(10) NOT NULL,
PRIMARY KEY (`view_id`),
KEY `view_url` (`view_url`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
E 'piuttosto semplice, negozi user_id (id dell'utente sul sito), il loro indirizzo IP, l'url (senza il dominio per ridurre la dimensione del tavolo un po '), l'url di riferimento (non lo si sta usando proprio ora e potrebbe liberarsene), la data (AAAA-MM-GG) formato ovviamente) e il timestamp unix di quando si è verificata la visualizzazione.
La tabella, ovviamente, sta diventando piuttosto grande (4 milioni di righe al momento e si tratta di un sito piuttosto giovane) e le query in esecuzione su di esso sono lente.
Per qualche ottimizzazione di base Ora ho creato una tabella 'views_archive':
CREATE TABLE `views_archive` (
`archive_id` bigint(16) NOT NULL auto_increment,
`view_url` varchar(255) NOT NULL,
`view_count` smallint(5) NOT NULL,
`view_date` date NOT NULL,
PRIMARY KEY (`archive_id`),
KEY `view_url` (`view_url`),
KEY `view_date` (`view_date`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
questo ignora le informazioni utente (e l'URL di riferimento) e memorizza quante volte un URL è stato visto al giorno. Questo è probabilmente il modo in cui generalmente vorremmo utilizzare i dati (quante volte una pagina è stata visualizzata su una base giornaliera), quindi è necessario rendere l'interrogazione abbastanza veloce, ma anche se la utilizzo principalmente sostituisce la tabella 'views' (destra ora immagino di poter mostrare le visualizzazioni di pagina all'ora per l'ultima settimana/mese o giù di lì e quindi mostrare viste giornaliere oltre a quella e quindi sarebbe solo bisogno della tabella 'viste' per contenere i dati dell'ultima settimana/mese) ma è ancora una grande tavolo.
In ogni caso, per farla breve, mi chiedo se puoi darmi qualche consiglio su come gestire al meglio la memorizzazione di statistiche/visualizzazioni di pagina in un sito MySQL, con l'obiettivo di mantenere entrambe le dimensioni del tavolo (s) nel db il più piccolo possibile ed essere ancora in grado di interrogare facilmente (e almeno in modo relativamente rapido) le informazioni. Ho guardato un po 'le tabelle partizionate, ma il sito non ha MySQL 5.1 installato. Qualsiasi altro consiglio o idea che potresti offrire sarebbe molto apprezzato.
umm, doesn il tuo server ha un log di accesso che conserva già tutti questi dati? Ci sono un sacco di visualizzatori/riepiloghi di log là fuori per i log di accesso web. C'è un valido motivo per non usarne uno? – dnagirl
Qual è lo scopo della colonna view_created? –
Lo scopo della colonna view_created, MicWafflestix, verrebbe utilizzato se volessi mostrare le visualizzazioni ogni ora (ad esempio quante volte un articolo è stato visualizzato ogni ora oggi). Suppongo che potrei usare DATETIME invece del timestamp INT (10), ma non sono sicuro che mi avrebbe aiutato molto. – Charlie