Cassandra TTL i Cassandra Typy danych CQL (przykład)

⚡ Inteligentne podsumowanie

Cassandra Typy danych definiują zawartość każdej kolumny, a TTL kontroluje czas życia wartości przed jej automatycznym wygaśnięciem. Ta strona zawiera listę wszystkich typów CQL, wyjaśnia mechanizm wygasania i opisuje zachowanie funkcji Tombstone po wygaśnięciu.

  • 🔤 Rodziny typów: Język CQL grupuje typy na kategorie: tekstowe, numeryczne, daty i godziny, identyfikatory oraz kolekcje.
  • 🔢 Wybór numeryczny: tinyint do varint obejmują każdą szerokość całkowitą, podczas gdy decimal zachowuje dokładną precyzję w przypadku pieniędzy.
  • 🆔 UUID a TimeUUID: timeuuid osadza znacznik czasu i sortuje chronologicznie, dzięki czemu pasuje do kolumn klastrowanych według kolejności czasowej.
  • Podstawy TTL: Wartość ttl w sekundach ustawiona w momencie wstawiania powoduje automatyczne usunięcie danych po jego upływie.
  • 🪦 Zachowanie wygaśnięcia: Wygasłe dane stają się nagrobkiem i są usuwane fizycznie dopiero po skompresowaniu.
  • 🧊 Rodzaje mrożone: Oznaczenie kolekcji lub krotki jako zamrożonej powoduje, że jest ona przechowywana jako jedna niezmienna wartość, którą należy zastąpić w całości.

Cassandra Typy danych TTL CQL

Cassandra Typy danych

Cassandra obsługuje różne typy typów danych. Oto tabela przedstawiająca typy danych, ich stałe i opis.

Typ CQL Stałe OPIS
Ascii Smyczki Ciąg znaków US-Ascii
bigint Liczby całkowite 64-bitowy, długi ze znakiem
kropelka plamy Dowolne bajty w formacie szesnastkowym
boolean Booleans Prawda czy fałsz
licznik Liczby całkowite Rozproszone wartości liczników 64-bitowe
dane Liczby całkowite, ciągi znaków Data kalendarzowa bez składnika czasu
dziesiętny Liczby całkowite, zmiennoprzecinkowe Dziesiętny o zmiennej precyzji
Podwójna Liczby całkowite, zmiennoprzecinkowe 64-bitowa liczba zmiennoprzecinkowa
czas trwania Czas trwania: Okres miesięcy, dni i nanosekund
unosić się Liczby całkowite, zmiennoprzecinkowe 32-bitowa liczba zmiennoprzecinkowa
zamrożone Krotki, kolekcje, typy zdefiniowane przez użytkownika Przechowuje wartość składającą się z wielu części jako jeden niezmienny obiekt typu blob
inet Smyczki Adres IP w formacie IPv4 lub IPv6
int Liczby całkowite 32-bitowa liczba całkowita ze znakiem
podstęp Uporządkowana kolekcja elementów
mapa Kolekcja par klucz-wartość w stylu JSON
zestaw Nieuporządkowana kolekcja unikalnych elementów
małyint Liczby całkowite 16-bitowa liczba całkowita ze znakiem
XNUMX Smyczki Ciąg zakodowany w UTF-8
czas Liczby całkowite, ciągi znaków Czas dnia z dokładnością do nanosekundy
znak czasu Liczby całkowite, ciągi znaków Data i czas zakodowane w milisekundach od epoki
timeuuid UUID Typ 1 UUID, sortowalny według osadzonego czasu
maleńki Liczby całkowite 8-bitowa liczba całkowita ze znakiem
krotka Stała grupa pól typowych
uuid UUID Standardowy UUID
Varchar Smyczki Ciąg zakodowany w UTF-8, alias tekstu
wariant Liczby całkowite Liczba całkowita o dowolnej precyzji

Trzy pozycje z tej listy są przyczyną większości błędów w modelowaniu, warto je więc wyraźnie wymienić.

  • tekst przeciwko varchar. Są tego samego typu. Obie nazwy pasują, a ich mieszanie nie dodaje wartości.
  • znacznik czasu względem timeuuid. Użyj znacznika czasu, aby zarejestrować, kiedy coś się wydarzyło. Użyj timeuuid jako kolumny klastrującej, gdy wiele zdarzeń dzieli milisekundę, ponieważ UUID gwarantuje unikalność, a jednocześnie sortuje według czasu.
  • dziesiętne na podwójne. Wartości pieniężne należy podawać w systemie dziesiętnym. Liczba double wprowadza błąd zaokrąglenia binarnego, który kumuluje się w agregacjach.

