У меня есть требование хранить загруженные пользователем файлы в базу данных (файловая система не поддерживается).
Загружаемые файлы бывают разных типов (например, 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
.