Как правильно хранить изображения - в файлах или в базе данных MySQL?

Главные вкладки

Аватар пользователя Anodonta Anodonta 16 февраля 2009 в 23:56

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

Средний размер каждого файла порядка 3-х мегабайт.

Вопрос в том, какой способ выбрать.
Цели 2:
1. Ускорить работу сайта.
2. Хоть немного усложнить "работу" сайтопи$дам-вэбмастерам.

Если есть альтернатива, прошу. (Сайт планируется строить на Друпал 6.9)

Комментарии

Аватар пользователя olk olk 17 февраля 2009 в 0:08

Второй пункт не понял (как можно усложнить работу «сайтопи$дам-вэбмастерам», когда имидж в конечном счете будет на экране ?):) но с точки зрения производительности - однозначно в файловой системе (особено файлы такого размера)

Аватар пользователя Bahiya Bahiya 17 февраля 2009 в 0:38

Однозначно рисунки выгоднее хранить в файловой системе. БД является узким местом каждого вебсайта.
По поводу защиты от сайтопиз...в. Существует возможность запретить доступ к рисункам не с вашего сайта с помощью .htaccess. Подробнее про это рассказать не могу - встречал недавно, но не могу вспомнить где именно.
Интересно ваше мнение.

Аватар пользователя Anodonta Anodonta 17 февраля 2009 в 1:19

Значит, файловая система...
Просто сейчас так много программ для копирования содержимого сайтов..
Придётся, видно, гадить копирайтом на каждой фотографии. Всё равно "выкачают".
А у нас не хватает ума как защитить файлы на сервере от тупого "выкачивания"...
Спасибо, будем учиться. Это никогда не поздно Smile

Аватар пользователя Ветер Ветер 17 февраля 2009 в 2:05

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

Разумное решение гадить копирайтом только если доступ к картинке пришел из вне.
А так как обычно боты скачивают, то запретить этим ботам доступ на сайт.

Тут вопрос в другом, для каких целей пользователь скачал картинки с сайта.
Для себя или для коммерческого использования.

Аватар пользователя Camor Camor 17 февраля 2009 в 9:41

Можно конечно заморочиться и настроить elite xml website на вывод картинок друпала, но это достаточно сложно и не для всех сайтов потянет, хотя возможностей будет куча. Защиту от того, что бы не тоскали картинки можно сделать на уровне сервера или просто ставить watermark на картинки, что тоже полезно. Ещё есть способ, прописать в .htaccess защиту основанную на user-agent этих программ.

Аватар пользователя _FeliX_ _FeliX_ 17 февраля 2009 в 11:11

Для небольшого количества файлов (измеряя в тысячах) предпочтительно хранить на жестком диске мне кажеться. Но если измерять количество в миллионах то скорее всего лучше в базе данных, ведь если будет такое большое количество файлов то что станет с файловой системой ? А база данных в данном случае увеличиться в размерах но работать будет Smile
Мое личное субъективное мнение.

Аватар пользователя Camor Camor 17 февраля 2009 в 11:16

"_FeliX_" wrote:
Мое личное субъективное мнение.

Не верно. Просто проанализируйте для чего это делается. И хорошим примером будет служить тот факт, что социальные сети хранят в файлах. База вообще абсурд.

Аватар пользователя _FeliX_ _FeliX_ 17 февраля 2009 в 12:01

"Camor" wrote:
Не верно. Просто проанализируйте для чего это делается. И хорошим примером будет служить тот факт, что социальные сети хранят в файлах. База вообще абсурд.

В полне возможно Smile
Всеже правильность определяется задачей. Простым является стандартный способ хранения файлов. А для некоторых задач более подходят базы данных.

Аватар пользователя Azerot Azerot 17 февраля 2009 в 14:01

Безусловно только в файловой системе.
От воровства контента защитится не так уж трудно.
Вот идеи:
1. В каталог с файлами ставится .htaccess запрещающий прямой доступ к файлам по HTTP
2. Картинки отдаются только через PHP-скрипты
3. В скрипты встроить защиту с лимитом скачиваний за минуту/час/день (кому как нравится) с конкретного IP.
4. Если не очень затратно по ресурсам, то можно этими же скриптами прилеплять к картинкам watermark с URL-сайта.

Аватар пользователя olk olk 17 февраля 2009 в 15:43

От непосредственного скачивания имиджов защитится можно, но
глобальной защиты все таки не получится, я не зря написал (в первом комменте), что елси имидж уже на экране вашего компьютера, то он уже есть в кэше вашего браузера, а значит защитить его нельзя Smile
а если вы не выдаете имидж на экран броузера, то зачем его держать на сервере ...
Защита в виде watermark-ов - ну в принципе можно но особого смысла не вижу ...
Единственная защита - юридическая, искать тех кто в обход ваших копирайтов использует ваш контент и предьявлять им претензии Smile

Аватар пользователя Azerot Azerot 18 февраля 2009 в 9:12

Всё зависит ещё от целей защиты!
Например у человека галерея в миллион картинок (ну пусть нескольких тысяч). Браузером такую галерею не вытянуть и за год! А вот роботом (если никакой защиты не стоит) это сделать можно быстро!
Опять же наличие watermark гарантирует, что не будет проблем с доказательством авторских прав на данное изображение, если например картинка выкладывается с правами "только смотреть", но с запретом на распространение, а недобросовестные пользователи на этот запрет плюют.

Аватар пользователя ucTok_Alex@drupal.org ucTok_Alex@drup... 19 февраля 2009 в 16:14

1)От робота не защититься никак.
2)делать частотомерку для ip и куда её класть? посещаемый ресурс вполне себе может леч полежать. При этом - роботу вобще говоря спешить некуда - будет тянуть одну картинку в 3-4 секунды - и всё. за несколько суток стянется всё что угодно

Аватар пользователя Azerot Azerot 20 февраля 2009 в 8:40

1. С чего вы взяли? Помоему я уже написал как можно защитится
2. Частотомерку можно класть в БД (например MySQL). Посещаемый ресурс никуда лечь и полежать не ляжет. Тут всего-то надо при вызове страницы, выполнить два запроса: SELECT и UPDATE. Тот же Drupal выполняет десятки запросов к БД при вызове практически любой страницы и ещё никуда не лёг. Да, роботу спешить некуда, но после скажем 100 скачиваний в течении часа, ему придётся отдохнуть сутки. Вот и посчитайте сколько у такого робота займёт скачивание хотя бы 10 000 картинок. Таким образом ваши "несколько суток" превращаются в 100 дней. А если поумничать и ввести дополнительную обработку (скажем если двое суток подряд по 100 картинок, то в бан на неделю), то вообще период скачивания может растянуться на годы Smile

Аватар пользователя bratok bratok 2 апреля 2013 в 12:52

Да простят меня коллеги, но файлы нужно хранить в БД, НО при этом копию в файловой системе.
Т.е. при обращении к файлу смотрится его наличие в файловой системе, если нет - создаем из БД копию в файловой системе, и при последующих обращениях уже в БД не лезем.
Но Drupal так не делает.

Зачем?
Файлы в внутри нод - это часть контента, хранение контента должно быть единообразно.

При переносе сайта достаточно просто перенести БД.