A licznik kolumna wiąże się ze specjalnym ograniczeniem: tabela może zawierać kolumny licznika lub zwykłe kolumny, nigdy obie, a wierszy licznika nie można wstawiać, można je jedynie zwiększać.

Cassandra TTL (Time to Live) z funkcją automatycznego wygaśnięcia danych

Cassandra zapewnia funkcjonalność, dzięki której dane mogą automatycznie wygasać.

Podczas wstawiania danych należy podać wartość „ttl” w sekundach. Wartość „ttl” to czas osiągnięcia wartości danych. Po upływie tego określonego czasu dane zostaną automatycznie usunięte.

Na przykład podczas wstawiania określ wartość ttl 100 sekund. Dane zostaną automatycznie usunięte po 100 sekundach. Kiedy dane wygasną, zostaną one oznaczone nagrobkiem.

Nagrobek istnieje przez pewien okres karencji. Po wygaśnięciu danych są one automatycznie usuwane po procesie kompaktowania.

Składnia

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

Przykład

Oto migawka, w której dane są wstawiane do tabeli Studenta z wartością ttl wynoszącą 100 sekund.

Cassandra TTL przy użyciu automatycznego wygaśnięcia danych

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

Oto migawka, na której dane automatycznie wygasają po 100 sekundach, a dane są automatycznie usuwane.

Cassandra TTL przy użyciu automatycznego wygaśnięcia danych

Sprawdzanie i zmiana TTL istniejących danych

Gdy wartość ma wartość TTL, przydatne stają się trzy kolejne operacje, a każda z nich ma zachowanie, które zaskakuje nowicjuszy.

Pozostały czas życia dowolnej kolumny, która nie jest kluczem podstawowym, można odczytać za pomocą funkcji TTL.

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

Wynik null oznacza, że ​​kolumna nie ma ustawionego okresu ważności. Kolumny klucza podstawowego nie mogą być w ten sposób przeszukiwane, ponieważ TTL jest przypisywane do wartości, a nie do klucza.

Istniejącej wartości można nadać nowy TTL poprzez jej aktualizację, co spowoduje zresetowanie odliczania od tego momentu.

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

Domyślna wartość dla całej tabeli pozwala uniknąć powtarzania klauzuli w każdym poleceniu.

ALTER TABLE University.Student WITH default_time_to_live = 86400;

Wynikają z tego dwie konsekwencje. Po pierwsze, TTL obowiązuje dla każdej kolumny, a nie dla każdego wiersza, więc aktualizacja jednej kolumny bez TTL pozostawia ją po wygaśnięciu pozostałych, generując częściowo wypełniony wiersz. Ustawienie TTL dla całego wstawiania pozwala tego uniknąć. Po drugie, każde wygaśnięcie tworzy nagrobek (tzw. tombstone), więc tabela, w której miliony wierszy wygasają jednocześnie, będzie wolniej odczytywać dane, dopóki kompresja ich nie usunie. Użycie strategii TimeWindowCompactionStrategy dla takich tabel pozwala na jednoczesne usunięcie całych tabel SSTable, zamiast kompresowania wiersz po wierszu.

Wygaśnięcie można również zastosować do elementów wewnątrz kolekcji, co zostało omówione w Cassandra kolekcje poradnik.

FAQ

Nie. TTL jest przypisane do wartości niekluczowych. Wiersz znika dopiero po wygaśnięciu wszystkich kolumn niekluczowych, więc ustawienie TTL dla całego wstawienia jest niezawodnym podejściem.

Pułap wynosi 630 720 000 sekund, czyli dwadzieścia lat. Wartości powyżej tego limitu są odrzucane, dlatego dłuższe przechowywanie danych musi zostać obsłużone przez zadanie czyszczenia na poziomie aplikacji.

Zamroź ją, gdy cała wartość jest zawsze zapisywana razem lub gdy stanowi część klucza podstawowego. W zamrożonej kolekcji nie można aktualizować poszczególnych elementów.

Zazwyczaj tak w oczywistych przypadkach, ale często sugeruje wartość podwójną dla pieniędzy i UUID, gdy do zamawiania potrzebny jest timeUUID. Sprawdź ręcznie precyzję numeryczną i opcje zamawiania czasu.

Może przekonwertować politykę retencji na wartości TTL i zalecić strategię kompresji. Najpierw sprawdź prawny okres retencji, ponieważ nie ma możliwości odzyskania przeterminowanych danych.

Podsumuj ten post następująco: