Хранение двоичных данных
Реквизиты, которые вы добавляете элементам проекта, могут быть предназначены для хранения двоичных данных: файлов документов, изображений, видео и т.д. Такие реквизиты имеют тип ДвоичныйОбъект.Ссылка.
Особенность двоичных данных заключается в том, что они, как правило, имеют большой размер, что может влиять на производительность приложения. По этой причине не хранит двоичные данные в тех же таблицах базы данных, что и остальные реквизиты. Для хранения двоичных данных использует специальные хранилища, которые должны быть заранее настроены администратором сервера. Непосредственно в реквизите хранится только ссылка на двоичные данные в этих хранилищах.
Хранилища двоичных данных
Сервер поддерживает два типа хранилищ:
- Файловое — данные хранятся в локальном или сетевом каталоге на диске;
- S3 — данные хранятся в сервисе, совместимом с Amazon S3, например:
- Yandex Object Storage;
- VK Cloud Solutions Storage;
- MinIO — локальный S3-сервер.
Сервер для каждого приложения стандартно создает одно локальное файловое хранилище двоичных данных. Для оптимизации ресурсов можно добавлять к серверу дополнительные хранилища и подключать их к приложениям.
Правила использования хранилища и свойства данных
Администратор для каждого хранилища описывает набор правил. Разработчик в своих алгоритмах загрузки двоичных данных задает свойства загружаемых данных. помещает двоичные данные в то хранилище, правилам которого удовлетворяют свойства двоичных данных (подробнее).
В процессе эксплуатации сервера администратор может менять набор хранилищ, может изменять их правила. После этого он может выполнить реорганизацию двоичных данных (вручную или по расписанию), при которой заново сопоставит свойства данных и правила хранилищ и переместит экземпляры двоичных данных в оптимальные хранилища.
Установка свойств двоичных данных
На сервере вы можете установить свойства двоичных данных непосредственно перед их загрузкой в хранилище. Например:
знч ВременныеФайлы = новый ДвоичныйОбъект.Свойства("temp")
.Временные()
знч РезервныеКопии = новый ДвоичныйОбъект.Свойства("backup")
.РедкийДоступ()
.Конфиденциальность(ДвоичныйОбъект.Конфиденциальность.Конфиденциальный)
.НадежностьХранилища(ДвоичныйОбъект.НадежностьХранилища.Средняя)
На клиенте перед загрузкой в хранилище установка свойств двоичных данных невозможна. Но после того, как данные загружены, вы можете перейти на сервер и изменить свойства уже загруженных данных.
Например, в переменной ДанныеСсылка вы имеете ссылку на загруженные двоичные данные (ДвоичныйОбъект.Ссылка):
знч ВременныеФайлы = новый ДвоичныйОбъект.Свойства("temp").Временные()
ДвоичныйОбъект.УстановитьСвойства(ДанныеСсылка, ВременныеФайлы)
Когда администратор сервера выполнит реорганизацию двоичных данных, ваши данные попадут в оптимальное хранилище.
Дедупликация двоичных данных
Для более эффективного расхода памяти в хранилищах двоичных данных обеспечивает дедупликацию двоичных данных: при загрузке экземпляра вычисляется его хеш-сумма, и если экземпляр с такой хеш-суммой уже есть в хранилище, то он будет задействован повторно.
Удаление двоичных данных
После загрузки в хранилище двоичные данные не могут быть изменены. Допускается только изменение прикладных свойств данных.
Удалить двоичные данные может только в результате сборки мусора. Она автоматически контролирует время жизни данных. Как только на двоичные данные не остается хранимых ссылок (ДвоичныйОбъект.Ссылка), удаляет такие двоичные данные. Удаление выполняется с помощью функции сборки мусора, которая выполняется на сервере (вручную или по расписанию).