Cassandra TTL & Cassandra CQL-datatyper (eksempel)

⚡ Smart opsummering

Cassandra Datatyper definerer, hvad hver kolonne må indeholde, og TTL styrer, hvor længe en værdi overlever, før den udløber automatisk. Denne side viser alle CQL-typer, forklarer udløbsmekanismen og dækker tombstone-adfærden efter udløb.

  • 🔤 Typefamilier: CQL grupperer typer i tekst-, numeriske, dato og klokkeslæt-, identifikator- og samlingskategorier.
  • 🔢 Numerisk valg: tinyint til varint dækker alle heltalsbredder, mens decimal bevarer den nøjagtige præcision for penge.
  • 🆔 UUID vs. TimeUUID: timeuuid integrerer et tidsstempel og sorterer kronologisk, så det passer til tidsordnede klyngekolonner.
  • ⏳ TTL-grundlæggende: En ttl-værdi i sekunder, der er angivet ved indsættelsestidspunktet, sletter dataene automatisk, når den er udløbet.
  • 🪦 Udløbsadfærd: Udløbne data bliver en tombstone og fjernes først fysisk efter komprimering.
  • 🧊 Frosne typer: Når en samling eller tuple markeres som frosset, gemmes den som én uforanderlig værdi, der skal erstattes som helhed.

Cassandra TTL CQL-datatyper

Cassandra Datatyper

Cassandra understøtter forskellige typer datatyper. Her er tabellen, der viser datatyper, deres konstanter og beskrivelse.

CQL type Konstanter Beskrivelse
ascii Strings US-Ascii tegnstreng
bigint Heltal 64-bit signeret lang
klat klatter Vilkårlige bytes i hexadecimal
boolean Booleans Sandt eller falsk
imødegå Heltal Distribuerede tællerværdier 64 bit
dato Heltal, strenge Kalenderdato uden tidskomponent
decimal Heltal, flydere Variabel præcision decimal
fordoble Heltal, flydere 64-bit flydende punkt
varighed Varighed Et tidsrum på måneder, dage og nanosekunder
flyde Heltal, flydere 32-bit flydende punkt
frosset Tuples, samlinger, brugerdefinerede typer Gemmer en flerdelt værdi som én uforanderlig blob
inet Strings IP-adresse i IPv4- eller IPv6-format
int Heltal 32-bit fortegnet heltal
liste Ordnet samling af elementer
kort JSON-stil samling af nøgle- og værdipar
sæt Uordnet samling af unikke elementer
smallint Heltal 16-bit fortegnet heltal
tekst Strings UTF-8-kodet streng
tid Heltal, strenge Tidspunkt med nanosekunders præcision
tidsstempel Heltal, strenge Dato plus tid, kodet som millisekunder siden epoke
tid UUID'er Type 1 UUID, sorterbar efter indlejret tid
lillebitte Heltal 8-bit fortegnet heltal
tupel En fast gruppe af typefelter
ny UUID'er Standard UUID
VARCHAR Strings UTF-8-kodet streng, et tekstalias
varint Heltal Vilkårlig præcision heltal

Tre valgmuligheder på den liste forårsager de fleste modelleringsfejl, så de er værd at nævne eksplicit.

  • tekst mod varchar. De er af samme type. Begge navne fungerer, og det at blande dem tilføjer ingen værdi.
  • tidsstempel mod timeuuid. Brug et tidsstempel til at registrere, hvornår noget skete. Brug timeuuid som en klyngekolonne, når mange hændelser deler et millisekund, fordi UUID'et garanterer unikhed, samtidig med at det sorterer efter tid.
  • decimal mod dobbelt. Monetære værdier hører hjemme i decimaler. En double introducerer en binær afrundingsfejl, der akkumuleres på tværs af aggregeringer.

A imødegå Kolonnen har en særlig begrænsning: en tabel kan indeholde tællerkolonner eller almindelige kolonner, aldrig begge dele, og tællerrækker kan ikke indsættes, kun forøges.

Cassandra TTL (Time to Live) ved hjælp af automatisk dataudløb

Cassandra giver funktionalitet, hvorved data automatisk kan udløbe.

Under dataindsættelse skal du angive 'ttl'-værdien i sekunder. 'ttl'-værdi er time to live-værdien for dataene. Efter det bestemte tidsrum vil data automatisk blive fjernet.

Angiv f.eks. ttl-værdi 100 sekunder under indsættelse. Data slettes automatisk efter 100 sekunder. Når data er udløbet, markeres de udløbne data med en gravsten.

En gravsten eksisterer for en afdragsfri periode. Når data er udløbet, fjernes data automatisk efter komprimeringsprocessen.

Syntaks

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

Eksempel

Her er et øjebliksbillede, hvor data indsættes i Student-tabellen med en ttl-værdi på 100 sekunder.

Cassandra TTL ved hjælp af automatisk dataudløb

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

Her er et øjebliksbillede, hvor data automatisk udløber efter 100 sekunder, og data fjernes automatisk.

Cassandra TTL ved hjælp af automatisk dataudløb

Kontrol og ændring af TTL på eksisterende data

Når en værdi bærer en TTL, er tre yderligere operationer nyttige, og hver har en adfærd, der overrasker nybegyndere.

Den resterende levetid for enhver ikke-primærnøglekolonne kan læses med TTL-funktionen.

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

Et null-resultat betyder, at kolonnen ikke har et udløbssæt. Primære nøglekolonner kan ikke forespørges på denne måde, fordi TTL'en knytter sig til værdierne i stedet for til nøglen.

En eksisterende værdi kan gives en ny TTL ved at opdatere den, hvilket nulstiller nedtællingen fra det øjeblik.

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

En standardværdi for hele tabellen undgår at gentage klausulen i hver sætning.

ALTER TABLE University.Student WITH default_time_to_live = 86400;

To konsekvenser følger. For det første gælder TTL pr. kolonne, ikke pr. række, så opdatering af én kolonne uden en TTL efterlader den kolonne, når resten udløber, hvilket producerer en delvist udfyldt række. Hvis man indstiller TTL på hele indsættelsen, undgår man dette. For det andet skriver hver udløbsrate en tombstone, så en tabel, hvor millioner af rækker udløber sammen, vil forsinke læsningerne, indtil komprimeringen fjerner dem. Brug af TimeWindowCompactionStrategy til sådanne tabeller gør det muligt at slette hele SSTables på én gang i stedet for at komprimere dem række for række.

Udløb kan også anvendes på elementer i en samling, som er dækket i Cassandra kollektioner tutorial.

Ofte Stillede Spørgsmål

Nej. TTL knytter sig til ikke-nøgleværdier. En række forsvinder kun, når alle ikke-nøglekolonner er udløbet, så det er den mest pålidelige fremgangsmåde at indstille TTL på hele indsætningen.

Loftet er 630,720,000 sekunder, tyve år. Værdier over dette afvises, så længere opbevaring skal håndteres af et oprydningsjob på applikationsniveau.

Frys den, når hele værdien altid skrives sammen, eller når den udgør en del af en primærnøgle. En frossen samling kan ikke få individuelle elementer opdateret.

Normalt ja i åbenlyse tilfælde, men det foreslås ofte dobbelt for penge og uuid, hvor timeuuid er nødvendig for bestilling. Kontroller numerisk præcision og tidsbestillingsvalg manuelt.

Den kan konvertere en opbevaringspolitik til TTL-værdier og anbefale en komprimeringsstrategi. Bekræft først den lovpligtige opbevaringsperiode, da udløbne data ikke kan gendannes.

Opsummer dette indlæg med: