---
metadata:
  - name: generator
    content: Diplodoc Platform v5.50.6
alternate:
  - https://ytsaurus.tech/docs/en/user-guide/dynamic-tables/concepts.md
  - https://ytsaurus.tech/docs/ru/user-guide/dynamic-tables/concepts.md
---
> **Documentation Index:** Fetch the complete configuration index at https://ytsaurus.tech/docs/ru/llms.txt

<!-- source: ru/_includes/user-guide/dynamic-tables/concepts.md -->
# Основные понятия

## Таблеты { #tablets }

Для каждой таблицы пространство ключей делится набором граничных ключей на непересекающиеся диапазоны — таблеты. Таблеты таблицы перечислены в атрибуте `tablets`. Каждый таблет описывается структурой `TabletInfo`:

| **Имя**  | **Тип**   | **Описание**   | **Обязательный** |
| -------- | --------- | -------------- | -----------------|
| tablet_id | Guid    | Id таблета   | Да |
| statistics | TabletStatistics | Статистика по таблету  | Да |
| state  | String   | Состояние (mounted/unmounted/frozen/mounting/unmounting/freezing/unfreezing/frozen_mounting)   | Да |
| pivot_key | List   | Граничный ключ, с которого начинается таблет (только для сортированных таблиц) | Да |
| cell_id | Guid   | ID селла, к которому примонтирован таблет  | Нет |

{% cut "Пример статистики по таблету" %}

```json
{
    "chunk_count" = 1;
    "compressed_data_size" = 324;
    "disk_space" = 2502;
    "disk_space_per_medium" = {
        "default" = 2502;
    };
    "dynamic_memory_pool_size" = 0;
    "hunk_compressed_data_size" = 0;
    "hunk_uncompressed_data_size" = 0;
    "memory_size" = 0;
    "overlapping_store_count" = 1;
    "partition_count" = 1;
    "preload_completed_store_count" = 0;
    "preload_failed_store_count" = 0;
    "preload_pending_store_count" = 0;
    "store_count" = 1;
    "tablet_count" = 1;
    "tablet_count_per_memory_mode" = {
        "none" = 1;
        "compressed" = 0;
        "uncompressed" = 0;
    };
    "uncompressed_data_size" = 538;
    "unmerged_row_count" = 2;
}
```

{% endcut %}

Каждый таблет логически состоит из набора отсортированных чанков с данными и специальной области в памяти, называемой `dynamic store`. Чанки хранятся реплицированным образом в [blob-хранилище](*blob-storage) и пересекаются по диапазонам ключей.  При записи данные попадают в `dynamic store` и накапливаются в нём. При достижении заданных в конфигурации размеров данные записываются на диск в виде чанка. Когда чанков в пределах таблетов становится достаточно много, часть из них объединяется — происходит компактификация. В этот момент может происходить удаление старых и неактуальных данных. Подробнее можно прочитать в разделе [Компактификация](https://ytsaurus.tech/docs/ru/user-guide/dynamic-tables/compaction.md).

Список всех таблетов всех динамических таблиц системы доступен по пути `//sys/tablets`.

## Граничные ключи { #keys }

Для изменения набора таблетов таблицы используется команда `reshard_table`. При изменении числа таблетов сортированных динамических таблиц необходимо указывать граничные ключи. Граничные ключи таблетов представляют собой произвольные последовательности значений, не обязательно совпадающие по длине с ключевыми колонками. 

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

Граничный ключ первого таблета таблицы всегда равен пустой последовательности — эффективная минус бесконечность — и не может быть изменен.

## Партиции { #partitions }

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

## Таблет-селлы { #tablet_cells }

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

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

Каждый таблет-селл принадлежит некоторому бандлу. Имя бандла, в котором создается селл, указано в атрибуте `tablet_cell_bundle` конкретной таблицы или одной из родительских директорий. По умолчанию таблет-селлы создаются в бандле `default`.

Список всех селлов доступен по пути `//sys/tablet_cells`. Каждый селл ведет журналы изменений (мутаций), а также периодически записывает снапшоты состояния. Журналы попадают в директорию `//sys/tablet_cells/<cell_id>/changelogs`, а снапшоты — в директорию `//sys/tablet_cells/<cell_id>/snapshots` в виде файлов.

Выбор конкретного узла кластера и свободного таблет-слота на этом узле для обслуживания таблет-селла производится мастер-сервером автоматически. Если узел кластера, обслуживающий селл, выходит из строя, через некоторое время мастер-сервер выберет свободный слот на другом узле и запустит селл на нём.

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

| **Имя**    | **Тип**    | **Описание**       |
| ---------- | ---------- | ------------------ |
| id | Guid | Id селла. |
| peers | Dict | Словарь, содержащий имя узла кластера, обслуживающего селл, а также статус селла. |
| tablet_cell_bundle | String | Имя таблет-селл бандла, которому принадлежит селл. |
| status | Dict | Состояние селла, флаг декомиссии. |
| total_statistics | Dict | Различные статистики по таблет-селлу. |

{% cut "Пример состояния селла" %}

```json
{
    "health" = "good";
    "decommissioned" = %false;
}
```

{% endcut %}

## Таблет-селл бандлы { #tablet_cell_bundles }

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

Бандлы идентифицируются строковыми именами. Множество имеющихся в системе бандлов доступно по пути `//sys/tablet_cell_bundles`. В системе всегда существует встроенный и неудаляемый бандл с именем `default`. Настройки бандла указываются в атрибуте `options` при создании, а также могут быть изменены позднее. Изменение настроек в атрибуте `options` требует отмонтирования всех таблиц бандла и повторного создания всех селлов.

У каждой таблицы, в том числе статической, есть атрибут `tablet_cell_bundle`, где хранится имя бандла, в селлы которого будет смонтирована данная таблица. Подробнее о монтировании можно прочитать в разделе [Монтирование](https://ytsaurus.tech/docs/ru/user-guide/dynamic-tables/operations.md#mount_table) таблиц.

У каждого бандла есть атрибут `node_tag_filter`, который используется для выбора узлов кластера под таблет-селлы из данного бандла. Фильтр представляет собой логическое выражение с операторами `&` — логическое "и", `|` — логическое "или", `!` — логическое "не" и круглыми скобками. 
Например, `foo | (bar & !baz)`.
Переменными в выражении являются возможные значения тегов. Если у узла кластера есть указанный тег, то переменная в формуле принимает значение `истина`, если нет — `ложь`. Таблет-селлы будут попадать только на те узлы кластера, для которых выражение целиком принимает значение `истина`.

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

| **Имя**    | **Тип**    | **Описание**       |
| ------------------- | ------------------- | -------------------------------------- |
| name    | String   | Имя бандла.        |
| options   | TabletCellOptions | Настройки всех таблетов данного бандла. |
| tablet_cell_count | Int    | Число селлов в бандле.     |
| tablet_cell_ids[*](**) | Guid    | Идентификаторы селлов в бандле.   |

Состояние бандла, состояние таблет-селлов и список узлов кластера, входящих в бандл отображается на вкладке Tablet cells.
<!-- endsource: ru/_includes/user-guide/dynamic-tables/concepts.md -->

[**]: Параметр встречается в ответе несколько раз.

[*blob-storage]: Хранилище больших объёмов неструктурированных данных.