Требования к BLOB-объектам и хранилищу - PullRequest
11 голосов
/ 19 января 2012

У меня есть требование хранить загруженные пользователем файлы в базу данных (файловая система не поддерживается).

Загружаемые файлы бывают разных типов (например, PDF, EXCEL и т. Д.).

У меня проблема с решением, использовать ли MEDIUMBLOB как тип для хранения этих файлов в виде двоичных данных.

А путаница возникает из-за того, что размеры этих файлов меняются с огромной разницей. Например, некоторые файлы имеют несколько сотен килобайт (например, 114 КБ), но некоторые другие имеют размер до 1,5 мегабайт.

Так что мне действительно нужно использовать MEDIUMBLOB в качестве типа столбца. Но я немного путаюсь, так как фактически занимаемая память зависит от размера самого загружаемого файла или Размер самого файла игнорируется, а память просто выделяется на основе типа данных . Это действительно важно, потому что большинство файлов, которые будут загружаться каждый день (многие из них), будут очень маленькими по размеру, а доступная на диске память (пространство) ограничена.

Когда я читаю следующий раздел MySql doc:

10,5. Требования к типу данных для хранения

L представляет фактическую длину в байтах данного значения строки.

Data type                  Storage Required
========================================================
TINYBLOB, TINYTEXT  L + 1 bytes, where L < 2 ^ 8
BLOB, TEXT           L + 2 bytes, where L < 2 ^ 16
MEDIUMBLOB, MEDIUMTEXT  L + 3 bytes, where L < 2 ^ 24
LONGBLOB, LONGTEXT  L + 4 bytes, where L < 2 ^ 32

Я думаю, что используемая память зависит от размера загружаемого файла. т.е. если у меня тип столбца MEDIUMBLOB и если я загружаю файл размером 114 КБ, то будет использоваться только 114 KBytes + 3 Bytes дисковой памяти, а не (2 ^ 24) Bytes + 3 Bytes.

Я правильно думаю? Или я буду тратить много дисковой памяти на хранение большого количества файлов (размером от 100 до 300 КБ) в поле MEDIUMBLOB.

1 Ответ

4 голосов
/ 19 января 2012

MySQL предоставит вам размер каждой таблицы, используя ПОКАЗАТЬ СТАТУС СТАТУС .Поэтому, если вы загрузите несколько тестовых файлов, вы сможете оценить фактический размер, который они будут занимать в базе данных.Каждая таблица имеет некоторые накладные расходы, поэтому я бы использовал столько файлов, сколько разумно для тестирования.

...