2015-10-13 3 views
5

Я знаю, что хранение изображений в виде BLOB в SQL не рекомендуется. Однако работа на моем локальном ПК и на сервере затрудняет синхронизацию изображений между ними. Будет ли еще причина не использовать BLOB только в качестве резервной копии, которая создавала бы кешированный файл локально (для статического обслуживания)?MySQL Store Image BLOB Плохая практика производительности

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

+0

Я знаю, что это напрямую не ответил, но не могли бы вы уточнить, почему образы не могут быть разделены? Могут ли они размещаться на сервере онлайн (или CDN)? – 1mike12

+1

@ 1mike12 В настоящее время все хранится локально, и все пути относятся к базовому каталогу/веб-сайту, чтобы упростить разработку в разных средах. Это намного легче, когда тестирование не нужно беспокоиться о разрыве производственного сайта. Центральная база данных MySQL. Возможно, в будущем я также переключусь на централизованную систему для изображений, но на данный момент это более общий вопрос SQL, частично из любопытства. – nebkat

+2

Нет никакой хорошей или плохой практики хранения изображений (файлов) в поле BLOB. Это скорее зависит от потребностей. Основанный на предвзятости: я вообще не храню изображения в файловой системе в широкомасштабных приложениях Java EE (серьезно, я был полностью устал от этого в прошлом), поскольку они не могут быть синхронизированы с соответствующими операциями с базой данных, особенно, когда они отправляться на удаленный сервер EE. Небольшая потеря производительности и/или небольшая неэффективность базы данных менее важны, чем правильность и полнота. Кроме того, файлы, хранящиеся в базе данных, более безопасны. – Tiny

ответ

1

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

Но если ваши изображения должны быть частными, то хранить их в БД не самый худший вариант, но вы должны обрабатывать их в своем коде.

Если вы используете формат mysql5.6 и Barracuda (это самый распространенный в наши дни), то из точки зрения MySQL - сохранение столбцов BLOB будет иметь 2 обращения к данным на диске вместо 1, так как BLOB и TEXT столбцы сохраняются на главной странице данных.

Вы можете прочитать подробнее об этом Percona Blog Post

Смежные вопросы