Хранение бинарных данных файлов
Файл, хранящийся в системе Docsvision, состоит из двух частей: атрибуты файла и его содержимое.
Атрибуты файла (название, дата создание и редактирования, штамп времени и др.) хранятся в таблице [dvsys_files] базы данных Docsvision. Здесь же содержится ссылка (поле dvsys_files.BinaryID
) на бинарные данные файла.
При работе на нескольких серверах с использованием переменных окружения в настройках хранилищ могут возникать ошибки, связанные с превышением длины имени временных файлов. |
Бинарные данные файла могут храниться в БД Docsvision ("встроенное хранилище") или быть вынесены во внешнее хранилище. В зависимости от способа размещения данных, в таблице [dvsys_binaries] будут содержаться сами данные (поле dvsys_binaries.Data
) или ссылка на размещение данных во внешнем хранилище:
-
dvsys_binaries.StorageID
— тип внешнего хранилища (для встроенного хранилища — нулевой ИД). -
dvsys_binaries.Path
— путь или другой уникальный адрес бинарных данных во внешнем хранилище.

Тип хранилища для бинарных данных выбирается системой Docsvision в соответствии с правилами помещения в хранилища при сохранении файла (при добавлении и изменении).
Основные параметры хранилища содержатся в таблице dvsys_binary_storages: название, макс. размер, разделы и состояние. Настройки хранилища (например, путь хранилища на ФС) хранятся в таблице dvsys_objects.
Алгоритм выбора хранилища
-
Если файл с состоянием вытеснен в офлайн — выбирается группа хранилищ по умолчанию для вытесненных в офлайн файлов. Из группы выбирается первое хранилище с разделом Основной. Алгоритм завершает работу.
-
Из списка правил помещения в хранилища выбирается первое правило, которому удовлетворяет сохраняемый файл.
-
Если в списке есть подходящее правило — выбирается группа хранилищ, указанная в данном правиле.
-
Если в списке нет подходящего правила — выбирается группа хранилищ по умолчанию для файлов с оперативным состоянием текущего файла (основной, архивный, временный). Из группы выбирается первое хранилище с разделом, соответствующим оперативному состоянию. Алгоритм завершает работу.
-
Из группы хранилищ выбирается подходящее хранилище:
-
Оставляются только хранилища с разделом, соответствующим оперативному состоянию файла.
-
Оставляются только активные хранилища.
-
Выбирается первое хранилище с помощью установленного для группы режима выбора.
-
Если подходящих хранилищ не найдено — аналогично 4.

Отложенное выполнение операций с хранилищем
В Docsvision используется асинхронное выполнение операций удаления и перемещения (между хранилищами) бинарных данных файла. Например, при удалении карточки, содержащей файл, бинарные данные файла будут удалены не сразу, а в течении установленного промежутка времени.
Ниже приведено описание алгоритма асинхронного удаления данных файла из хранилища после удаления карточки с файлом.
-
Периодически выполняется SQL-задача
DV:Binary_Название-БД_FillQueue_DeleteBinary
(хранимая процедураdvsys_binary_queue_fill_to_delete_outer_storage
), которая помещает операцию удаления данных файла в очередьdvsys_queue_object
. Статус операции (State
) при помещении в очередь —0
. -
Если файл размещен вне БД Docsvision, удаление выполняется службой Docsvision 5.5 File Service:
-
Вызывается хранимая процедура
dvsys_binary_queue_get_to_delete_outer_storage
, которая возвращает список файлов для удаления из очередиdvsys_queue_object
. При этомState
обработанных задач выставляется в1
.За один раз из очереди
dvsys_queue_object
выбирается не больше100
элементов. Значение может быть изменено с помощью параметраQueuePartSize
— устанавливается требуемое количество элементов — в таблице dvsys_settings в БД Docsvision. -
Выполняется фактическое удаление бинарных данных (например, удаляется файл с диска).
-
Вызывается хранимая процедура
dvsys_binary_queue_confirm_delete_in_outer_storage
, которая удаляет обработанную операцию из очередиdvsys_queue_object
.Интервал выполнения операции удаления —
1
минута. Значение может быть изменено с помощью параметраFileRemoveInterval
— значение в секундах — в таблице dvsys_settings в БД Docsvision. -
Если файл размещен в БД Docsvision, удаление выполняется периодически выполняемой SQL-задачей
DV:Binary_DocsvisionDB4_DeleteBinaryInner
(хранимая процедураdvsys_binary_delete_inner
). Данная служба удаляет записи из dvsys_binaries, а также обработанную операцию из очередиdvsys_queue_object
.Аналогичный алгоритм для перемещения бинарных данных файла при изменении файла или его архивировании/разархивировании.
-
При выполнении операции с файлом, требующей перемещения его бинарных данных, в очередь
dvsys_queue_object
добавляется операция перемещения. Статус операции (State
) при помещении в очередь —0
. -
Перемещение выполняется службой Docsvision 5.5 File Service:
-
Вызывается хранимая процедура
dvsys_file_move_in_other_storage_get_next
, которая возвращает список файлов для удаления из очередиdvsys_queue_object
. При этомState
обработанных задач выставляется в1
. -
Если файл перемещается из встроенного хранилища (БД Docsvision) во встроенное хранилище, хранимая процедура
dvsys_file_move_in_other_storage_get_next
самостоятельно перемещает файл в архивное хранилище (dvsys_binaries_archive
).
-
-
В остальных случаях бинарные данные файла копируются в новое хранилище.
-
Вызывается хранимая процедура
dvsys_file_move_in_other_storage_confirm
, которая обновляет информацию о размещении бинарных данных файла.За один раз из очереди
dvsys_queue_object
выбирается не больше1000
элементов.Интервал выполнения операции перемещения —
1
минута. Значение может быть изменено с помощью параметраFileMoveInterval
в таблице dvsys_settings в БД Docsvision, значение в секундах.
-