Хранение документов в виде больших двоичных объектов в базе данных - есть какие-либо недостатки?

StackOverflow https://stackoverflow.com/questions/211895

Вопрос

Требования к моей системе управления документами были следующими:

  1. Должен быть защищен от кражи простым копированием каталогов, файлов и т.д.
  2. Должен быть защищен от традиционного вирусного заражения (заражение физического файла).
  3. Должно быть, быстро извлекается
  4. Репозиторий не должен быть виден случайным пользователям (просматривающим каталоги) и т.д.

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

Мой вопрос таков: есть ли какие-либо серьезные риски или вещи, которые я упустил из виду при таком проектировании и реализации?

РЕДАКТИРОВАТЬ Заметку:База данных - это PostgreSQL, она очень хорошо обрабатывает большие двоичные объекты и исключительно хорошо масштабируется.Среда является многопользовательской.

Это было полезно?

Решение

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

Другое дело, что все функции управления таблицами становятся все медленнее и медленнее по мере роста набора данных.
Но это можно преодолеть, если ваша таблица данных будет содержать только 2 поля:  ID и BLOB.

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

Другие советы

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

Здесь есть хорошая ссылка (PDF) , в которой рассказывается о и минусы капель.

По моему опыту, некоторые проблемы были следующими:

<Ол>
  • скорость по сравнению с наличием файлов в файловой системе.

  • Кэширование <р>. ИМО веб-сервер будет лучше кешировать статическое содержимое. БД сделает тоже хорошая работа, но если БД тоже передать все виды других запросов, не ожидайте этих больших документов чтобы оставаться в кэше надолго. Вы по сути, должны передать файлы дважды. Однажды из БД в Веб-сервер, а затем веб-сервер для клиент.

  • Ограничения памяти. На моей последней работе у нас было 40 МБ PDF в базе данных, и мы продолжали получать Java OutOfMemoryErrors в файле журнала. В конце концов мы поняли, что весь 80-мегабайтный PDF-файл был прочитан в кучу не один раз, а ДВАЖДЫ благодаря настройке в Hibernate ORM (если объект является изменяемым, он создает копию для редактирования в памяти). После того, как PDF-файл был возвращен пользователю, куча была очищена, но было огромным ударом вытащить из памяти 80 МБ за один раз, просто для потоковой передачи документа. Знай свой код и как память используется!

  • Ваш веб-сервер должен быть в состоянии справиться с большинством ваших проблем безопасности, но если документы небольшого размера и БД еще не находится под большой нагрузкой, то я не вижу большой проблемы с их размещением в БД .

    Я только начал изучать FILESTREAMing для больших двоичных объектов в SQL Server 2008 и столкнулся с ОГРОМНЫМ ограничением (IMO) - оно работает только с интегрированной защитой. Если вы не используете проверку подлинности Windows для подключения к серверу БД, вы не сможете читать / записывать большие двоичные объекты. Многие прикладные среды не могут использовать проверку подлинности Windows. Конечно, не в разнородных средах.

    Лучшее решение для хранения больших двоичных объектов должно существовать. Каковы лучшие практики?

    В этой статье большинство вопросов. Если вы используете SQL Server 2008, проверьте использование нового типа FILESTREAM, как обсуждал Пол Рэндал здесь .

    Это зависит от типа базы данных. Oracle или SQLServer? Помните об одном недостатке - восстановлении одного документа.

    Извините - ответ, который я предложил, был основан на SQL Server, поэтому часть обслуживания не подходит.Но файловый ввод-вывод выполняется на аппаратном уровне, и любая база данных добавляет дополнительные этапы обработки.

    База данных будет налагать дополнительные накладные расходы при извлечении документа.Когда файл находится на диске, вы выполняете операции ввода-вывода так же медленно или с такой же скоростью, как и на сервере.Вы, конечно, должны управлять своей метой в базе данных, но в конце концов вы хотите UNC файла и указать пользователю на источник и уйти с дороги.

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

    Редактировать

    Позвольте мне пояснить мое утверждение - с SQL Server у вас есть ограниченные возможности, когда вы превышаете физическую емкость хранилища box.На самом деле это одна из больших слабостей Sharepoint, заключающаяся в том, что вы не можете просто подключить любой тип сетевого хранилища.

    Из того, что я имел опыт хранения файлов содержимого в виде больших двоичных объектов, как в SQL Server, так и в Oracle, все в порядке с небольшой базой данных и небольшим числом зарегистрированных пользователей. ECM система разделяет их и использует отдельные сервисы для потоковой передачи контента. В зависимости от размера файлов на ресурсы сервера можно влиять с одновременным извлечением больших файлов. Архив баз данных с большими наборами файлов становится проблематичным из-за времени на восстановление и невозможности получения документов из архива.

    Если эти файлы являются корпоративными записями, а это официальная копия записей, у вас могут возникнуть проблемы с соблюдением требований и управления хранением, особенно если вы архивируете файлы. Кроме того, поиск и контроль версий могут стать серьезной проблемой в будущем.

    Возможно, вы захотите исследовать систему ECM с каким-то API-интерфейсом, а не изобретать колесо.

    Лицензировано под: CC-BY-SA с атрибуция
    Не связан с StackOverflow
    scroll top