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.

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.
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.
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.


