Cassandra ТТЛ и Cassandra Типы данных CQL (пример)

⚡ Умное резюме

Cassandra Типы данных определяют, что может содержать каждый столбец, а TTL управляет тем, как долго значение сохраняется до автоматического истечения срока его действия. На этой странице перечислены все типы CQL, объясняется механизм истечения срока действия и описывается поведение «надгробного камня», которое следует за истечением срока действия.

  • 🔤 Типовые семейства: CQL группирует типы данных в категории: текст, число, дата и время, идентификатор и коллекция.
  • 🔢 Выбор числа: Классы tinyint, varint и varint охватывают все целочисленные значения, в то время как decimal сохраняет точную точность для денежных значений.
  • 🆔 UUID против TimeUUID: Параметр timeuuid встраивает метку времени и сортирует данные в хронологическом порядке, поэтому он подходит для столбцов кластеризации, упорядоченных по времени.
  • Основы TTL: Значение ttl в секундах, установленное во время вставки, автоматически удаляет данные по истечении этого времени.
  • 🪦 Поведение при истечении срока действия: Устаревшие данные становятся надгробным камнем и физически удаляются только после их уплотнения.
  • 🧊 Виды замороженных продуктов: Пометка коллекции или кортежа как "замороженного" сохраняет их как одно неизменяемое значение, которое необходимо заменить целиком.

Cassandra Типы данных TTL CQL

Cassandra Типы данных

Cassandra поддерживает различные типы типов данных. Вот таблица, в которой показаны типы данных, их константы и описание.

Тип CQL Константы Описание
ASCII Струны Строка символов US-Ascii
BIGINT Целые 64-битный длинный со знаком
капля сгустки Произвольные байты в шестнадцатеричном формате
логический Булевы Правда или ложь
противодействие Целые Распределенные значения счетчика 64 бита
даты Целые числа, строки Календарная дата без компонента времени
десятичная дробь Целые числа, числа с плавающей запятой Десятичная переменная точность
двойной Целые числа, числа с плавающей запятой 64-битная с плавающей точкой
продолжительность Длительность Промежуток времени, исчисляемый месяцами, днями и наносекундами.
плавать Целые числа, числа с плавающей запятой 32-битная с плавающей точкой
замороженные Кортежи, коллекции, пользовательские типы Хранит составное значение как один неизменяемый двоичный объект.
инет Струны IP-адрес в формате IPv4 или IPv6
Int Целые 32-битное целое число со знаком
список Упорядоченная коллекция элементов
карта Коллекция пар ключ-значение в формате JSON
набор Неупорядоченная коллекция уникальных элементов
SMALLINT Целые 16-битное целое число со знаком
текст Струны Строка в кодировке UTF-8
время Целые числа, строки Время суток с наносекундной точностью
отметка времени Целые числа, строки Дата плюс время, закодированное в миллисекундах с начала эпохи.
timeuuid UUID UUID типа 1, сортируемый по встроенному времени.
TINYINT Целые 8-битное целое число со знаком
кортеж Фиксированная группа типизированных полей
UUID UUID Стандартный UUID
варчар Струны Строка, закодированная в UTF-8, псевдоним текста.
варинт Целые Целое число произвольной точности

Три пункта из этого списка приводят к наибольшему количеству ошибок моделирования, поэтому их стоит указать отдельно.

  • текст против varchar. Это один и тот же тип. Оба названия подойдут, их смешивание не принесет никакой пользы.
  • метка времени относительно timeuuid. Используйте метку времени для записи момента события. Используйте UUID в качестве столбца для кластеризации, когда много событий происходят с интервалом в миллисекунду, поскольку UUID гарантирует уникальность, сохраняя при этом сортировку по времени.
  • десятичная дробь против дробной. Денежные значения должны быть десятичными. Тип данных double вносит ошибку двоичного округления, которая накапливается при агрегировании.

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

Cassandra TTL (время жизни) с использованием автоматического истечения срока действия данных

Cassandra обеспечивает функциональность, с помощью которой данные могут быть автоматически просрочены.

При вставке данных необходимо указать значение ttl в секундах. Значение «ttl» — это время жизни данных. По истечении этого определенного периода времени данные будут автоматически удалены.

Например, во время вставки укажите значение ttl 100 секунд. Данные будут автоматически удалены через 100 секунд. Когда срок действия данных истек, эти данные с истекшим сроком действия помечаются надгробием.

Надгробие существует в течение льготного периода. По истечении срока действия данные автоматически удаляются после процесса сжатия.

Синтаксис

INSERT INTO KeyspaceName.TableName (ColumnNames)
VALUES (ColumnValues)
USING TTL TimeInSeconds;

Пример

Вот снимок, где данные вставляются в таблицу учеников со значением ttl 100 секунд.

Cassandra TTL с использованием автоматического истечения срока действия данных

INSERT INTO University.Student (rollno, name, dept, semester)
VALUES (3, 'Guru99', 'CS', 7) USING TTL 100;

Вот снимок, на котором срок действия данных автоматически истекает через 100 секунд, и данные автоматически удаляются.

Cassandra TTL с использованием автоматического истечения срока действия данных

Проверка и изменение TTL для существующих данных

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

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

SELECT name, TTL(name) FROM University.Student WHERE rollno = 3;

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

Существующему значению можно присвоить новое значение TTL, обновив его, что сбросит обратный отсчет с этого момента.

UPDATE University.Student USING TTL 600
SET name = 'Guru99' WHERE rollno = 3;

В настройках таблицы по умолчанию этот пункт не повторяется в каждом операторе.

ALTER TABLE University.Student WITH default_time_to_live = 86400;

Из этого вытекают два следствия. Во-первых, TTL применяется к столбцу, а не к строке, поэтому обновление одного столбца без указания TTL приводит к тому, что этот столбец остается необработанным после истечения срока действия остальных, в результате чего строка оказывается частично заполненной. Установка TTL для всей операции вставки предотвращает это. Во-вторых, каждое истечение срока действия записывает «надгробный камень», поэтому таблица, в которой миллионы строк истекают одновременно, будет замедлять чтение до тех пор, пока компакция не очистит их. Использование TimeWindowCompactionStrategy для таких таблиц позволяет удалять целые SSTable-таблицы одновременно, а не компаундировать их построчно.

Срок действия также может применяться к элементам внутри коллекции, что рассматривается в соответствующем разделе. Cassandra коллекции учебное пособие.

Часто задаваемые вопросы (FAQ)

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

Максимальный срок хранения составляет 630 720 000 секунд, или двадцать лет. Значения, превышающие этот предел, отклоняются, поэтому более длительный срок хранения должен обрабатываться в рамках задачи очистки на уровне приложения.

Заморозьте коллекцию, если все значения всегда записываются целиком или если они являются частью первичного ключа. В замороженной коллекции нельзя обновлять отдельные элементы.

Обычно да в очевидных случаях, но часто предлагается использовать значение double для денег и uuid там, где timeuuid необходим для сортировки. Проверьте вручную параметры точности чисел и сортировки по времени.

Она может преобразовать политику хранения в значения TTL и рекомендовать стратегию сжатия. Перед использованием необходимо сначала подтвердить установленный законом срок хранения, поскольку данные с истекшим сроком хранения восстановить невозможно.

Подведем итог этой публикации следующим образом: