Системные спейсы
Системные спейсы – это внутренние служебные спейсы Tarantool DB, которые хранят метаинформацию о конфигурации кластера,
существующих спейсах и индексах, пользователях, правах доступа, а также настройках репликации и шардирования.
В отличие от названий пользовательских спейсов, названия системных спейсов начинаются с символа подчёркивания, например
_space.
Каждый системный спейс имеет одноимённое представление (system space view) с префиксом _v, например, _vspace для _space.
Представление системного спейса – это копия системного спейса с доступом только для чтения.
Представления показывают только те кортежи, на чтение которых у текущего пользователя есть права, в то время как
сами системные спейсы содержат все кортежи без фильтрации.
В Tarantool DB все вызовы модулей CRUD и vshard выполняются от имени пользователя, который их инициировал.
Когда пользователь выполняет через роутер метод CRUD (например, crud.get() или crud.replace()), роутер проксирует запрос на экземпляры хранилища.
На стороне хранилища этот запрос выполняется от имени того же пользователя.
Для обработки запроса на хранилище модулям CRUD и vshard необходим доступ к следующим системным спейсам:
-
_bucket– модульvshardобращается к этому спейсу для определения принадлежности сегмента к текущему экземпляру. Например, при выполненииcrud.get()роутер определяет, на каком хранилище находятся данные, хранилище проверяет, что сегмент ему принадлежит. Доступ к_bucketтакже требуется при ребалансировке сегментов; -
_cooler– модульcoolerиспользует этот спейс для хранения метаданных о настроенных задачах архивации. Если в кластере используется архивация данных через модульcooler, пользователю необходим доступ на чтение к этому спейсу; -
_ddl_sharding_key– модуль CRUD использует этот спейс для получения информации о ключах шардирования спейсов. Доступ необходим для корректной маршрутизации запросов между роутерами и узлами хранилища.
Без доступа к перечисленным спейсам на экземплярах хранилища пользователь получит ошибку вида:
Read access to space '_space_name' is denied for user 'username'
К системным спейсам в Tarantool DB относятся:
_bucket– карта сегментов (bucket map), используемая встроенным модулем шардированияvshard;_ck_constraint– проверочные ограничения (check constraints). Проверочные ограничения – это ограничения на значения определенных полей или целых кортежей, которые задаются пользователем (например, невозможность задать для поляageотрицательное число). Информация про проверочные ограничения приведена в документации платформы Tarantool, в разделе Ограничения;_cluster– список наборов реплик;_collation– список видов сортировки;_cooler– метаданные архивации данных. Доступно с версии TDB 3.0.0. Спейс используется встроенным модулем cooler;_ddl_sharding_func– список функций шардирования. Спейс используется встроенным модулемvshard;_ddl_sharding_key– список ключей шардирования спейсов (полей, по которым нужно шардировать спейс). Спейс используется встроенным модулемvshard;_func– список функций, созданных с помощьюbox.schema.func.create(). Представление_vfuncпоказывает только функции, доступные текущему пользователю;_index– список всех индексов. Представление_vindexпоказывает только индексы, доступные текущему пользователю;_priv– список прав доступа. Представление_vprivпоказывает только права, доступные текущему пользователю;_schema– информация о схеме данных экземпляра;_sequence– список последовательностей. Спейс содержит персистентную информацию, определенную с помощьюbox.schema.sequence.create()илиsequence_object:alter(). Спейсу соответствует представление_vsequence;_sequence_data– текущие значения последовательностей;_session_settings– настройки текущего сеанса;_space– список всех спейсов, включая пользовательские и системные. Представление_vspaceпоказывает только спейсы, доступные текущему пользователю;_space_sequence– связи между спейсами и последовательностями. Представление_vspace_sequenceпоказывает только связи, доступные текущему пользователю;_user– список пользователей, ролей и хэшей паролей. Представление_vuserпоказывает только пользователей, доступных текущему пользователю.