Объекты

В разделе описаны основные типы объектов системы YTsaurus. Представлена таблица с ключевыми атрибутами каждого объекта и описано понятие идентификатора объекта.

Типы объектов

Основные типы объектов в YTsaurus:

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

Для любого узла Кипариса может присутствовать несколько версий, поскольку в контексте каждой транзакции состояние узла может выглядеть по-разному.

Файлы

Это узлы Кипариса, имеющие тип file и предназначенные для хранения больших бинарных данных в системе.
Файлы состоят из множества чанков — являются владельцами чанков.
Чанки организованы в виде специальной древовидной структуры данных, в которой листьями являются чанки, а промежуточными вершинами — чанк-листы.

Подробнее можно прочитать в разделе Файлы.

Таблицы

Это узлы типа table, предназначенные для хранения больших пользовательских данных. Таблицы бывают двух типов: Статические и Динамические. Логически таблица представляет из себя последовательность строк. Каждая строка состоит из колонок.
Значения колонок типизированы и могут содержать произвольные структурированные данные, поддерживаемые языком YSON.

Ссылки представляют собой узлы типа link, ссылающиеся на другие объекты по пути, указанному при создании объекта.
Все обращения к узлу-ссылке автоматически переадресуются к целевому объекту.
Подробнее можно прочитать в разделе Ссылки.

YSON-документы

YSON-документ — это узел Кипариса, имеющий тип document и предназначенный для хранения произвольных YSON-структур.

Поддерживаются запросы и модификации внутри документа. Адресация внутри документа осуществляется с помощью языка YPath.

Подробнее можно прочитать в разделе YSON-документы.

Подробнее про формат YSON можно прочитать в разделе YSON.

Примитивные типы

Узел Кипариса может содержать значение примитивного типа: строку, число, словарь, список. В таблице представлено описание примитивных типов узлов Кипариса.

Имя типа Описание
string_node Узел Кипариса, содержащий строку
int64_node Узел Кипариса, содержащий целое знаковое число
uint64_node Узел Кипариса, содержащий целое беззнаковое число
double_node Узел Кипариса, содержащий вещественное число
map_node Словарь в Кипарисе (ключи — строки, значения — другие узлы). Если проводить аналогию с файловой системой, то это каталог
list_node Устаревшее, в качестве альтернативы предлагается использовать document. Упорядоченный список в Кипарисе (значения — другие узлы)
boolean_node Узел кипариса, содержащий булево значение

Системные объекты

Кроме перечисленных выше объектов, существуют внутренние объекты: транзакции, чанки, аккаунты, пользователи и группы. Такие объекты не версионируются.
Системные объекты перечислены в таблице:

Имя объекта Описание
transaction Транзакция
chunk Чанк
chunk_list Чанклист
erasure_chunk Erasure-chunk
account Аккаунт
user Пользователь
group Группа

Идентификаторы объектов

Каждый объект имеет уникальный идентификатор, представляющий собой 128-битное число, по формату совпадающее с GUID. Это число можно представить в виде четырех 32-битных чисел: a-b-c-d. Обычно при печати идентификатора компоненты a, b, c и d записываются в шестнадцатеричном виде. Каждая из этих компонент имеет свой смысл, описание приведено в таблице.

Компонент Назначение
a Номер эпохи, в которой был создан данный объект
b Номер мутации в пределах эпохи, на которой был создан данный объект
c[16..31] Идентификатор группы мастеров (cell id), представляет собой уникальное 16-битное число, однозначно определяющее кластер. Данный идентификатор можно найти в веб-интерфейсе кластера напротив мастер-серверов
c[0..15] Тип объекта
d Хеш, представляет собой псевдоуникальное случайное число, выбираемое в момент создания объекта.

Таким образом, идентификатор объекта зависит от кластера, на котором создан данный объект, а также от момента времени (в смысле номеров мутаций), когда объект был создан. В пределах одной мутации может быть создано более одного объекта, тогда они будут отличаться значением хеша. Это различие гарантируется механизмом порождения хешей. Пример идентификатора: 28bb5-75b04b-3fe012f-8b4eda94.

Атрибуты объектов

Все объекты системы имеют атрибуты, представленные в таблице:

Атрибут Тип Значение
id string Идентификатор объекта
type string Тип объекта
ref_counter integer Количество сильных ссылок на объект
supported_permissions array<string> Список поддерживаемых прав доступа
effective_acl Acl Эффективный ACL объекта

У некоторых объектов системы есть дополнительные атрибуты: inherit_acl, acl и owner, влияющие на доступ к данному объекту. Эти атрибуты носят название дескриптор управления доступом (ACD, access control descriptor). Подробно про ACD в разделе Управление доступом.

Счетчики ссылок

Для отслеживания времени жизни объекта используются счетчики ссылок. Объект живет в системе до тех пор, пока на него есть сильные ссылки. Количество последних можно узнать из атрибута ref_counter. Как только это число становится равным нулю, объект превращается в зомби и подлежит удалению. Это удаление производится не мгновенно, вместо этого есть специальная очередь на удаление (GC queue), из которой зомби забираются порциями контролируемого размера и разрушаются. Размер задается внутренними конфигурационными параметрами системы. После того, как объект стал зомби, обратиться к нему уже нельзя, даже явно построив путь по идентификатору.

Предыдущая