Yandex.Cloud
  • Сервисы
  • Почему Yandex.Cloud
  • Сообщество
  • Решения
  • Тарифы
  • Документация
  • Связаться с нами
Подключиться
Yandex Database
  • Начало работы
    • Обзор
    • Создание базы данных
    • YQL
      • Работа с данными
      • Работа с YDB CLI
      • Работа с YDB SDK
    • Document API
      • Работа с данными
      • Работа с инструментами AWS
        • Настройка окружения
  • Пошаговые инструкции
    • Работа с YDB CLI
      • Структура и описание команд YDB CLI
      • Получение информации об объекте схемы
      • Потоковое чтение таблицы
      • Работа со вторичными индексами
    • Использование плана запроса и AST
    • Управление базами данных
    • Подключение к базе данных
    • Управление таблицами
    • Чтение и запись данных
    • Работа со вторичными индексами
  • Работа с SDK
  • Концепции
    • Обзор
    • Модель данных и схема
    • Режимы работы Serverless и Dedicated
    • Типы данных
    • Транзакции
    • Вторичные индексы
    • Time to Live (TTL)
    • Термины и определения
    • Квоты и лимиты
  • Управление доступом
  • Правила тарификации
    • Обзор
    • Бессерверный режим
    • Режим с выделенными инстансами
  • Рекомендации
    • Проектирование схемы
    • Партицирование таблиц
    • Вторичные индексы
    • Постраничный вывод
    • Загрузка больших объемов данных
    • Использование таймаутов
  • YDB API и справочник
    • Ограничения базы данных
    • Обработка ошибок в API
  • HTTP API, совместимый с Amazon DynamoDB
    • Справочник API
      • Все методы
      • Actions
        • BatchGetItem
        • BatchWriteItem
        • CreateTable
        • DeleteItem
        • DeleteTable
        • DescribeTable
        • GetItem
        • ListTables
        • PutItem
        • Query
        • Scan
        • TransactGetItems
        • TransactWriteItems
        • UpdateItem
      • Общие ошибки
  • Справочник YQL
    • Обзор
    • Типы данных
      • Простые
      • Опциональные
      • Контейнеры
      • Специальные
    • Синтаксис
      • Неподдерживаемые конструкции
      • Работа с текстовым представлением типов данных
      • Выражения
      • CREATE TABLE
      • DROP TABLE
      • INSERT INTO
      • UPSERT INTO
      • REPLACE INTO
      • UPDATE
      • DELETE
      • SELECT
      • GROUP BY
      • JOIN
      • FLATTEN
      • ACTION
      • DISCARD
      • PRAGMA
      • DECLARE
      • OVER, PARTITION BY и WINDOW
    • Встроенные функции
      • Базовые
      • Агрегатные
      • Оконные
      • Для работы со списками
      • Для работы со словарями
      • Для работы с JSON
      • Для работы со структурами
      • Для работы с типами
    • Предустановленные пользовательские функции
      • HyperScan
      • Pcre
      • Pire
      • Re2
      • String
      • Unicode
      • Datetime
      • Url
      • Ip
      • Digest
      • Math
      • Histogram
    • Работа с текстовым представлением типов данных
  • Туториал YQL
    • Обзор
    • Создание таблицы
    • Добавление данных в таблицу
    • Выборка данных из всех колонок
    • Выборка данных из определенных колонок
    • Сортировка и фильтрация
    • Агрегирование данных
    • Дополнительные условия выборки
    • Объединение таблиц с помощью JOIN
    • Вставка и модификация данных с помощью REPLACE
    • Вставка и модификация данных с помощью UPSERT
    • Вставка данных с помощью INSERT
    • Обновление данных с помощью UPDATE
    • Удаление данных
    • Добавление и удаление колонок
    • Удаление таблицы
  • Обслуживание
    • Резервное копирование
  • Диагностика
    • Системные таблицы
  • Вопросы и ответы
    • Общие вопросы
    • Ошибки
    • YQL
    • Все вопросы на одной странице
  • Публичные материалы
  1. Концепции
  2. Time to Live (TTL)

