Расширение Rbytea, внешнее хранение двоичных данных

Тип данных rbytea

Тип данных rbytea предназначен для хранения двоичных данных. Он аналогичен типу bytea, с той лишь разницей, что сами данные хранятся не в табличном пространстве базы, а во внешнем хранилище. В качестве внешнего хранилища в текущей версии QHB выступает файловая система. Это может быть смонтированный в определенную точку файловой системы сервера внешний том или символическая ссылка.

Основной целью расширения является вынос двоичных данных из таблиц базы данных в нетранзакционное хранилище, тем самым разгрузив базу данных (зачастую двоичные данные имеют большой объем, который занимает значительный процент от общего размера базы, усложняя администрирование и обслуживание).

Тип данных rbytea в записи базы данных оставляет только небольшой заголовок, в котором содержатся служебные поля и ссылка на файл во внешнем хранилище. В качестве ссылки используется тип данных uuid, а генерация случайных идентификаторов использует возможности модуля pgcrypto.

Данные во внешнем хранилище могут быть зашифрованы алгоритмом Кузнечик.


Установка расширения

Установка расширения производится командой CREATE EXTENSION:

CREATE EXTENSION rbytea CASCADE;

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

shared_preload_libraries = 'librbytea'

Описание параметров расширения приведены ниже в параграфе Параметры конфигурации расширения.


Функции для работы с типом rbytea

ИмяТип результатаОписание
uuid(col rbytea)uuidПолучить идентификатор данных
len(col rbytea)bigintПолучить длину данных в байтах
len_full(col rbytea)bigintПолучить длину в байтах данных с учетом выравнивания для зашифрования
qss_mode(col rbytea)bigintВозвращает признак зашифрования данных (1) или его отсутствия (0)
md5sum(col rbytea)textВозвращает md5 сумму данных
sha256sum(col rbytea)textВозвращает sha256 сумму данных
md5store(col rbytea)textВозвращает md5 сумму зашифрованных данных во внешнем хранилище
sha256store(col rbytea)textВозвращает sha256 сумму зашифрованных данных во внешнем хранилище
rvacuum()bigintВыполняет очистку устаревших данных в хранилище

Фоновый процесс очистки устаревших копий

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

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

Параметры запуска указаны в параграфе ниже.


Параметры конфигурации расширения

Для работы расширения нужно установить несколько параметров в конфигурационном файле (подробную информацию см. в подразделе Параметры конфигурации расширения Rbytea).