Объекты
В разделе описаны основные типы объектов системы 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), из которой зомби забираются порциями контролируемого размера и разрушаются. Размер задается внутренними конфигурационными параметрами системы. После того, как объект стал зомби, обратиться к нему уже нельзя, даже явно построив путь по идентификатору.