Cassandra TTL & Cassandra Tipuri de date CQL (exemplu)

⚡ Rezumat inteligent

Cassandra Tipurile de date definesc ce poate conține fiecare coloană, iar TTL controlează cât timp o valoare supraviețuiește înainte de a expira automat. Această pagină listează fiecare tip CQL, explică mecanismul de expirare și prezintă comportamentul de tip tombstone care urmează expirării.

  • 🔤 Familii de tip: CQL grupează tipurile în categorii de text, numerice, dată și oră, identificator și colecție.
  • 🔢 Alegere numerică: De la tinyint la varint se acoperă fiecare lățime întreagă, în timp ce decimal păstrează precizia exactă pentru bani.
  • 🆔 UUID vs. UUID de timp: timeuuid încorporează o marcă temporală și sortează cronologic, deci se potrivește coloanelor de grupare ordonate în timp.
  • Noțiuni de bază despre TTL: O valoare ttl în secunde setată la momentul inserării șterge automat datele odată ce aceasta a expirat.
  • 🪦 Comportament la expirare: Datele expirate devin o piatră funerară și sunt eliminate fizic numai după compactare.
  • 🧊 Tipuri congelate: Marcarea unei colecții sau a unui tuplu ca înghețat o stochează ca o singură valoare imuabilă care trebuie înlocuită în întregime.

Cassandra Tipuri de date TTL CQL

Cassandra Tipuri de date

Cassandra acceptă diferite tipuri de date. Iată tabelul care arată tipurile de date, constantele acestora și descrierea.

Tip CQL constante Descriere
ascii Corzi Șir de caractere US-Ascii
bigint Întregi 64 de biți semnat lung
pată de cerneală Blobs Octeți arbitrari în hexazecimal
boolean booleane Adevărat sau fals
contracara Întregi Contor distribuit valori 64 de biți
data Numerele întregi, șiruri de caractere Dată calendaristică fără componentă de timp
zecimal Numerele întregi, flotanți Decimală de precizie variabilă
dubla Numerele întregi, flotanți 64-bit virgulă mobilă
durată Durată O perioadă de luni, zile și nanosecunde
pluti Numerele întregi, flotanți 32-bit virgulă mobilă
congelate Tupluri, colecții, tipuri definite de utilizator Stochează o valoare formată din mai multe părți ca un singur blob imuabil
INET Corzi Adresă IP în format IPv4 sau IPv6
int Întregi Număr întreg cu semn pe 32 de biți
listă Colecție ordonată de elemente
Hartă Colecție în stil JSON de perechi de chei și valori
set Colecție neordonată de elemente unice
smallint Întregi Număr întreg cu semn pe 16 de biți
a) Sport and Nutrition Awareness Day in Manasia Around XNUMX people from the rural commune Manasia have participated in a sports and healthy nutrition oriented activity in one of the community’s sports ready yards. This activity was meant to gather, mainly, middle-aged people from a Romanian rural community and teach them about the benefits that sports have on both their mental and physical health and on how sporting activities can be used to bring people from a community closer together. Three trainers were made available for this event, so that the participants would get the best possible experience physically and so that they could have the best access possible to correct information and good sports/nutrition practices. b) Sports Awareness Day in Poiana Țapului A group of young participants have taken part in sporting activities meant to teach them about sporting conduct, fairplay, and safe physical activities. The day culminated with a football match. Corzi Șir codificat UTF-8
timp Numerele întregi, șiruri de caractere Ora din zi cu precizie de nanosecunde
timestamp-ul Numerele întregi, șiruri de caractere Data plus ora, codificate în milisecunde de la epocă
timeuuid UUID-uri UUID de tip 1, sortabil după ora încorporată
tinyint Întregi Număr întreg cu semn pe 8 de biți
tuplu Un grup fix de câmpuri tipizate
uuid UUID-uri UUID standard
varchar Corzi Șir codificat UTF-8, un alias de text
varint Întregi Număr întreg de precizie arbitrară

