Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Optimización en tabla de visitas

Estas en el tema de Optimización en tabla de visitas en el foro de Mysql en Foros del Web. Buenas, Tengo unas dudas sobre la optimización que le podría realizar a una tabla de visitas. Actualmente tiene casi 10 millones de registros, y aumenta ...
  #1 (permalink)  
Antiguo 13/12/2010, 07:12
Avatar de sysdebian  
Fecha de Ingreso: octubre-2008
Mensajes: 196
Antigüedad: 15 años, 6 meses
Puntos: 8
Optimización en tabla de visitas

Buenas,

Tengo unas dudas sobre la optimización que le podría realizar a una tabla de visitas.
Actualmente tiene casi 10 millones de registros, y aumenta en unos 30000 cada dia.

La tabla tiene los siguientes campos:

id
producto_id
producto_nombre
producto_url
producto_categoria
propietario_id
propietario_nombre
fecha
pais
url_referrer
keywords

Mis primeras dudas son sobre los campos, creo que es un poco redundante tener el id del producto, su nombre y su url. Con el id del producto ya se puede acceder a su nombre, url y categoria. Y lo mismo con el propietario.
Es mejor registrar solo el id, para tener una tabla mas pequeña, o por el contrario, mejor poner ahí el nombre, url y categoria, para cuando se hagan las consultas no tener que tirar de otras tablas ?

Cuando hablo de mejor, me refiero a rendimiento, teniendo en cuenta que estamos hablando de tablas tan grandes, que son usuarios que les gustan ver sus estadísticas... etc.

Otra duda que tengo es si se podría optimizar de alguna forma dividiendo la tabla en otras tablas, por ejemplo, tabla del mes actual (lo que llevaría el grueso de las consultas) y tabla total, para consultar el historico.

Quizá haya otra forma de manejar esto que a mi se me escapa, porque no soy ningún experto en sql. ¿ Algún consejo ? mysam? innodb ?

Unas de las consultas que hago ahora mismo, saca un top de visitas diario, semanal, mensual y total. Lo cierto es que ahora lo tengo muy mal (esto se corregirá a nivel de código), pero se registran entradas duplicadas por cada usuario, por lo que a la consulta le tengo que meter un "distinct". Tengo entendido que estos parámetros son los primeros a evitar en cuanto a optimización se refiere y es algo que haré en breve. Pero ahora mismo, las consultas de top total se me van fácil a mas de 15 min.

Gracias y un saludo.
__________________
Artigoo: Gestor de contenido online.
  #2 (permalink)  
Antiguo 13/12/2010, 10:00
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Optimización en tabla de visitas

De entrada sí elimina lo que ya tengas en otras tablas,

Visitas
id
producto_id
fecha
pais
url_referrer
keywords

Productos
producto_id
producto_nombre
producto_url
id_categoria
id_propietario

Categorias
id_categoria
categoria

Propietarios
propietario_id
propietario_nombre

piensa si podrias agrupar visitas, en el sentido siguiente

fecha,pais,url_referrer tambien son datos que se podrian guardar una sola vez para cada usuario que haga una visita, que seguaramente será a mas de un producto.


TablaVisitas
idVisita
fecha
pais <--- si se refiere al usuario
url_referrer<--- si se refiere la url de procedencia del usuario

TablaDetalleVisitas
id
idVisita
producto_id
keywords

En cuanto a los keywords no veo de donde los sacas luego no se donde ponerlos.

Por supuesto necesitas indices sobre fecha, idVisita, producto_id. La idea de particionar la tabla por fechas no va desencaminada, pero depende del tipo de consultas, obvimente mejorara mucho la obtención del top de las visitas recientes pero el top de toda la historia saldrá perjudicado...

La optimizacion es un tema largo y apasionante... y no es una ciencia exácta puesto que una solución optima para una cosa no lo es para otra, luego debes decidir cual prefieres en funcion del tipo de consultas que hagas con más frecuéncia o que necesites que sean más rápidas...

Evitar las repetiones obviamente es eliminar ruido inecesario...

Suerte

Productos
producto_id
producto_nombre
producto_url
id_categoria
id_propietario

Categorias
id_categoria
categoria

Propietarios
propietario_id
propietario_nombre

TablaVisitas
idVisita
fecha
pais <--- si se refiere al usuario
url_referrer<--- si se refiere la url de procedencia del usuario

TablaDetalleVisitas
id
idVisita
producto_id
keywords

Quim
  #3 (permalink)  
Antiguo 15/12/2010, 04:49
Avatar de sysdebian  
Fecha de Ingreso: octubre-2008
Mensajes: 196
Antigüedad: 15 años, 6 meses
Puntos: 8
Respuesta: Optimización en tabla de visitas

Hola Quimfv,

Gracias por tu respuesta.
Con keywords me refiero a las palabras que han usado en un buscador (en el caso de llegar desde uno) para acceder a la página.

La idea entonces una tabla de visitas básica, que contiene poco mas que ids y luego otra con mas detalle. A ver si se me ocurre si se puede dividir algo mas para favorecer las consultas mas recientes.

Gracias y un saludo.
__________________
Artigoo: Gestor de contenido online.
  #4 (permalink)  
Antiguo 15/12/2010, 05:46
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Optimización en tabla de visitas

Luego keywords tambien iria en la TablaVisitas no en TablaDetalleVisitas.

Suerte.
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.

Etiquetas: optimización, visitas, tablas
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 21:45.