Cassandra TTL & Cassandra Типи даних CQL (приклад)
⚡ Розумний підсумок
Cassandra Типи даних визначають, що може містити кожен стовпець, а TTL контролює, як довго значення залишається дійсним, перш ніж воно автоматично закінчиться. На цій сторінці перелічено всі типи CQL, пояснено механізм закінчення терміну дії та розглянуто поведінку надгробків після закінчення терміну дії.

Cassandra Типи даних
Cassandra підтримує різні типи типів даних. Ось таблиця, яка показує типи даних, їхні константи та опис.
| Тип CQL | Константи | Опис |
|---|---|---|
| ASCII | Рядки | Рядок символів US-Ascii |
| bigint | Цілі числа | 64-розрядний знак |
| blob | Краплі | Довільні байти в шістнадцятковій системі |
| boolean | Булеви | Правда чи неправда |
| протидія | Цілі числа | Розподілені значення лічильника 64 біт |
| дата | Цілі числа, рядки | Дата календаря без компонента часу |
| десятковий знак | Цілі числа, плаваючі числа | Десяткове число зі змінною точністю |
| подвійний | Цілі числа, плаваючі числа | 64-розрядна плаваюча точка |
| тривалість | Тривалість | Проміжок місяців, днів і наносекунд |
| плавати | Цілі числа, плаваючі числа | 32-розрядна плаваюча точка |
| заморожені | Кортежі, колекції, визначені користувачем типи | Зберігає багатокомпонентне значення як один незмінний блоб |
| інет | Рядки | IP-адреса у форматі IPv4 або IPv6 |
| Int | Цілі числа | 32-бітове ціле число зі знаком |
| список | Впорядкована колекція елементів | |
| карта | Колекція пар ключів і значень у стилі JSON | |
| комплект | Невпорядкована колекція унікальних елементів | |
| smallint | Цілі числа | 16-бітове ціле число зі знаком |
| текст | Рядки | Рядок у кодуванні UTF-8 |
| час | Цілі числа, рядки | Час доби з точністю до наносекунд |
| відмітка часу | Цілі числа, рядки | Дата плюс час, закодовані в мілісекундах з епохи |
| ідентифікатор часу | UUID | UUID типу 1, сортується за вбудованим часом |
| tinyint | Цілі числа | 8-бітове ціле число зі знаком |
| кортеж | Фіксована група типізованих полів | |
| uuid | UUID | Стандартний UUID |
| varchar | Рядки | Рядок у кодуванні UTF-8, псевдонім тексту |
| варінт | Цілі числа | Ціле число довільної точності |
Три варіанти у цьому списку спричиняють більшість помилок моделювання, тому їх варто чітко вказати.
- текст проти varchar. Вони одного типу. Підійде будь-яка назва, і їх змішування не додає жодної цінності.
- позначка часу порівняно з timeuuid. Використовуйте позначку часу для запису часу, коли щось сталося. Використовуйте timeuuid як стовпець кластеризації, коли багато подій мають спільну мілісекунду, оскільки UUID гарантує унікальність, водночас сортуючи за часом.
- десятковий дроб проти подвійного дробу. Грошові значення належать до десяткової системи числення. Подвійний тип вводить помилку округлення у двійковій системі, яка накопичується в різних агрегаціях.
A протидія Стовпець має спеціальне обмеження: таблиця може містити стовпці-лічильники або звичайні стовпці, ніколи одночасно, а рядки-лічильники не можна вставляти, їх можна лише збільшувати.
Cassandra TTL (Time to Live) з використанням автоматичного закінчення терміну дії даних
Cassandra забезпечує функціональність, за допомогою якої дані можуть автоматично закінчуватися.
Під час вставки даних ви повинні вказати значення 'ttl' у секундах. Значення 'ttl' - це значення часу життя для даних. Через цей проміжок часу дані буде автоматично видалено.
Наприклад, під час вставки вкажіть значення ttl 100 секунд. Дані будуть автоматично видалені через 100 секунд. Коли термін дії даних минув, ці дані позначаються надгробком.
Надгробок існує пільговий період. Після закінчення терміну дії даних дані автоматично видаляються після процесу стиснення.
синтаксис
INSERT INTO KeyspaceName.TableName (ColumnNames) VALUES (ColumnValues) USING TTL TimeInSeconds;
Приклад
Ось знімок, на якому дані вставляються в таблицю Student із значенням ttl 100 секунд.
INSERT INTO University.Student (rollno, name, dept, semester) VALUES (3, 'Guru99', 'CS', 7) USING TTL 100;
Ось знімок, де термін дії даних автоматично закінчується через 100 секунд і дані автоматично видаляються.
Перевірка та зміна 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 для таких таблиць дозволяє видаляти цілі SSTables одночасно, а не стиснути їх рядок за рядком.
Термін дії також може бути застосований до елементів у колекції, що розглядається в Cassandra колекції навчальний посібник.


