Каков наилучший способ управления пользовательскими фотографиями для веб-сайта? - PullRequest
1 голос
/ 06 августа 2009

Мой вопрос касается отображения миниатюр и хранения.

Допустим, у меня есть веб-сайт, где пользователи могут загружать фотографии и просматривать их в альбомах.

Как обычно хранятся фотографии в этом сценарии? Сами изображения или пути к файлам обычно хранятся в базе данных?

Если фотографии большие и вы хотите отобразить миниатюры, лучше:

  • сохранить копию изображения и изображение уменьшенного размера, отображая только изображение большего размера, если требуется?
  • использовать HTML для уменьшения размера?

Ответы [ 4 ]

4 голосов
/ 06 августа 2009

Почти всегда плохая идея хранить изображения в базе данных. BLOB-файлы могут сильно замедлить работу базы данных. Это также ограничивает вашу способность распределять хранилище между различными дисками. Когда файлы разделены, вы можете даже иметь один или несколько отдельных серверов изображений, чтобы уменьшить нагрузку на основной динамический сервер. Мои рекомендации:

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

  • Вы определенно хотите создать миниатюрные изображения, чтобы уменьшить пропускную способность сети и ускорить работу приложения. Однако вы можете создавать миниатюры по требованию или при низкой загрузке системы. Если вы работаете в Linux, ImageMagick прекрасно подходит для автоматического изменения размеров изображений в пакетном режиме. Он может даже изменить размер на процент вместо абсолютной суммы.

0 голосов
/ 06 августа 2009

Это общий вопрос, и основной ответ заключается в том, что это зависит. Вам нужно дать больше информации. Какую базу данных вы планируете использовать? SQL Server 2008 имеет несколько хороших новых функций для обработки этого сценария с помощью функции FILESTREAM. Обычно я предпочитаю помещать их в базу данных, но если вы просто добавите их, не задумываясь о требованиях к дизайну и доступу, у вас может быть низкая производительность по мере увеличения количества фотографий.

0 голосов
/ 06 августа 2009

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

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

Кроме того, имейте в виду, что не все серверы баз данных созданы равными в этом отношении. В SQL 2008 появился тип данных FILESTREAM, который на самом деле хранит изображения в локальной файловой системе, в то же время предоставляя всем доступ на чтение / запись через сервер БД. Это дает дополнительное преимущество, позволяя запускать антивирусные сканеры для входящих файлов, когда они находятся в хранилище.

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

Что касается второго вопроса: сохраните миниатюру вместе с изображением. Этот процесс происходит только один раз для каждого изображения и экономит пропускную способность презентации. Использование HTML для уменьшения размера изображения на самом деле ничего не делает для клиента.

0 голосов
/ 06 августа 2009

Некоторые программы, такие как TikiWiki, хранят фотографии в базе данных. Затем он также кэширует миниатюрные фотографии в базе данных.

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...