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



