Cassandra TTL e Cassandra Tipi di dati CQL (esempio)

⚡ Riepilogo intelligente

Cassandra I tipi di dati definiscono cosa può contenere ciascuna colonna, mentre il TTL (Time To Live) controlla per quanto tempo un valore rimane valido prima di scadere automaticamente. Questa pagina elenca tutti i tipi CQL, spiega il meccanismo di scadenza e descrive il comportamento del "tombstone" (indicatore di eliminazione) che segue la scadenza.

  • 🔤 Famiglie di tipi: CQL raggruppa i tipi in categorie di testo, numerici, data e ora, identificatori e collezioni.
  • 🔢 Scelta numerica: I tipi da tinyint a varint coprono ogni larghezza di intero, mentre decimal preserva la precisione esatta per le valute.
  • 🆔 UUID vs TimeUUID: timeuuid incorpora un timestamp e ordina cronologicamente, quindi è adatto a colonne di clustering ordinate per tempo.
  • ⏳ Nozioni di base di TTL: Un valore TTL in secondi impostato al momento dell'inserimento elimina automaticamente i dati una volta trascorso tale periodo.
  • 🪦 Comportamento in relazione alla scadenza: I dati scaduti diventano una sorta di lapide e vengono rimossi fisicamente solo dopo la compattazione.
  • 🧊 Tipi congelati: Contrassegnare una collezione o una tupla come congelata la memorizza come un unico valore immutabile che deve essere sostituito per intero.

Cassandra Tipi di dati CQL TTL

Cassandra Tipi di dati

Cassandra supporta diversi tipi di tipi di dati. Ecco la tabella che mostra i tipi di dati, le relative costanti e la descrizione.

Tipo CQL Costante Descrizione
ascii String Stringa di caratteri US-Ascii
grande Interi 64 bit con segno lungo
goccia blob Byte arbitrari in esadecimale
booleano booleani Vero o falso
contrastare Interi Valori dei contatori distribuiti a 64 bit
quando Interi, stringhe Data del calendario senza indicazione oraria
decimale Interi, float Decimale a precisione variabile
doppio Interi, float virgola mobile a 64 bit
durata Durata Un arco di tempo di mesi, giorni e nanosecondi
galleggiante Interi, float virgola mobile a 32 bit
congelati Tuple, raccolte, tipi definiti dall'utente Memorizza un valore multiparte come un unico blocco immutabile
inet String Indirizzo IP in formato IPv4 o IPv6
int Interi intero con segno a 32 bit
stratagemma Collezione ordinata di elementi
carta geografica Raccolta di coppie chiave-valore in formato JSON
set Collezione disordinata di elementi unici
piccolo Interi intero con segno a 16 bit
testo String Stringa con codifica UTF-8
tempo Interi, stringhe L'ora del giorno con precisione al nanosecondo
timestamp Interi, stringhe Data e ora, codificate in millisecondi dall'epoca
timeuuid UUID UUID di tipo 1, ordinabile in base al tempo di incorporamento
minuscolo Interi intero con segno a 8 bit
tupla Un gruppo fisso di campi tipizzati
uuid UUID UUID standard
varchar String Stringa codificata in UTF-8, alias di testo
variante Interi Intero di precisione arbitraria

Tre delle scelte presenti in quell'elenco sono la causa principale degli errori di modellazione, quindi vale la pena menzionarle esplicitamente.

  • testo contro varchar. Sono dello stesso tipo. Entrambi i nomi vanno bene e mescolarli non aggiunge alcun valore.
  • timestamp rispetto a timeuuid. Utilizza il timestamp per registrare quando è accaduto qualcosa. Utilizza timeuuid come colonna di clustering quando molti eventi condividono lo stesso millisecondo, poiché l'UUID garantisce l'unicità pur consentendo l'ordinamento per tempo.
  • decimale contro doppio. I valori monetari vanno espressi in decimale. Un numero in virgola mobile introduce un errore di arrotondamento binario che si accumula nelle aggregazioni.

