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

¿Qué es más óptimo, muchos campos o campos más grandes?

Estas en el tema de ¿Qué es más óptimo, muchos campos o campos más grandes? en el foro de Mysql en Foros del Web. Hola amigos, este es mi primer post y antes de empezar quería saludaros a todos y daros las gracias de antemano. La questión que planteo ...
  #1 (permalink)  
Antiguo 14/11/2011, 10:35
 
Fecha de Ingreso: noviembre-2011
Mensajes: 3
Antigüedad: 13 años
Puntos: 0
Pregunta ¿Qué es más óptimo, muchos campos o campos más grandes?

Hola amigos, este es mi primer post y antes de empezar quería saludaros a todos y daros las gracias de antemano.

La questión que planteo viene porque quiero hacer una web en la que cada usuario tenga estadísticas de las visitas que han recibido en su perfil de usuario. Esto supone que habrá que crear un registro cada día con la fecha y las visitas (2 campos) en una tabla. Esto multiplicado por muchos usuarios supone un increíble volumen de campos, concretamente uno por día y por usuario.

Mi pregunta es: ¿Qué es más óptimo? ¿Crear un registro por usuario y por día o por lo contrario crear, por ejemplo, por cada usuario un campo TEXT en el que, a modo de CSV se vayan registrando la fecha y las visitas? Algo tipo: fecha1;visitas1@fecha2;visitas2@fecha3;visitas3, etc. Por supuesto esta segunda opción con una limitación tipo: solo los últimos 30 días.

Mi miedo es que llegado un punto en el que hayan por ejemplo 800.000 registros en la tabla, la BBDD/Mysql empieze a sufrir e ir lento.

Gracias y un abrazo.
  #2 (permalink)  
Antiguo 14/11/2011, 10:49
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: ¿Qué es más óptimo, muchos campos o campos más grandes?

Cita:
Mi pregunta es: ¿Qué es más óptimo? ¿Crear un registro por usuario y por día o por lo contrario crear, por ejemplo, por cada usuario un campo TEXT en el que, a modo de CSV se vayan registrando la fecha y las visitas? Algo tipo: fecha1;visitas1@fecha2;visitas2@fecha3;visitas3, etc. Por supuesto esta segunda opción con una limitación tipo: solo los últimos 30 días.
¿Estás preguntando eso en serio?
Ningún analista de sistemas, administrador de bases de datos y menos una empresa te encargaría ninguna tarea si sugirieras eso como diseño del sistema. Automáticamente terminarías despedido solo por insinuarlo.
Te recomiendo leer los fundamentos de bases de daatos relacionales antes de encarar ningún proyecto, porque si tienes esta duda es que te falta información básica.

Lo sieto si suena muy agresivo, pero es que me dejaste alelado...
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 14/11/2011, 14:21
 
Fecha de Ingreso: noviembre-2011
Mensajes: 3
Antigüedad: 13 años
Puntos: 0
Respuesta: ¿Qué es más óptimo, muchos campos o campos más grandes?

Cita:
Iniciado por gnzsoloyo Ver Mensaje
¿Estás preguntando eso en serio?
Ningún analista de sistemas, administrador de bases de datos y menos una empresa te encargaría ninguna tarea si sugirieras eso como diseño del sistema. Automáticamente terminarías despedido solo por insinuarlo.
Te recomiendo leer los fundamentos de bases de daatos relacionales antes de encarar ningún proyecto, porque si tienes esta duda es que te falta información básica.

Lo sieto si suena muy agresivo, pero es que me dejaste alelado...
Si, desconozco muchos aspectos sobre optimización y rendimiento de mysql ya que no soy un programador experto (es para un proyecto personal), pero para eso pregunto, no? para aprender. En todo caso aunque acepto sin problemas mi inexperiencia, me ayudaría si además me explicaras el motivo de porqué hacer lo que planteaba de un modo u otro, ya que sino no aprenderé los fundamentos que mencionas.
  #4 (permalink)  
Antiguo 14/11/2011, 15:20
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 10 meses
Puntos: 447
Respuesta: ¿Qué es más óptimo, muchos campos o campos más grandes?

Hola Polloturbio:

Con permiso del compañero gnzsoloyo... A veces olvidamos que en este foro pueden acudir personas sin muchos conocimientos en BD como parece ser el caso, aunque al menos esperaríamos que se tengan ciertas nociones de lo que es una BD y su funcionamiento. Trataré de explicar algunos puntos acerca del diseño de BD para ver si queda un claro por qué la opción que comentas está mal.

Primero, hay que partir del hecho de la CARDINALIDAD de tus datos, entiéndase como la "frecuencia" con que se relacionan tus datos. Un usuario puede acceder 1 o más veces correcto? por lo tanto NO ES CONVENIENTE QUE MANEJES LOS ACCESOS EN UNA SOLA TABLA, las relaciones 1 a n generalmente se modelan con 2 tablas, una tabla CATALOGO (usuarios) y otra tabla de RELACIONES. la tabla relaciones maneja una referencia al Catálogo con todos sus posibles valores, es decir algo como esto:

Código:
USUARIOS
idUsuario|nombre
-----------------------------------
1|Hugo
2|Paco
3|Luis

ACCESOS
idAcceso|idUsuario|fecha
------------------------------------
1|1|2011-11-10
2|2|2011-11-11
3|3|2011-11-11
4|1|2011-11-12
5|1|2011-11-13
6|2|2011-11-14

