Когда рекомендуется использовать MySQL BLOB? - PullRequest
18 голосов
/ 13 марта 2011

Я кодирую приложение, которое будет загружать и удалять много файлов, обычно я просто перемещаю файлы в папку на сервере, называя их уникальной строкой id. Но, насколько я понимаю, MySQL также позволяет мне хранить двоичные данные (файлы), когда это будет лучшим выбором?.

Пожалуйста, используйте твердые аргументы, например, когда использование BLOB будет означать производительность улучшение?.

П.С .: Я использую MyISAM, если это имеет значение.

Спасибо.


UPDATE:

Похожие вопросы :
- Хранение изображений в БД - да или нет?
- Делать или не делать: Хранить изображения в базе данных (спасибо Себастьяну)

ОБНОВЛЕНИЕ 2

Хранение файлов в базе данных - это не нужно я пытаюсь узнать когда это лучшая идея, чем хранение их в папках.

Ответы [ 5 ]

13 голосов
/ 13 марта 2011

Чтение:

, на которую завершается

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

  • Если он не должен быть доступен на нескольких серверах, всегда лучше поместить их в файловую систему.
  • Если он должен быть доступен на нескольких серверах и на самом деле есть какая-то нагрузка в системе, вам потребуется какое-то распределенное хранилище.
9 голосов
/ 13 марта 2011

Если вы используете движок MyISAM db, поля BLOB можно проиндексировать, чтобы вы могли выполнять быстрый поиск ваших файлов с использованием базы данных.

Также еще одним преимуществом хранения файлов в полях BLOB является то, что к ним можно получить доступ более эффективно, чем к файлам на диске (нет необходимости обходить каталог, открывать, читать, закрывать).

Если вы планируете хранить много файлов в MYSQL, обычно рекомендуется хранить файлы в отдельной таблице. Это позволяет сканировать метаинформацию, не спотыкаясь о каплях. Затем, когда вам действительно нужно получить BLOB-объект, JOIN достаточно эффективен.

2 голосов
/ 13 марта 2011

Ну, это немного устарело, но в этой статье приведено несколько достойных аргументов для хранения BLOB: http://www.dreamwerx.net/site/article01.

Хотя само по себе это не увеличение производительности, наличие ваших изображений и еще чего-нибудь в БД, а не в каталоге, также должно устранить проблемы с хотлинкингом (при условии, что это общедоступное веб-приложение).

0 голосов
/ 06 марта 2014

Memcache не является альтернативным решением, поскольку вам необходимо управлять избыточностью и TTL на распределенных серверах, что усложняет обслуживание.

Лучшее решение, на мой взгляд, заключается в размещении общедоступных статических данных в CDN, которые распределены по структуре, и частных статических данных в БД для облегчения распределения по нескольким серверам.

Каждый сервер может реализовать свой собственный Memcache при каждом попадании.

Если вы уже сохранили данные в файловой системе и хотите перенести их в базу данных, самый простой способ - создать таблицу ключей и значений из следующего:

KEY = '/ image / filename' (строка расположения файловой системы), value = BLOB (фактический файл) и создайте оболочку, которая будет получать это из базы данных с помощью правила перезаписи и обработки приложения. Таким образом, вы можете использовать полную прозрачность с существующим кодом.

0 голосов
/ 13 марта 2011

Обязаны ли вы использовать MySQL? Если нет, попробуйте ODBMS или PostgreSQL для хранения файлов, или вы можете хранить только пути к файлам. См., Например, this .

...