Cassandra TTL & Cassandra CQL-gegevenstypen (voorbeeld)
⚡ Slimme samenvatting
Cassandra Gegevenstypen definiëren wat elke kolom kan bevatten, en TTL bepaalt hoe lang een waarde blijft bestaan voordat deze automatisch verloopt. Deze pagina bevat een overzicht van alle CQL-typen, legt het vervalmechanisme uit en beschrijft het gedrag van de tombstone na het verlopen van een waarde.
Cassandra Gegevenstypen
Cassandra ondersteunt verschillende soorten gegevenstypen. Hier is de tabel met gegevenstypen, hun constanten en een beschrijving.
| CQL-type | constanten | Beschrijving |
|---|---|---|
| ascii | Strings | US-Ascii-tekenreeks |
| bigint | integers | 64-bit ondertekend lang |
| bobbel | blobs | Willekeurige bytes in hexadecimaal |
| boolean | Booleans | Waar of niet waar |
| teller | integers | Gedistribueerde tellerwaarden 64 bit |
| gegevens | Gehele getallen, tekenreeksen | Kalenderdatum zonder tijdcomponent |
| decimale | Gehele getallen, zweeft | Variabele precisie decimaal |
| verdubbelen | Gehele getallen, zweeft | 64-bits drijvende komma |
| duur | Duur | Een periode van maanden, dagen en nanoseconden. |
| drijven | Gehele getallen, zweeft | 32-bits drijvende komma |
| bevroren | Tupels, verzamelingen, door de gebruiker gedefinieerde typen | Slaat een meerdelige waarde op als één onveranderlijke blob. |
| inet | Strings | IP-adres in IPv4- of IPv6-formaat |
| int | integers | 32-bits getekend geheel getal |
| lijst | Geordende verzameling elementen | |
| kaart | JSON-achtige verzameling van sleutel-waardeparen | |
| reeks | Een ongeordende verzameling van unieke elementen | |
| kleintje | integers | 16-bits getekend geheel getal |
| tekst | Strings | UTF-8-gecodeerde tekenreeks |
| Time to | Gehele getallen, tekenreeksen | Tijdstip met nanoseconde precisie. |
| tijdstempel | Gehele getallen, tekenreeksen | Datum en tijd, gecodeerd in milliseconden sinds het begin van het tijdperk. |
| tijds-ID | UUID's | Type 1 UUID, sorteerbaar op ingebedde tijd |
| kleinint | integers | 8-bits getekend geheel getal |
| tuple | Een vaste groep getypte velden | |
| uuid | UUID's | Standaard UUID |
| Varchar | Strings | Een in UTF-8 gecodeerde tekenreeks, een alias van tekst. |
| variant | integers | Willekeurige precisie geheel getal |
Drie keuzes in die lijst leiden tot de meeste modelleringsfouten, dus het is de moeite waard om ze expliciet te vermelden.
- tekst tegen varchar. Het zijn dezelfde soort. Beide namen zijn prima, en het combineren ervan voegt niets toe.
- Tijdstempel gekoppeld aan timeuuid. Gebruik een tijdstempel om vast te leggen wanneer iets is gebeurd. Gebruik timeuuid als clusterkolom wanneer veel gebeurtenissen een milliseconde delen, omdat de UUID uniciteit garandeert en tegelijkertijd sortering op tijd mogelijk maakt.
- decimaal versus dubbel. Monetaire waarden horen in decimale vorm te worden weergegeven. Een double introduceert binaire afrondingsfouten die zich ophopen bij aggregaties.
A teller Een kolom kent een speciale beperking: een tabel mag alleen tellerkolommen of gewone kolommen bevatten, nooit beide, en tellerrijen kunnen niet worden ingevoegd, alleen verhoogd.
Cassandra TTL (Time to Live) met automatische gegevensvervaldatum
Cassandra biedt functionaliteit waarmee gegevens automatisch kunnen verlopen.
Tijdens het invoegen van gegevens moet u de 'ttl'-waarde in seconden opgeven. 'ttl'-waarde is de time-to-live-waarde voor de gegevens. Na die bepaalde tijd worden de gegevens automatisch verwijderd.
Geef tijdens het invoegen bijvoorbeeld de ttl-waarde 100 seconden op. Gegevens worden na 100 seconden automatisch verwijderd. Wanneer gegevens zijn verlopen, worden die verlopen gegevens gemarkeerd met een tombstone.
Een grafsteen bestaat voor een uitstelperiode. Nadat de gegevens zijn verlopen, worden de gegevens automatisch verwijderd na het compactieproces.
Syntaxis
INSERT INTO KeyspaceName.TableName (ColumnNames) VALUES (ColumnValues) USING TTL TimeInSeconds;
Voorbeeld
Hier is de momentopname waarin gegevens worden ingevoegd in de Student-tabel met een ttl-waarde van 100 seconden.
INSERT INTO University.Student (rollno, name, dept, semester) VALUES (3, 'Guru99', 'CS', 7) USING TTL 100;
Hier is de momentopname waarbij gegevens na 100 seconden automatisch verlopen en gegevens automatisch worden verwijderd.
De TTL van bestaande gegevens controleren en wijzigen
Zodra een waarde een TTL heeft, zijn er nog drie nuttige bewerkingen beschikbaar, elk met een gedrag dat nieuwkomers kan verrassen.
De resterende levensduur van elke kolom die geen primaire sleutel is, kan worden uitgelezen met de TTL-functie.
SELECT name, TTL(name) FROM University.Student WHERE rollno = 3;
Een null-resultaat betekent dat er geen vervaldatum is ingesteld voor de kolom. Primaire sleutelkolommen kunnen niet op deze manier worden opgevraagd, omdat de TTL (Time To Live) is gekoppeld aan de waarden en niet aan de sleutel.
Een bestaande waarde kan een nieuwe TTL krijgen door deze bij te werken, waardoor het aftellen vanaf dat moment opnieuw begint.
UPDATE University.Student USING TTL 600 SET name = 'Guru99' WHERE rollno = 3;
Een tabelbrede standaardwaarde voorkomt dat de clausule in elke instructie wordt herhaald.
ALTER TABLE University.Student WITH default_time_to_live = 86400;
Dit heeft twee gevolgen. Ten eerste geldt de TTL per kolom, niet per rij. Het bijwerken van één kolom zonder TTL zorgt ervoor dat die kolom achterblijft nadat de rest is verlopen, waardoor een rij gedeeltelijk gevuld blijft. Door de TTL voor de hele invoeging in te stellen, wordt dit voorkomen. Ten tweede schrijft elke verlopen TTL een 'tombstone'. Een tabel waarin miljoenen rijen tegelijk verlopen, zal de leesbewerkingen vertragen totdat de compactie ze verwijdert. Door TimeWindowCompactionStrategy te gebruiken voor dergelijke tabellen kunnen hele SSTables in één keer worden verwijderd in plaats van rij voor rij te worden gecomprimeerd.
Vervaldatums kunnen ook worden toegepast op elementen binnen een verzameling, zoals beschreven in de volgende sectie. Cassandra collecties tutorial.