A contrastare La colonna presenta una restrizione speciale: una tabella può contenere colonne contatore o colonne ordinarie, mai entrambe, e le righe contatore non possono essere inserite, ma solo incrementate.

Cassandra TTL (Time to Live) utilizzando la scadenza automatica dei dati

Cassandra fornisce funzionalità mediante la quale i dati possono scadere automaticamente.

Durante l'inserimento dei dati, è necessario specificare il valore 'ttl' in secondi. Il valore 'ttl' è il valore temporale per i dati. Trascorso quel determinato periodo di tempo, i dati verranno automaticamente rimossi.

Ad esempio, durante l'inserimento specificare il valore ttl 100 secondi. I dati verranno automaticamente cancellati dopo 100 secondi. Quando i dati scadono, vengono contrassegnati con una rimozione.

Esiste una lapide per un periodo di grazia. Una volta scaduti i dati, i dati vengono rimossi automaticamente dopo il processo di compattazione.

Sintassi

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

Esempio

Ecco l'istantanea in cui i dati vengono inseriti nella tabella Studente con un valore ttl di 100 secondi.

Cassandra TTL utilizzando la scadenza automatica dei dati

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

Ecco l'istantanea in cui i dati scadono automaticamente dopo 100 secondi e i dati vengono rimossi automaticamente.

Cassandra TTL utilizzando la scadenza automatica dei dati

Verifica e modifica del TTL sui dati esistenti

Una volta che un valore contiene un TTL, sono utili altre tre operazioni, ognuna delle quali presenta un comportamento che può sorprendere i neofiti.

La durata residua di qualsiasi colonna non chiave primaria può essere letta tramite la funzione TTL.

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

Un risultato nullo significa che alla colonna non è stata impostata alcuna data di scadenza. Le colonne chiave primaria non possono essere interrogate in questo modo, perché il TTL si applica ai valori anziché alla chiave.

Un valore esistente può essere aggiornato con un nuovo TTL, che riavvia il conto alla rovescia da quel momento.

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

Un valore predefinito a livello di tabella evita di ripetere la clausola in ogni istruzione.

ALTER TABLE University.Student WITH default_time_to_live = 86400;

Ne conseguono due conseguenze. In primo luogo, il TTL si applica per colonna, non per riga, quindi l'aggiornamento di una colonna senza un TTL specifico lascia quella colonna attiva anche dopo la scadenza delle altre, producendo una riga parzialmente popolata. Impostare il TTL sull'intero inserimento evita questo problema. In secondo luogo, ogni scadenza crea un record di eliminazione, quindi una tabella in cui milioni di righe scadono contemporaneamente rallenterà le operazioni di lettura fino a quando la compattazione non le eliminerà. L'utilizzo di TimeWindowCompactionStrategy per tali tabelle consente di eliminare intere SSTable contemporaneamente anziché compattarle riga per riga.

La scadenza può essere applicata anche agli elementi all'interno di una collezione, argomento trattato nel Cassandra collezioni tutorial.

DOMANDE FREQUENTI

No. Il TTL si applica ai valori non chiave. Una riga scompare solo quando tutte le colonne non chiave sono scadute, quindi impostare il TTL sull'intero inserimento è l'approccio più affidabile.

Il limite massimo è di 630,720,000 secondi, ovvero vent'anni. I valori superiori vengono scartati, pertanto una conservazione più lunga deve essere gestita da un'operazione di pulizia a livello di applicazione.

Blocca una raccolta quando l'intero valore viene sempre scritto insieme o quando fa parte di una chiave primaria. Una raccolta bloccata non può avere elementi singoli aggiornati.

Solitamente sì nei casi ovvi, ma comunemente suggerisce il doppio per denaro e UUID laddove è necessario TimeUUID per l'ordinamento. Verificare manualmente la precisione numerica e le opzioni di ordinamento temporale.

Può convertire una policy di conservazione in valori TTL e consigliare una strategia di compattazione. Verificare prima il periodo di conservazione legale, poiché i dati scaduti non possono essere recuperati.

Riassumi questo post con: