estoy trabajando sin un sitio que almacena páginas vistas individuales en una tabla 'vistas':mejor manera de almacenar vistas/Estadísticas en 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 ;
Es bastante básico, tiendas user_id (id de usuario en el sitio), su dirección IP, la URL (sin el dominio para reducir un poco el tamaño de la tabla), la URL de referencia (en realidad no la usa ahora y podría deshacerse de ella), la fecha (AAAA-MM-DD) formato de curso), y la marca de tiempo unix de cuando se produjo la vista.
La tabla, por supuesto, se está volviendo bastante grande (4 millones de filas en este momento y es un sitio bastante nuevo) y las consultas sobre ella son lentas.
Por alguna optimización básica ahora que he creado una tabla '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 ;
Esto ignora la información de usuario (y URL de referencia) y almacena el número de veces a la url fue visto por día. Esta es probablemente la forma en que generalmente queremos usar los datos (cuántas veces se vio una página por día), por lo que las consultas deberían ser bastante rápidas, pero incluso si las utilizo para reemplazar principalmente la tabla de 'vistas' (derecha ahora me imagino que podría mostrar vistas de página por hora durante la última semana/mes más o menos y luego mostrar vistas diarias más allá de eso, así que solo necesitaría la tabla 'vistas' para contener datos de la última semana/mes) pero sigue siendo una gran mesa.
De todos modos, para resumir, me pregunto si puede darme algún consejo sobre cómo manejar mejor el almacenamiento de las estadísticas/páginas vistas en un sitio MySQL, el objetivo es mantener el tamaño de la tabla (s) en el DB lo más pequeño posible y aún así poder consultar fácilmente (y al menos relativamente rápido) la información. He analizado un poco las tablas particionadas, pero el sitio no tiene instalado MySQL 5.1. Cualquier otro consejo o pensamiento que pueda ofrecer sería muy apreciado.
umm, doesn ¿Tu servidor tiene un registro de acceso que ya guarda todos estos datos? Hay muchos visualizadores/resúmenes de registros disponibles para los registros de acceso web. ¿Hay alguna razón convincente para no usar uno de ellos? – dnagirl
¿Cuál es el propósito de la columna view_created? –
El propósito de la columna view_created, MicWafflestix, se usaría si quisiera mostrar vistas por hora (por ejemplo, cuántas veces se visualizó un artículo cada hora hoy). Supongo que podría usar DATETIME en lugar de INT (10) timestamp, pero no estoy seguro de que eso me ayude mucho. – Charlie