Хранение двоичных данных

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

Особенность двоичных данных заключается в том, что они, как правило, имеют большой размер, что может влиять на производительность приложения. По этой причине «1С:Шина» не хранит двоичные данные в тех же таблицах базы данных, что и остальные реквизиты. Для хранения двоичных данных «1С:Шина» использует специальные хранилища, которые должны быть заранее настроены администратором сервера. Непосредственно в реквизите хранится только ссылка на двоичные данные в этих хранилищах.

Хранилища двоичных данных

Сервер поддерживает два типа хранилищ:

  • Файловое — данные хранятся в локальном или сетевом каталоге на диске;
  • S3 — данные хранятся в сервисе, совместимом с Amazon S3, например:

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

Примечание: Чтобы облегчить просмотр всех хранилищ, в списке Инфраструктура > Объектные хранилища все стандартные файловые хранилища, созданные «1С:Шиной» для каждого приложения, отображаются в виде одной обобщенной строки.

Правила использования хранилища и свойства данных

Администратор для каждого хранилища описывает набор правил. Разработчик в своих алгоритмах загрузки двоичных данных задает свойства загружаемых данных. «1С:Шина» помещает двоичные данные в то хранилище, правилам которого удовлетворяют свойства двоичных данных (подробнее).

В процессе эксплуатации сервера администратор может менять набор хранилищ, может изменять их правила. После этого он может выполнить реорганизацию двоичных данных (вручную или по расписанию), при которой «1С:Шина» заново сопоставит свойства данных и правила хранилищ и переместит экземпляры двоичных данных в оптимальные хранилища.

Установка свойств двоичных данных

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

знч ВременныеФайлы = новый ДвоичныйОбъект.Свойства("temp")
                                         .Временные()
 
знч РезервныеКопии = новый ДвоичныйОбъект.Свойства("backup")
                                         .РедкийДоступ()
                                         .Конфиденциальность(ДвоичныйОбъект.Конфиденциальность.Конфиденциальные)
                                         .НадежностьХранилища(ДвоичныйОбъект.НадежностьХранилища.Средняя)

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

Например, в переменной ДанныеСсылка вы имеете ссылку на загруженные двоичные данные (ДвоичныйОбъект.Ссылка):

знч ВременныеФайлы = новый ДвоичныйОбъект.Свойства("temp").Временные()
ДвоичныйОбъект.УстановитьСвойства(ДанныеСсылка, ВременныеФайлы) 

Когда администратор сервера выполнит реорганизацию двоичных данных, ваши данные попадут в оптимальное хранилище.

Дедупликация двоичных данных

Для более эффективного расхода памяти в хранилищах двоичных данных, «1С:Шина» обеспечивает дедупликацию двоичных данных: при загрузке экземпляра вычисляется его хеш-сумма, и если экземпляр с такой хеш-суммой уже есть в хранилище, то он будет задействован повторно.

Удаление двоичных данных

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

Удалить двоичные данные может только «1С:Шина» в результате сборки мусора. Она автоматически контролирует время жизни данных. Как только на двоичные данные не остается хранимых ссылок (ДвоичныйОбъект.Ссылка), «1С:Шина» удаляет такие двоичные данные. Удаление выполняется с помощью функции сборки мусора, которая выполняется на сервере (вручную или по расписанию).