Лучше ли хранить изображения в BLOB или только в URL? [Дубликат]

  

Возможный дубликат:
Файлы - в базе данных или нет?

Мне было интересно, есть ли веские причины по-прежнему использовать blob-поля в базе данных. Пару лет назад я работал с БД с кучей образов в нем, БД была очень медленной, и я не мог видеть никаких оснований держать изображения внутри БД, поэтому я получил изображения и сохранил имена файлов вместо этого.

Было ли это умным шагом? Что бы вы сделали на моем месте?

36 голосов | спросил eiefai 20 Jpm1000000pmThu, 20 Jan 2011 20:18:53 +030011 2011, 20:18:53

7 ответов


29

Как вы можете сказать из других ответов, это большой «Это зависит». Некоторые другие факторы могут быть, если вы платите за хостинг, они взимают больше за хранение файлов или хранилище баз данных. Файловое хранилище обычно дешевле, особенно для облачных сервисов.

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

Сделайте свое исследование и узнайте, что важно для вас, и выберите направление, основанное на этом выборе.

ответил Eric Humphrey - lotsahelp 20 Jpm1000000pmThu, 20 Jan 2011 22:17:26 +030011 2011, 22:17:26
16

Причиной использования BLOB является просто управляемость - у вас есть ровно один метод для резервного копирования и восстановления базы данных, вы можете легко делать инкрементные резервные копии, существует нулевой риск изображения и его метаданных, хранящихся в таблицах БД, когда-либо получающих из-за синхронизации у вас также есть один программный интерфейс для запуска запросов или загрузки /сохранения изображений, поэтому вам не нужно предоставлять доступ к файловой системе удаленному клиенту, и вы знаете, что к изображениям и связанным с ними данным относятся те же самые GRANT. Кроме того, у вас есть один способ управления хранилищем (например, в Oracle вы можете поместить все в ASM и использовать Oracle как свой LVM для всего).

Другим приложением является объединение реляционных данных с сериализованными объектами (BLOB может быть любым двоичным, ему не нужно быть изображениями). Или вы можете запустить запрос с данными отношения и байтами x-y в BLOB, который может быть, например, заголовком файла. Приложения на самом деле бесконечны.

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

ответил Gaius 20 Jpm1000000pmThu, 20 Jan 2011 20:40:35 +030011 2011, 20:40:35
13

Я не использую blobs - в основном с точки зрения резервного копирования и восстановления, так как я не хочу, чтобы данные blob замедляли мои резервные копии.

Я не сохраняю полный URL, однако ... Я только храню путь к файлу ниже определенной точки и строю путь, поскольку у меня есть несколько способов, которыми люди и amp; программы получают доступ к моим файлам (FTP, HTTP, локальный каталог, каталоги, подключенные NFS).

... конечно, я, вероятно, имею дело с более & больше, чем у большинства людей ... один из моих наборов данных получает около 700 ГБ изображений (сжатых) в день. Но даже миниатюры для этих изображений, я все еще храню внешне.

ответил Joe 20 Jpm1000000pmThu, 20 Jan 2011 20:48:10 +030011 2011, 20:48:10
8

Я большой поклонник хранения «ссылочной» копии изображения в базе данных - с точки зрения управления /восстановления после сбоя, это действительно способ летать.

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

ответил Wyatt Barnett 21 Jam1000000amFri, 21 Jan 2011 03:08:19 +030011 2011, 03:08:19
8

Если вы работаете с Linux, сохранение изображений в файловой системе, а не в базе данных, имеет значительно лучшую производительность, см. этот отрывок из книги Брэда Эдигера Расширенные рельсы .

ответил j.p. 21 Jpm1000000pmFri, 21 Jan 2011 13:31:33 +030011 2011, 13:31:33
5

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

Мое предпочтение заключается в том, чтобы начать хранить изображения в папке на веб-сервере, но сохраните путь в легкодоступной конфигурации, чтобы, когда мне это нужно, я могу быстро переместить их на собственный выделенный оптимизированный сервер изображений. Позже я мог бы переместить их где-нибудь еще (думаю, S3 или Akamai) таким же образом. Все это намного сложнее, если мне нужно изменить код, который ожидал прочитать из базы данных.

ответил phred 17 AM00000080000001131 2011, 08:51:11
3
  

Был ли это умный ход?

Если это был умный ход или нет, это зависит от вашего конкретного случая:

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

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

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

  • Сохранение файлов обычно дешевле, чем хранилище базы данных.

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

  • С хранилищем базы данных невозможно получить доступ к вашим файлам, используя FTP (довольно очевидно, но хорошо помнить).

  • Хранение файлов базы данных замедлит и /или загромождает вашу базу данных периодические резервные копии.

  

Что бы вы сделали на моем месте?

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

Надеюсь, что это поможет.

ответил marcio 26 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowMon, 26 Sep 2011 19:08:04 +0400 2011, 19:08:04

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132