Time to Live (TTL)

  • Принцип работы
  • Гарантии
  • Ограничения
  • Настройка
    • Включение TTL для существующей таблицы
    • Включение TTL для вновь создаваемой таблицы
    • Выключение TTL

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

Принцип работы

YDB позволяет указать для таблицы колонку (TTL-колонка), значения которой будут использоваться для определения времени жизни строк. TTL автоматически удаляет из таблицы строки, когда проходит указанное количество секунд от времени, записанного в TTL-колонку.

Важно

Строка с NULL в TTL-колонке никогда не будет удалена.

Момент времени, когда строка таблицы может быть удалена, определяется по следующей формуле:

expiration_time = valueof(ttl_column) + expire_after_seconds

Примечание

Не гарантируется, что удаление произойдет именно в expiration_time — оно может случиться позже. Если важно исключить из выборки логически устаревшие, но пока ещё физически неудалённые строки, нужно использовать фильтрацию уровня запроса.

Непосредственно удалением данных занимается фоновая операция удаления — Background Removal Operation (BRO), состоящая из 2 стадий:

  1. Проверка значений в TTL-колонке.
  2. Удаление устаревших данных.

BRO обладает следующими свойствами:

  • Единицей параллельности является шард таблицы.
  • Для таблиц без вторичных индексов осуществляется "слепое" удаление. То есть, если между стадиями 1 и 2 значение в TTL-колонке модифицируется (например, запросом UPDATE), изменившееся значение не будет проверено повторно.
  • Для таблиц со вторичными индексами стадия удаления является распределённой транзакцией.

Гарантии

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

Ограничения

  • TTL-колонка должна быть одного из следующих типов:
    • Date;
    • Datetime;
    • Timestamp.
  • Нельзя указать несколько TTL-колонок.
  • Нельзя удалить TTL-колонку. Если это всё же требуется, сначала нужно выключить TTL на таблице.

Настройка

Управление настройками TTL в настоящий момент возможно с использованием:

  • YQL.
  • Консольного клиента YDB.
  • YDB Python SDK.

Включение TTL для существующей таблицы

В приведённом ниже примере строки таблицы mytable будут удаляться спустя час после наступления времени, записанного в колонке created_at:

YQL
CLI
Python
ALTER TABLE `mytable` SET (TTL = Interval("PT1H") ON created_at);
$ ydb -e <endpoint> -d <database> table ttl set --column created_at --expire-after 3600 mytable
session.alter_table('mytable', set_ttl_settings=ydb.TtlSettings().with_date_type_column('created_at', 3600))

Примечание

При настройке TTL с использованием YQL, Interval создаётся из строкового литерала в формате ISO 8601.

Включение TTL для вновь создаваемой таблицы

Для вновь создаваемой таблицы можно передать настройки TTL вместе с её описанием:

YQL
Python
CREATE TABLE `mytable` (
    id Uint64,
    expire_at Timestamp,
    PRIMARY KEY (id)
) WITH (
    TTL = Interval("PT0S") ON expire_at
);
session.create_table(
    'mytable',
    ydb.TableDescription()
    .with_column(ydb.Column('id', ydb.OptionalType(ydb.DataType.Uint64)))
    .with_column(ydb.Column('expire_at', ydb.OptionalType(ydb.DataType.Timestamp)))
    .with_primary_key('id')
    .with_ttl(ydb.TtlSettings().with_date_type_column('expire_at'))
)

Выключение TTL

YQL
CLI
Python
ALTER TABLE `mytable` RESET (TTL);
$ ydb -e <endpoint> -d <database> table ttl drop mytable
session.alter_table('mytable', drop_ttl_settings=True)
В этой статье:
  • Принцип работы
  • Гарантии
  • Ограничения
  • Настройка
  • Включение TTL для существующей таблицы
  • Включение TTL для вновь создаваемой таблицы
  • Выключение TTL
Language
Вакансии
Политика конфиденциальности
Условия использования
© 2021 ООО «Яндекс.Облако»