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.

  • 🔤 Typefamilies: CQL groepeert gegevenstypen in tekst-, numerieke, datum- en tijd-, identificatie- en verzamelingscategorieën.
  • 🔢 Numerieke keuze: Tinyint tot en met varint dekken elke breedte van gehele getallen, terwijl decimal de exacte precisie voor geld behoudt.
  • 🆔 UUID versus TimeUUID: timeuuid bevat een tijdstempel en sorteert chronologisch, waardoor het geschikt is voor clusteringkolommen op basis van tijd.
  • TTL-basisprincipes: Een TTL-waarde in seconden die tijdens het invoegen wordt ingesteld, zorgt ervoor dat de gegevens automatisch worden verwijderd zodra deze tijd is verstreken.
  • 🪦 Vervaldatumgedrag: Verlopen data wordt een soort grafsteen en wordt pas fysiek verwijderd na compactie.
  • 🧊 Diepvriessoorten: Door een verzameling of tuple als 'bevroren' te markeren, wordt deze opgeslagen als één onveranderlijke waarde die in zijn geheel moet worden vervangen.

Cassandra TTL CQL-gegevenstypen

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.

Cassandra TTL met automatische gegevensvervaldatum

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.

Cassandra TTL met automatische gegevensvervaldatum

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.

Veelgestelde vragen

Nee. TTL wordt gekoppeld aan niet-sleutelwaarden. Een rij verdwijnt pas als alle niet-sleutelkolommen zijn verlopen, dus het instellen van de TTL voor de hele invoeging is de meest betrouwbare methode.

De maximale bewaartermijn is 630,720,000 seconden, oftewel twintig jaar. Waarden daarboven worden afgewezen, dus langere bewaartermijnen moeten worden afgehandeld door een opschoonactie op applicatieniveau.

Bevries de collectie wanneer de volledige waarde altijd als één geheel wordt opgeslagen, of wanneer deze deel uitmaakt van een primaire sleutel. Individuele elementen van een bevroren collectie kunnen niet worden bijgewerkt.

Meestal wel in duidelijke gevallen, maar het wordt vaak aangeraden om het dubbele te gebruiken voor geld en UUID, terwijl voor de sortering een tijd-UUID nodig is. Controleer de numerieke precisie en de keuzes voor de tijdsortering handmatig.

Het programma kan een bewaarbeleid omzetten in TTL-waarden en een compactiestrategie aanbevelen. Controleer eerst de wettelijke bewaartermijn, aangezien verlopen gegevens niet meer kunnen worden hersteld.

Vat dit bericht samen met: