Подтвердить что ты не робот

Когда используется MySQL BLOB?

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

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

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

Спасибо.


UPDATE:

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

ОБНОВЛЕНИЕ 2

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

4b9b3361

Ответ 1

Чтение:

который завершает

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

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

Ответ 2

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

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

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

Ответ 3

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

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

Ответ 4

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

Ответ 5

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

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

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

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

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