Foros del Web » Programando para Internet » PHP »

Espacio ocupado por registros en MySQL

Estas en el tema de Espacio ocupado por registros en MySQL en el foro de PHP en Foros del Web. Hola. Estoy mudando una aplicacion que usaba antes ficheros en disco, cada usuario tenia una cuota de disco establecida que no deberia sobrepasar. Estoy intentando ...
  #1 (permalink)  
Antiguo 20/10/2005, 02:59
 
Fecha de Ingreso: octubre-2005
Mensajes: 15
Antigüedad: 12 años, 1 mes
Puntos: 0
Espacio ocupado por registros en MySQL

Hola. Estoy mudando una aplicacion que usaba antes ficheros en disco, cada usuario tenia una cuota de disco establecida que no deberia sobrepasar. Estoy intentando organizar estos datos en una base de datos MySQL por facilidad de consulta, etc. Trabajo en PHP. El problema es que no puedo encontrar una funcion en php que me determine que tanto espacio en disco ocupan determinadas filas en una tabla para poder establecer y hacer cumplir las cuotas.

Alguien tiene alguna idea de como obtener esa informacion???
  #2 (permalink)  
Antiguo 20/10/2005, 03:08
Avatar de jerkan  
Fecha de Ingreso: septiembre-2005
Mensajes: 1.607
Antigüedad: 12 años, 2 meses
Puntos: 18
sizeof() no te vale?

Por que lo que a ti te interesa que es? El espacio que ocupan los campos de la fila o el contenido de la fila?
  #3 (permalink)  
Antiguo 20/10/2005, 06:15
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Pero .. como gestionas tus archivos ahora en tu BD? .. los almacenas en binario en un campo de la misma (BLOB o similar ..) .. o sólo guardas el nombre del archivo? ...

Un saludo,
  #4 (permalink)  
Antiguo 20/10/2005, 19:28
 
Fecha de Ingreso: octubre-2005
Mensajes: 15
Antigüedad: 12 años, 1 mes
Puntos: 0
Cita:
Iniciado por jerkan
sizeof() no te vale?

Por que lo que a ti te interesa que es? El espacio que ocupan los campos de la fila o el contenido de la fila?
sizeof() es especifico de php, no para mysql, para usarlo, no se si funcionaria aun, tendria que recuperar todos los registros de la base de datos y medirlos con sizeof() uno a uno. No lo creo.

No todos los campos son blob. Me interesa saber cuanto espacio ocupa un registro en particular, es decir, supongamos que tenemos una tabla con
clave | dato 1 | dato 2 | archivo binario 1 | archivo binario 2

Me interesa saber cuanto espacio esta ocupando actualmente en disco una fila cualquiera de esta tabla, supongamos que extraemos una fila cualquiera y esta contiene (los tamaños dados aqui pueden no tener logica, es solo un ejemplo)
clave: longinteger 16 bytes
dato1: texto 2000 bytes
dato2: char 256 bytes
archivo binario 1 : 150000 bytes
archivo binario 1 : 300000 bytes

Total tamaño de la fila 16+2000+256+150000+300000
Eso es lo que quiero encontrar. Debe haber alguna forma en php puesto quer SQL MyAdmin saca algunos de ellos, cierto, podria bucear en los archivbos de myadmin y encontrar como lo hace, pero si alguien lo sabe, me evitaria horas de repaso de codigo fuente.
El tamaño de los indices es despreciable, no lo tendre en cuenta, pero si me gustaria saber como encontrar el tamaño de una fila en particular.

Gracias.
  #5 (permalink)  
Antiguo 21/10/2005, 05:27
 
Fecha de Ingreso: octubre-2005
Mensajes: 15
Antigüedad: 12 años, 1 mes
Puntos: 0
OK, la encontre para quien interese, aunque no muy eficiente voy a usar mysql_fetch_lenght que devuelve un array con el tamaño de cada elemento de la tabla.
  #6 (permalink)  
Antiguo 21/10/2005, 09:22
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Cita:
aunque no muy eficiente voy a usar mysql_fetch_lenght
Por qué dices que no es "eficiente" .. que problema tiene o le ves?

Un saludo,
  #7 (permalink)  
Antiguo 21/10/2005, 16:23
 
Fecha de Ingreso: octubre-2005
Mensajes: 15
Antigüedad: 12 años, 1 mes
Puntos: 0
Cita:
Iniciado por Cluster
Por qué dices que no es "eficiente" .. que problema tiene o le ves?

Un saludo,
Supongamos que un usuario en particular tiene 100 diferentes filas en la tabla, para hallar la cuota ocupada por ese usuario tendria que hacer 100+100 consultas.
Una solucion alternativa que creo es la que usare, es crear una tabla auxiliar en donde ir sumando los tamaños de todas las filas para un usuario, cada vez que se actualice una fila de un usuario en particular sumare o restare de la tabla, solo necesito dos campos en la tabla; usuario y tamaño. Opiniones seran bien recibidas.
  #8 (permalink)  
Antiguo 24/10/2005, 06:30
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Podrías usar su versión SQL para optimizar el cálculo .. de hecho puedes operar directamente (sumar .. restar, hacer sumatorios ... etc) directamente desde SQL:

Sería algo así:

SELECT SUM(LENGTH(campo1)+LENGTH(campo2)) as total FROM tabla WHERE condicionales si los necesitas ...

Un saludo,
  #9 (permalink)  
Antiguo 24/10/2005, 22:32
 
Fecha de Ingreso: octubre-2005
Mensajes: 15
Antigüedad: 12 años, 1 mes
Puntos: 0
Excelente, es la mejor opcion, una sola consulta. Muchas Gracias.
  #10 (permalink)  
Antiguo 24/10/2005, 23:59
 
Fecha de Ingreso: octubre-2005
Mensajes: 15
Antigüedad: 12 años, 1 mes
Puntos: 0
Lo siento, he estado pensando, aun no la he implementado, pero no me devolveria esa consulta n filas contenieno cada fila una columna con el tamaño individual de la fila que me interesa medir???? Habria que sumar el resultado de estas n filas para obtener el total, me equivoco???
De todas formas seguiria siendo una sola consulta + una sola operacion de suma en PHP lo cual esta muy bien.
  #11 (permalink)  
Antiguo 25/10/2005, 15:22
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
No .. devuelve una sóla columna/fila con el total .. SUM() hace el "sumatorio" de forma interna de todos esos sub-totales que se van generando y .. con el "alias" (AS) lo obtienes en ese registro .. Usa algún GUI (phpMyadmin? .. o el que uses) para Mysql para probar esa consulta SQL y ver que obtienes.

Un saludo,
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 13:35.