Расширение 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).