Trei opțiuni din acea listă cauzează cele mai multe greșeli de modelare, așa că merită menționate explicit.

  • text împotriva varchar. Sunt de același tip. Ambele denumiri funcționează, iar combinarea lor nu adaugă nicio valoare.
  • marcaj temporal față de timeuuid. Folosește timestamp pentru a înregistra când s-a întâmplat ceva. Folosește timeuuid ca o coloană de grupare atunci când mai multe evenimente partajează o milisecundă, deoarece UUID garantează unicitatea, sortând în același timp după timp.
  • zecimal împotriva dublu. Valorile monetare aparțin în zecimal. Un număr dublu introduce o eroare de rotunjire binară care se acumulează în agregări.

A contracara coloana are o restricție specială: un tabel poate conține coloane contor sau coloane obișnuite, niciodată ambele, iar rândurile contor nu pot fi inserate, ci doar incrementate.

Cassandra TTL (Time to Live) folosind expirarea automată a datelor

Cassandra oferă funcționalitate prin care datele pot fi expirate automat.

În timpul inserării datelor, trebuie să specificați valoarea „ttl” în secunde. Valoarea „ttl” este valoarea timpului de viață pentru date. După această perioadă de timp, datele vor fi șterse automat.

De exemplu, specificați valoarea ttl 100 de secunde în timpul inserării. Datele vor fi șterse automat după 100 de secunde. Când datele sunt expirate, acele date expirate sunt marcate cu o piatră funerară.

O piatră funerară există pentru o perioadă de grație. După expirarea datelor, datele sunt eliminate automat după procesul de compactare.

Sintaxă

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

Exemplu

Aici este instantaneul în care datele sunt inserate în tabelul Student cu valoarea ttl de 100 de secunde.

Cassandra TTL folosind expirarea automată a datelor

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

Aici este instantaneul în care datele expiră automat după 100 de secunde și datele sunt eliminate automat.

Cassandra TTL folosind expirarea automată a datelor

Verificarea și modificarea TTL-ului pe datele existente

Odată ce o valoare poartă un TTL, sunt utile trei operații suplimentare, fiecare având un comportament care surprinde pe noii veniți.

Durata de viață rămasă a oricărei coloane care nu este cu cheie primară poate fi citită cu funcția TTL.

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

Un rezultat nul înseamnă că coloana nu are setată nicio expirare. Coloanele cu cheie primară nu pot fi interogate în acest fel, deoarece TTL-ul se atașează valorilor și nu cheii.

Unei valori existente i se poate atribui un nou TTL prin actualizarea acesteia, ceea ce resetează numărătoarea inversă din acel moment.

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

O valoare implicită la nivel de tabel evită repetarea clauzei la fiecare instrucțiune.

ALTER TABLE University.Student WITH default_time_to_live = 86400;

Urmează două consecințe. În primul rând, TTL se aplică pe coloană, nu pe rând, așadar actualizarea unei coloane fără un TTL lasă acea coloană în urmă după ce restul expiră, producând un rând parțial populat. Setarea TTL pentru întreaga inserție evită acest lucru. În al doilea rând, fiecare expirare scrie o eroare de citire, astfel încât un tabel în care milioane de rânduri expiră împreună va încetini citirile până când compactarea le șterge. Utilizarea TimeWindowCompactionStrategy pentru astfel de tabele permite eliminarea simultană a întregilor tabele SSTable, în loc să fie compactate rând cu rând.

Expirarea poate fi aplicată și elementelor dintr-o colecție, ceea ce este acoperit de Cassandra colecții tutorial.

Întrebări frecvente

Nu. TTL se atașează valorilor non-cheie. Un rând dispare doar după ce fiecare coloană non-cheie a expirat, așadar setarea TTL pentru întreaga inserție este abordarea fiabilă.

Plafonul este de 630,720,000 de secunde, douăzeci de ani. Valorile peste acesta sunt respinse, așadar o retenție mai lungă trebuie gestionată de o lucrare de curățare la nivel de aplicație.

Înghețați-o atunci când întreaga valoare este întotdeauna scrisă împreună sau când face parte dintr-o cheie primară. O colecție înghețată nu poate avea elemente individuale actualizate.

De obicei, da, în cazuri evidente, dar de obicei sugerează double pentru money și uuid unde timeuuid este necesar pentru comandă. Verificați manual precizia numerică și opțiunile de ordonare temporală.

Poate converti o politică de retenție în valori TTL și poate recomanda o strategie de compactare. Confirmați mai întâi perioada legală de retenție, deoarece datele expirate nu pot fi recuperate.

Rezumați această postare cu: