Хранение бинарных данных файлов

Файл, хранящийся в системе Docsvision, состоит из двух частей: атрибуты файла и его содержимое.

Атрибуты файла (название, дата создание и редактирования, штамп времени и др.) хранятся в таблице [dvsys_files] базы данных Docsvision. Здесь же содержится ссылка (поле dvsys_files.BinaryID) на бинарные данные файла.

Бинарные данные файла могут храниться в БД Docsvision ("встроенное хранилище") или быть вынесены во внешнее хранилище. В зависимости от способа размещения данных, в таблице [dvsys_binaries] будут содержаться сами данные (поле dvsys_binaries.Data) или ссылка на размещение данных во внешнем хранилище:

  • dvsys_binaries.StorageID — тип внешнего хранилища (для встроенного хранилища — нулевой ИД).

  • dvsys_binaries.Path — путь или другой уникальный адрес бинарных данных во внешнем хранилище.

Хранение бинарных данных файлов в БД Docsvision
Рисунок 1. Хранение бинарных данных файлов в БД Docsvision

Тип хранилища для бинарных данных выбирается системой Docsvision в соответствии с правилами помещения в хранилища при сохранении файла (при добавлении и изменении).

Основные параметры хранилища содержатся в таблице dvsys_binary_storages: название, макс. размер, разделы и состояние. Настройки хранилища (например, путь хранилища на ФС) хранятся в таблице dvsys_objects.

Особенность работы с данными файла:

Между информационной и бинарной частью файла устанавливается связь один ко многим — несколько информационных частей могут ссылаться на одни бинарные данные. После изменения содержимого файла оригинал и копия станут ссылаться на собственный (уникальный) экземпляр бинарных данных.

Алгоритм выбора хранилища

  1. Если файл с состоянием вытеснен в офлайн — выбирается группа хранилищ по умолчанию для вытесненных в офлайн файлов. Из группы выбирается первое хранилище с разделом Основной. Алгоритм завершает работу.

  2. Из списка правил помещения в хранилища выбирается первое правило, которому удовлетворяет сохраняемый файл.

  3. Если в списке есть подходящее правило — выбирается группа хранилищ, указанная в данном правиле.

  4. Если в списке нет подходящего правила — выбирается группа хранилищ по умолчанию для файлов с оперативным состоянием текущего файла (основной, архивный, временный). Из группы выбирается первое хранилище с разделом, соответствующим оперативному состоянию. Алгоритм завершает работу.

  5. Из группы хранилищ выбирается подходящее хранилище:

  6. Оставляются только хранилища с разделом, соответствующим оперативному состоянию файла.

  7. Оставляются только активные хранилища.

  8. Выбирается первое хранилище с помощью установленного для группы режима выбора.

  9. Если подходящих хранилищ не найдено — аналогично 4.

Алгоритм выбора хранилища
Рисунок 2. Алгоритм выбора хранилища

Отложенное выполнение операций с хранилищем

В Docsvision используется асинхронное выполнение операций удаления и перемещения (между хранилищами) бинарных данных файла. Например, при удалении карточки, содержащей файл, бинарные данные файла будут удалены не сразу, а в течении установленного промежутка времени.

Ниже приведено описание алгоритма асинхронного удаления данных файла из хранилища после удаления карточки с файлом.

  1. Периодически выполняется SQL-задача DV:Binary_Название-БД_FillQueue_DeleteBinary (хранимая процедура dvsys_binary_queue_fill_to_delete_outer_storage), которая помещает операцию удаления данных файла в очередь dvsys_queue_object. Статус операции (State) при помещении в очередь — 0.

  2. Если файл размещен вне БД Docsvision, удаление выполняется службой Docsvision 5.5 File Service:

  3. Вызывается хранимая процедура dvsys_binary_queue_get_to_delete_outer_storage, которая возвращает список файлов для удаления из очереди dvsys_queue_object. При этом State обработанных задач выставляется в 1.

    За один раз из очереди dvsys_queue_object выбирается не больше 100 элементов. Значение может быть изменено с помощью параметра QueuePartSize — устанавливается требуемое количество элементов — в таблице dvsys_settings в БД Docsvision.

  4. Выполняется фактическое удаление бинарных данных (например, удаляется файл с диска).

  5. Вызывается хранимая процедура dvsys_binary_queue_confirm_delete_in_outer_storage, которая удаляет обработанную операцию из очереди dvsys_queue_object.

    Интервал выполнения операции удаления — 1 минута. Значение может быть изменено с помощью параметра FileRemoveInterval — значение в секундах — в таблице dvsys_settings в БД Docsvision.

  6. Если файл размещен в БД Docsvision, удаление выполняется периодически выполняемой SQL-задачей DV:Binary_DocsvisionDB4_DeleteBinaryInner (хранимая процедура dvsys_binary_delete_inner). Данная служба удаляет записи из dvsys_binaries, а также обработанную операцию из очереди dvsys_queue_object.

    Аналогичный алгоритм для перемещения бинарных данных файла при изменении файла или его архивировании/разархивировании.

  7. При выполнении операции с файлом, требующей перемещения его бинарных данных, в очередь dvsys_queue_object добавляется операция перемещения. Статус операции (State) при помещении в очередь — 0.

  8. Перемещение выполняется службой Docsvision 5.5 File Service:

    1. Вызывается хранимая процедура dvsys_file_move_in_other_storage_get_next, которая возвращает список файлов для удаления из очереди dvsys_queue_object. При этом State обработанных задач выставляется в 1.

    2. Если файл перемещается из встроенного хранилища (БД Docsvision) во встроенное хранилище, хранимая процедура dvsys_file_move_in_other_storage_get_next самостоятельно перемещает файл в архивное хранилище (dvsys_binaries_archive).

  9. В остальных случаях бинарные данные файла копируются в новое хранилище.

    1. Вызывается хранимая процедура dvsys_file_move_in_other_storage_confirm, которая обновляет информацию о размещении бинарных данных файла.

      За один раз из очереди dvsys_queue_object выбирается не больше 1000 элементов.

      Интервал выполнения операции перемещения — 1 минута. Значение может быть изменено с помощью параметра FileMoveInterval в таблице dvsys_settings в БД Docsvision, значение в секундах.