Хранилище документов
Предупреждение: Не путать хранение документов с документооборотом.
В области документохранения ничего нового, но и нет революционных подвижек. Остальные решения просто факт агрессивной политики продажников и маркетологов. Проблема в разноформатности документов и необходимости того или иного функционала для разных организаций. Что вытекает либо в узкоспециализированные решения, либо в огромные комбайны с ценой мирового запаса ресурсов.
Но есть общие требования к системам такого типа:
- хранение в виде файлов;
- хранение версий файлов;
- поддержка описания для документа;
- поддержка меток (тегов) для быстрого поиска;
- дедупликация;
- поиск по документам (файлам) и их версиям;
- поддержка классификатора;
- поддержка прав доступа (ACL);
- при необходимости поддержка электронной цифровой подписи (ЭЦП)
При написании подобных систем нужно учитывать некоторый опыт реализации:
- не хранить все файлы в одном каталоге. Большое количество файлов отрицательно влияет на производительность при проведении файловых операций, например при архивировании хранилища. Рекомендуется хранить в виде дерева поддиректорий (не более 1000-4000 вложений подкаталогов каждого уровня);
- не хранить файлы в виде оригинальных имён. Это может поставить проблему множественного дублирования одного и того же файла, но с разными названиями. Рекомендуется хранение с условным именем. Например в виде хеш суммы md5 или sha256. Имена файлов можно задать в отдельной реляционной базе данных (БД) в виде пар хеш имени файла - список имен документа;
- не организовывать хранение поддокументов большого документа в виде иерархической организации подкаталогов. Иерархию можно организовать в реляционной БД, которая будет более производительна;
- текстовые, гиппертекстовые и другие виды документов лучше хранить непосредственно в БД. Это повысит скорость при поиске.
Большинство систем хранения документов реализовано только в виде обычного файлового хранилища. Разработчики считают, что рабочий процесс (workflow) движения документов гораздо важнее организации хранения, что в свою очередь приводит к проблемам, в том числе и с замедлением работы с хранилищем. Некоторые даже рекомендуют использовать обычные системы контроля версий VCS (git, mercurial и др), но это решение подходит скорее только к однопользовательским решениям.
Не путаем, а делаем софт для управления и традиционным и электронным документооборотом.