2011-01-06 12 views
6

Actualmente estoy trabajando en un sistema que implica almacenar múltiples estudios y detalles de sus contenidos (un estudio puede contener típicamente 1 < X < ~ 2000 imágenes). Mis colegas y yo estábamos discutiendo cuál sería el mejor método para almacenar los tamaños de los archivos (específicamente los tamaños de las imágenes) en una base de datos.Almacenamiento de tamaños de archivos en una base de datos

El tamaño de los archivos suele oscilar entre < 1kB y> 20MB.

Estamos debatiendo actualmente entre el almacenamiento de los tamaños de imágenes como:

# of kilobytes (as an integer value) 
# of bytes (as a large integer value) 
# of megabytes (possibly as a decimal value) 
Other Options... 

No he trabajado con el almacenamiento de tamaños de archivo mucho y se preguntaba lo que podría ser el método más eficiente/práctico de lograr esto?

Respuesta

6

No hay una respuesta correcta. Me gusta la respuesta de Matt por razones de precisión. Me gusta la respuesta de Abe por razones de ahorro de espacio ... (Sí, el espacio en una tabla es mucho más "impactante" que en el Sistema de archivos)

La verdadera respuesta es, ¿con qué propósito está almacenando el valor? ¿Es esto un mecanismo para facturar al usuario que almacena los datos? Entonces tendrías que confiar en el contrato. ¿Es esto para medir el espacio en una unidad ... si es así, los archivos REALMENTE ocupan cierto número de 'bloques' y NO una cierta cantidad de bytes. Si el tamaño de bloque mínimo es 2KB, entonces debe decir que CADA archivo es incrementos de 2kb ... Si almacena ese valor o ese valor multiplicado por 2kb depende de usted.

Quizás esté almacenando el valor porque el algoritmo de recuperación tiene 2 rutas de optimización, una para archivos más grandes y otra para archivos más pequeños, y ese proceso le gustaría conocer el tamaño SIN interrogatorio del sistema de archivos. (En este caso, tal vez solo necesite una columna de indicador "is_greater_than_x_kb")

Nadie aquí puede decirle cuál es su requisito. Lo único que las respuestas existentes le dan es una opinión, no una respuesta correcta.

+0

Gracias Steph- Sé que no hubo ninguna respuesta precisa, solo pensé que me gustaría tener ideas de la gente sobre diferentes razones para almacenar los tamaños de archivo y los beneficios de almacenarlos de cierta manera. Las respuestas de todos han sido muy útiles. –

+0

Todos son útiles, pero no pueden sustituir a los requisitos claros. El 95% de los problemas que veo provienen de la falta de requisitos claros. Además, el 76% de todas las estadísticas están completamente fabricadas. ;-) –

+1

No puedo pensar en una razón para almacenar el tamaño del archivo a menos que sea un requisito. Como Stephanie dice que hay un uso para "is_greater_than_x_kb". Si el tamaño del archivo era un diseño de BA para que la aplicación pudiera verificar si tenía el archivo correcto, pregúnteles si considerarían una suma de comprobación u otro tipo de identificador único para el archivo, para que la aplicación sepa que obtuvo el archivo que intentaba Llegar. –

3

Yo personalmente elegiría # de kb como columna int (siempre que nunca tenga nada más pequeño que 1kb). bigint ocupa el doble de espacio (8 bytes frente a 4) y, siempre que esté bien documentado, la gente no debería confundirse demasiado.

+0

Si están almacenando archivos de hasta 20 MB, yo diría que guardar 4 bytes para describir el tamaño no es una prioridad. ;-) –

9

Si va a almacenar explícitamente el tamaño, almacene el número de bytes. Existe demasiada confusión/ambigüedad al usar otras unidades. diferentes personas podrían interpretar como kb::

  • kilobytes
  • kilobits
  • kibibytes
  • kibibits

...and how big is a kilobyte, anyway?

T

Ejemplo

Dicho esto, si está almacenando los datos reales en su base de datos, , no veo una razón convincente para almacenar explícitamente la longitud de los datos.

+0

No estoy seguro de por qué exactamente se está almacenando, ya que realmente no estoy trabajando en ese lado del sistema. Sin embargo, sabía que se estaba almacenando y pensé que vería si alguien había contribuido con el tema o si había una "mejor práctica" o algún otro tipo de uso sugerido para almacenar los tamaños de los archivos. –

2

Almacenar filesizes en bytes como un entero en la base de datos. El campo entero (firmado) de mysql tiene un valor máximo de 2147483647, por lo que se pueden almacenar archivos de hasta 2 GB sin problemas.

Cuestiones relacionadas