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.

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


