Хранение документов в виде больших двоичных объектов в базе данных - есть какие-либо недостатки?
-
03-07-2019 - |
Вопрос
Требования к моей системе управления документами были следующими:
- Должен быть защищен от кражи простым копированием каталогов, файлов и т.д.
- Должен быть защищен от традиционного вирусного заражения (заражение физического файла).
- Должно быть, быстро извлекается
- Репозиторий не должен быть виден случайным пользователям (просматривающим каталоги) и т.д.
Я решил хранить все документы (и отсканированные изображения) в базе данных в виде больших двоичных объектов, и пока что мой опыт прекрасен, а поиск документов также невероятно быстр - он соответствует всем вышеперечисленным критериям и даже имеет пару дополнительных преимуществ, таких как автоматическое сохранение документов вместе с объектом, к которому они относятся, простой и быстрый поиск содержимого, устранение всевозможных действий пользователя, связанных с открытием и присвоением имен документам и т.д.и т.д.
Мой вопрос таков: есть ли какие-либо серьезные риски или вещи, которые я упустил из виду при таком проектировании и реализации?
РЕДАКТИРОВАТЬ Заметку:База данных - это PostgreSQL, она очень хорошо обрабатывает большие двоичные объекты и исключительно хорошо масштабируется.Среда является многопользовательской.
Решение
Когда ваша БД становится все больше и больше, ее резервное копирование будет сложнее. Восстановление резервной копии таблицы с более чем 100 ГБ данных - это не то, что вас радует.
Другое дело, что все функции управления таблицами становятся все медленнее и медленнее по мере роста набора данных.
Но это можно преодолеть, если ваша таблица данных будет содержать только 2 поля:
ID и BLOB.
Извлечение данных (по первичному ключу), вероятно, станет проблемой только после того, как вы ударите стену о резервное копирование набора данных.
Другие советы
Основной недостаток, который я часто слышу об использовании больших двоичных объектов, заключается в том, что файловая система выше определенного размера гораздо эффективнее для хранения и извлечения больших файлов. Похоже, вы уже учли это в своем списке требований.
Здесь есть хорошая ссылка (PDF) , в которой рассказывается о и минусы капель.
По моему опыту, некоторые проблемы были следующими:
<Ол>скорость по сравнению с наличием файлов в файловой системе.
Ограничения памяти. На моей последней работе у нас было 40 МБ PDF в базе данных, и мы продолжали получать Java OutOfMemoryErrors в файле журнала. В конце концов мы поняли, что весь 80-мегабайтный PDF-файл был прочитан в кучу не один раз, а ДВАЖДЫ благодаря настройке в Hibernate ORM (если объект является изменяемым, он создает копию для редактирования в памяти). После того, как PDF-файл был возвращен пользователю, куча была очищена, но было огромным ударом вытащить из памяти 80 МБ за один раз, просто для потоковой передачи документа. Знай свой код и как память используется!
Ваш веб-сервер должен быть в состоянии справиться с большинством ваших проблем безопасности, но если документы небольшого размера и БД еще не находится под большой нагрузкой, то я не вижу большой проблемы с их размещением в БД . р>
Я только начал изучать FILESTREAMing для больших двоичных объектов в SQL Server 2008 и столкнулся с ОГРОМНЫМ ограничением (IMO) - оно работает только с интегрированной защитой. Если вы не используете проверку подлинности Windows для подключения к серверу БД, вы не сможете читать / записывать большие двоичные объекты. Многие прикладные среды не могут использовать проверку подлинности Windows. Конечно, не в разнородных средах.
Лучшее решение для хранения больших двоичных объектов должно существовать. Каковы лучшие практики?
Это зависит от типа базы данных. Oracle или SQLServer? Помните об одном недостатке - восстановлении одного документа.
Извините - ответ, который я предложил, был основан на SQL Server, поэтому часть обслуживания не подходит.Но файловый ввод-вывод выполняется на аппаратном уровне, и любая база данных добавляет дополнительные этапы обработки.
База данных будет налагать дополнительные накладные расходы при извлечении документа.Когда файл находится на диске, вы выполняете операции ввода-вывода так же медленно или с такой же скоростью, как и на сервере.Вы, конечно, должны управлять своей метой в базе данных, но в конце концов вы хотите UNC файла и указать пользователю на источник и уйти с дороги.
С точки зрения технического обслуживания и администрирования вы будете ограничиваться SAN при работе с MS SQL Server.Такие решения, как Documentum, используют другой подход с простым хранением данных на диске и позволяют вам реализовать решение для хранения данных по своему усмотрению.
Редактировать
Позвольте мне пояснить мое утверждение - с SQL Server у вас есть ограниченные возможности, когда вы превышаете физическую емкость хранилища box.На самом деле это одна из больших слабостей Sharepoint, заключающаяся в том, что вы не можете просто подключить любой тип сетевого хранилища.
Из того, что я имел опыт хранения файлов содержимого в виде больших двоичных объектов, как в SQL Server, так и в Oracle, все в порядке с небольшой базой данных и небольшим числом зарегистрированных пользователей. ECM система разделяет их и использует отдельные сервисы для потоковой передачи контента. В зависимости от размера файлов на ресурсы сервера можно влиять с одновременным извлечением больших файлов. Архив баз данных с большими наборами файлов становится проблематичным из-за времени на восстановление и невозможности получения документов из архива.
Если эти файлы являются корпоративными записями, а это официальная копия записей, у вас могут возникнуть проблемы с соблюдением требований и управления хранением, особенно если вы архивируете файлы. Кроме того, поиск и контроль версий могут стать серьезной проблемой в будущем.
Возможно, вы захотите исследовать систему ECM с каким-то API-интерфейсом, а не изобретать колесо.