Хранить ли изображения в базе данных?

Ситуация:
Есть приложение для локальной сети (писано на Delphi, сейчас будет на Delphi же и допиливаться). Приложение использует MS SQL Server.
Есть сервер (Windows) и мобильные рабочие места (ноутбуки под Windows). Когда ноутбук не в сети, приложение должно работать автономно (то есть SQL Server установлен на каждом мобильном рабочем месте). Когда ноутбук в сети, приложение работает с сервером и его БД.
В приложении есть изображения (в перспективе также видео, 3D-модели и т.д.) в количестве нескольких тысяч штук и в объеме нескольких гигабайт.

Вопрос:
Где хранить изображения, видео и т.д.? В БД или отдельными файлами?
Если файлами, то как лучше организовать синхронизацию при подключении ноутбука в сеть?

Много перерыл информации на эту, казалось бы, баянную тему, но так и не смог принять обоснованного решения для нашего конкретного случая.
  • Вопрос задан
  • 4000 просмотров
Пригласить эксперта
Ответы на вопрос 7
petermzg
@petermzg
Самый лучший программист
Файловая система, эта таже самая база данных. Так что храните спокойно все изображения в blob полях базы данных.
Плюсы:
- Удобнее будет делать бекапы (все в базе)
- Контролируется целостность данных
- Скорость доступа к данным сопоставима с файловой системой.
Ответ написан
Комментировать
xmoonlight
@xmoonlight
https://sitecoder.blogspot.com
Если файлами, как лучше организовать синхронизацию при подключении ноутбука в сеть?
В Win-среде есть roaming profiles для этого.
Есть программа mirrorfolder: www.techsoftpl.com/backup/index.php
Можно настроить на синхронизацию папок профилей пользователей, запустив на сервере.
Можно сделать через SFTP+Delphi прям в приложении.
Где хранить - зависит от того, хотите ли Вы чтобы эти файлы можно было легко открывать/править без приложения или нет: если да - то БД, иначе - достаточно ФС.
Ответ написан
Комментировать
@AlexSku
не буду отвечать из-за модератора
Советую хранить в файлах, иначе база сильно увеличится.
Ответ написан
Комментировать
@MinamotoSoft
В файлах - быстрее, в базе - надежнее.
Тут надо опираться на среднестатистические данные. Если картинки большие - нету смысла в бд лепить. И наоборот.
Ответ написан
Комментировать
@AndrewFoma
если совсем честно и откровенно, то в таблице в поле в виде bytearray у меня хранятся сотни тысяч файлов(изображения), не мной придумано база и структура ее, и сначала думал, что это плохо, а сейчас смотрю, что очень удобно оказывается, а когда данные по остальным полям проиндексированы, на стареньком сервере с минимальной нагрузкой все очень шустро даже.
P.S. Кстати, при увеличении количества файлов, которые необходимо хранить, скорость чтения с базы будет быстрее чем с файловой системы, это следует из вопроса: где хранить файлы, если файлы не в таблице, на том же разделе(диске, рейде?), тогда сначала из базы считывается ссылка на файл, потом читается сам файл и при увеличении количества файлов точно будет все медленно.
Ответ написан
Комментировать
@fivec
ИТ
есть такая украинская система ИТ-Предприятие
они все вложения (картинки, документы, видео) хранят в БД. При этом для экономии используют отдельную БД например MS SQL Express. это позволяет упростить обслуживание основной БД. На сколько такой подход проще... но он реально у них используется во всех новых версиях системы.
Ответ написан
Комментировать
@dexmay
Ms SQL для хранения файлов поддерживает такие технологии как Filestream и File Table.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы