Каков наилучший способ хранения / обработки файловых вложений в WPF с локальной базой данных? - PullRequest
2 голосов
/ 30 ноября 2011

вот быстрый фон приложения

В основном ..

  1. Несколько пользователей (обычно только один) на машину
  2. база данных локального сервера sql, работающая на каждоммашина хранит свои собственные данные
  3. Приложение WPF имеет возможность экспортировать данные из таблицы в zip-файлы

В настоящее время я не могу изменить среду, в которой она включена.

Я вижу два варианта работы с сохранением / загрузкой вложений в документы (pdf, doc). В настоящее время нет требований к размерам или необходимых расширений.

  1. Сохранение каждого файла в формате varbinaryнепосредственно в базу данных и используя FK и справочную таблицу, чтобы вернуть эти файловые вложения обратно в приложение для открытия

  2. Имея те же FK и справочные таблицы, но я сохраняю в файл в какую-то папкуна локальном жестком диске (хэш + шифрование?).Затем я переименовываю этот файл в универсальное имя и сохраняю имя и местоположение этого файла в базе данных.

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

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

Есть ли лучший метод для этого?

Ответы [ 3 ]

1 голос
/ 30 ноября 2011

Если вы используете поддерживаемую версию SQL Server, лучше всего использовать тип данных FILESTREAM , поскольку он обеспечивает много преимуществ в плане производительности, если его стоимость не будет меньше 1 МБ .

Из артикула:

Если выполняются следующие условия, вам следует рассмотреть возможность использования FILESTREAM:

Размер хранимых объектов в среднем превышает 1 МБ.

Быстрый доступ к чтению важен.

Вы разрабатываете приложения, которые используют средний уровень для приложения логика.

Для небольших объектов, хранение varbinary (max) BLOB в базе данных часто обеспечивает лучшую производительность потоковой передачи.

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

0 голосов
/ 30 ноября 2011

Это вопрос производительности и согласованности.У меня есть коллекция изображений размером 1 ГБ (~ 100 КБ каждое), которая подается из двоичного столбца в локальной базе данных SQL Server, и все работает гладко.Мы даже разрешаем устанавливать БД в качестве удаленного сервера для нескольких пользователей и все еще отлично работает (хотя мы не поддерживаем много одновременных пользователей).

Раньше у нас была БД доступа с файлами на диске, нопользователь часто испортил файловую структуру, файлы пропали и т. д. Хранение их в БД оказалось очень надежным и не так уж плохо сказывается на производительности.Резервное копирование, управление разрешениями и импорт / экспорт очень просты.

Я бы порекомендовал вариант 1, если у вас нет требований к производительности, которые диктуют иное.

0 голосов
/ 30 ноября 2011

Это полностью зависит от ваших требований.

Если вы хотите иметь возможность копировать базу данных SQL с одного компьютера на другой, или если вы хотите получить полное аварийное восстановление путем восстановления резервной копии базы данных, тогда опция1 ваш лучший выбор.Конечно, это означает, что ваша БД может вырасти довольно большой.

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

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

...