De aquí se observa que por ejemplo el usuario 1 a ingresado 3 ocasiones, el usuario 2 a ingresado 2 veces y el usuario 3 ha ingresado 1 sola vez.

NUNCA MANEJES VALORES MÚLTIPLES PARA UN CAMPO. Tú tenías pensando hacer algo como esto:

Código:
usuario|fechas
-------------------------
1|2011-11-10,2011-11-12,2011-11-13
2|2011-11-11,2011-11-14
3|2011-11-11
para esto tu campo fecha tendría que ser de tipo VARCHAR, sin embargo observa el desperdicio, pues si solo tienes una fecha ESTAS DESPERDICIANDO MUCHÍSIMO ESPACIO. Además, para el manejo de fechas TIENES EL TIPO DE DATOS DE FECHA, no hay que inventar el hilo negro.

Hay muchas otras cosas a tomar en cuenta, te recomiendo que comiences por leer cualquier libro o manual sobre nociones de BD y pues que sigas exponiendo tus dudas en el foro.

Saludos
Leo
  #5 (permalink)  
Antiguo 14/11/2011, 16:42
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: ¿Qué es más óptimo, muchos campos o campos más grandes?

Bueno, Leo se me ha adelantado con una buena explicación. Yo no te respondí antes porque era mi horario de trabajo, y la empresa no se pone muy contenta cuando uno usa la red para cosas personales.

A las cosas que te plantea Leonardo le agregaría algun detalle, por ejemplo, cuando creas un objeto que conceptualmente llamamos Entidad, es decir un una relación de dominios definida bajo un nombre, como Cliente, Usuario, Jugador, Vehiculo, etc., además de estar analizando en detalle los objetos y sus relaciones, estás definiendo los datos que le son propios (los atributos, todos los cuales tienen un dominio o campo de existencia, donde los valores no son arbitrarios. Así, por ejemplo, el número que corresponde a una casa en una calle siempre será positivo, y jamás tendrá más de cinco cifras (o al menos no conozco ciudad donde pueda darse).
Esto es importante para definir el tipo de columna que usarás para almacenar tal información.

La importancia de elegir el tipo correcto es, entre otras cosas, para no desperdiciar espacio en disco, memoria en una consulta, o capacidad en una red, ya que usar datos de mayor capacidad de la necesaria resulta en bytes "basura".

¿De qué sirve usar un INT para una dirección, si con un SMALLINT tengo el rango que necesito? ¿Para qué usar un valor con signo, si sé que jamás tendré números negativos? ¿Para qué definir un TEXT, cuando la suma de bytes usando diversso tipos de columna, tal vez no llegue a los 200 Bytes?

La elección de las columnas es una parte importante del proceso de definición de las tablas, y surge de un buen análisis de cada entidad que interviene en el sistema. Reglas como la de no usar campos multivaluados, que Leonardo te mencionó, son parte de los fundamentos de las Bases de Datos.

Como sea, la correcta elección de los campos también impacta en las consultas, en la optimización de los índices, de las búsquedas.

Otra cosa que te aconsejo es que no confundas representación de un dato con el almacenamiento del dato. Esto es especialmente importante cuando trabajas con fechas o números. Las fechas no se almacenan como en castellano. Ni tan siquiera se almacenan como se escriben en inglés, sino en el formato que Leonardo te mostró. Pero eso no quiere decir que luego no puedas obtenerla en esa forma. Eso se hace con funciones propias de MySQL en las consultas.
No trates de inventar la rueda: Ya estáinventada, solo tienes que saber cuál es la rueda correcta.

Para que puedas ver los formatos de las columnas y sus rangos: MySQL:: 11. Tipos de columna
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #6 (permalink)  
Antiguo 17/11/2011, 05:24
 
Fecha de Ingreso: noviembre-2011
Mensajes: 3
Antigüedad: 13 años
Puntos: 0
Respuesta: ¿Qué es más óptimo, muchos campos o campos más grandes?

Gracias a los 2 por vuestra ayuda y consejo. Entonces entiendo que algunas cosas que he hecho como por ejemplo almacenar una serie de colores así:

Campo color = "#000000;#F05900;#999900"

definidos como varchar (30)

No es correcto sino que es mejor meter cada color en un campo distinto así:

Campo color1 = "#000000"
Campo color2 = "#F05900"
Campo color3= "#999900"

definidos como varchar (7).

No es que no sepa programar ni usar bbdd mysql, lo cierto es que llevo tiempo usando php+mysql, lo que pasa es que me faltan conocimientos referentes a rendimiento y optimización. Espero aprender mucho con vuestros consejos!
  #7 (permalink)  
Antiguo 17/11/2011, 06:18
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: ¿Qué es más óptimo, muchos campos o campos más grandes?

SI, esa frma de guardar los datos es incorrecta. No te olvides que la primera regla que te enseñan en BBDD, y jamás se debe romper es que no deben existir campos multivaluados. Solo sirven para obtener problemas.

Mira, si consideras que un color se define como un valor representado como tres bytes en hexadecimal, yo lo guardaría como un CHAR(3), almacenando el par de bytes y cuando quiera recuperar el valor usaría HEX() sobre ese campo.
Claro que no es algo que haya probado, sino algo que se me ocurre en este momento. Pero creo que deberías intentarlo, porque no tiene mucho sentido usar 7 bytes para representar algo que a lo más necesita 3.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: optimización, rendimiento
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 17:12.