Файловое хранилище

Общие принципы

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

Предполагается, что работа с блоб полем осуществляется внутри транзакции. При этом не нарушается целостность транзакции.

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

Настройки файлового хранилища

blob-saver:
  # path to file storage
  file-storage-path: path-to-storage
  # use temp folder as file storage
  temp-storage: true
  # saving blob in db or only in file storage
  persist-in-db: true

Структура таблицы файлового хранилища

CREATE TABLE FileStorage
(
    /** unique identifier */
    uid         VARCHAR(40) NOT NULL,
    /** file hash */
    file_hash   VARCHAR(50) NOT NULL,
    /** file create date */
    create_date DATETIME    NOT NULL DEFAULT GETDATE(),
    /** file update date */
    update_date DATETIME,
    /** blob column to save data in db */
    data        BLOB,

    CONSTRAINT PK_FileStorage PRIMARY KEY (uid)
);

Методы работы с хранилищем

// Sqve data stream to storage
String save(CallContext context, InputStream data);

// Read data from storage
byte[] read(CallContext context, String uid);

// Update data in storage
void update(CallContext context, String uid, InputStream data);

// Delete
void delete(CallContext context, String uid);