Хранение размеров файлов в базе данных - PullRequest
12 голосов
/ 06 января 2011

В настоящее время я работаю над системой, которая включает в себя хранение нескольких исследований и подробностей их содержания (исследование обычно может содержать 1

Размеры файлов обычно варьируются от <1 кБ до> 20 МБ.

В настоящее время мы обсуждаем сохранение размеров изображений как:

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

Я мало работал с хранением размеров файлов, и мне было интересно, что может быть наиболее эффективным / практичным способом достижения этой цели?

Ответы [ 4 ]

10 голосов
/ 06 января 2011

Если вы собираетесь явно хранить размер, сохраняйте количество байтов.Слишком много путаницы / двусмысленности при использовании других единиц.

Пример: разные люди могут интерпретировать kb как:

  • килобайт
  • килобит
  • kibibytes
  • kibibits

... а каков в любом случае килобайт?

Как говорится, если вы 'сохраняя фактические данные в вашей базе данных, Я не вижу непосредственной причины для явного сохранения длины данных вообще.

6 голосов
/ 06 января 2011

Нет правильного ответа.Мне нравится ответ Мэтта по соображениям точности.Мне нравится ответ Абэ из соображений экономии места ... (Да, пространство в таблице гораздо более "влиятельно", чем в файловой системе)

Реальный ответ таков: для какой цели вы храните значение?Это для механизма, чтобы выставить счет пользователю, хранящему данные?Тогда вам придется положиться на контракт.Это для измерения места на диске ... если это так, файлы действительно занимают некоторое количество «блоков», а не некоторое количество байтов.Если минимальный размер блока составляет 2 КБ, то вы должны сказать, что КАЖДЫЙ файл имеет приращения 2 КБ ... Если вы сохраняете это значение или это значение, умноженное на 2 КБ, зависит от вас.алгоритм извлечения имеет 2 пути оптимизации, один для больших файлов и один для меньших, и этот процесс хотел бы знать размер БЕЗ опроса файловой системы.(в этом случае, может быть, вам нужен только столбец флага is_greater_than_x_kb).

Никто здесь не может сказать вам, каковы ваши требования.Единственное, что дают вам существующие ответы, это мнение, а не правильный ответ.

3 голосов
/ 06 января 2011

Я храню размеры файлов в байтах как целое число в базе данных.Поле целого числа со знаком (подписанное) в mysql имеет максимальное значение 2147483647, поэтому файлы размером до 2 ГБ можно хранить без проблем.

3 голосов
/ 06 января 2011

Я бы лично выбрал в качестве столбца int число kb (если у вас никогда не будет ничего меньше 1kb).bigint занимает вдвое больше места (8 байт против 4), и если это хорошо задокументировано, люди не должны быть слишком смущены.

...