• tipi-dati-cassandra

    Tipi di dati in Cassandra

    In questo articolo vedremo la modalità con la quale Cassandra memorizza le informazioni e rappresenta internamente i dati riguarda i tipi di dati che Cassandra supporta.

    In un precedente articolo dal titolo Il database NoSQL Cassandra su questo blog abbiamo introdotto il database NoSQL Cassandra, mentre in un altro articolo dal titolo Cassandra su OSX abbiamo visto come installare Cassandra su Mac. In questo articolo vedremo quali tipi di dati mette a disposizione Cassandra.

     

    Tipologia di dati in Cassandra

    In base alla tipologia, possiamo raggruppare i tipi di dati nei seguenti:

    • tipi numerici;
    • stringhe e date;
    • collection;
    • tuple.

     

    Tipi di dati numerici

    Cassandra viene utilizzato spesso per memorizzare grandi volumi di dati e comprendere le differenze tra i tipi di dati (e di conseguenza utilizzare i tipi di dati adatti ad ogni esigenza) può aiutare ad archiviare le informazioni senza spreco di spazio.

    Le principali opzioni per la memorizzazione dei tipi di dati numerici interi sono:

    • INT
    • BIGINT
    • TINYINT
    • VARINT

    Il tipo di dati INT viene utilizzato per specificare numeri interi con segno a 32 bit. Un bit viene utilizzato per il segno, cioè per indicare se il numero è positivo o negativo, e 31 bit vengono utilizzati per rappresentare il numero stesso. Il numero più grande che può contenere è 2.147.483.647 (231), mentre il più piccolo è -2.147.483.647.

    BIGINT viene utilizzato per specificare numeri interi con segno a 64 bit. Un bit viene utilizzato per il segno e 63 bit per rappresentare il valore numerico.

    Il numero più grande che può memorizzare è 263   e il più piccolo è -263.

    TINYINT viene usato per memorizzare numero di un byte. I numeri con segno sono compresi nell’intervallo compreso tra -127 e 127. I numeri senza segno vanno da 0 a 255.

    VARINT viene utilizzato per memorizzare numeri interi a lunghezza variabile.

     

    Il tipo DECIMAL definisce valori numerici non interi a precisione variabile. Ad esempio, potremmo specificare una colonna con 10 numeri, due dei quali usati per valori decimali (come 12345678,01). Il range dei dati va da -1038+1 fino a 1038-1. In Java viene mappato al tipo java.math.BigDecimal.

    Un FLOAT viene utilizzato per memorizzare un numero a virgola mobile a 32 bit, mentre un DOUBLE viene utilizzato per specificare un numero a virgola mobile a 64 bit, entrambi secondo lo standard IEEE 754 per il calcolo in virgola mobile. Gli stessi tipi float e double vengono utilizzati in Java.

     

    Tipi di dati stringa

    Esistono tre tipi di tipi di dati di stringa in Cassandra: ASCII, VARCHAR e Text.

    ASCII viene usato per rappresentare stringhe di caratteri US-ASCII (127 caratteri diversi). Può essere utile, ad esempio, per rappresentare lettere e caratteri di tastiera comunemente usati dagli utenti in lingua inglese negli Stati Uniti.

    VARCHAR viene usato per memorizzare stringhe con codifica UTF-8 (i caratteri ASCII sono un sottoinsieme delle stringhe con codifica UTF-8). UTF-8 viene utilizzato per codificare gli oltre 128.000 caratteri Unicode. I caratteri UTF-8 comprendono simboli di valuta specifici, caratteri di alfabeti non latini, etc …

    TEXT viene utilizzato per memorizzare stringhe con codifica UTF-8, come VARCHAR. In effetti TEXT è un alias per VARCHAR e i due tipi possono essere usati in modo intercambiabile.

     

    Tipi di dati temporali

    Esistono tre tipi di dati temporali, Date, Timestamp e TimeUUID.

    Il tipo di dati Timestamp comprende la data e l’ora codificato come numero di millisecondi (in 8 byte) a partire dalla mezzanotte (UTC) del 1º gennaio 1970 (l’epoca). I timestamp possono essere rappresentati anche come stringhe (utilizzando i formati ISO 8601), ad esempio 2018-01-16 11:30:54.234.

    Il tipi di dai Date (disponibile con la versione 3 di Cassandra) memorizza la data, ma non l’ora. Cassandra codifica il tipo Date come un intero di 32 bit che rappresentano i giorni a partire dalla mezzanotte (UTC) del 1º gennaio 1970 (l’epoca). I tipi Date possono essere rappresentati nelle query e nelle istruzioni come stringhe, nel formato yyyy-mm-dd.

     

    Tipi di dati identificativi

    Il tipo TimeUUID è un identificativo univoco universale basato su data, ora e mac address del dispositivo che genera l’identificativo. TimeUUID supporta un ordinamento temporale degli identificativi, che è importante quando si desidera essere in grado di determinare l’ordine in cui vengono generati gli UUID. Il tipo di dati UUID memorizza identificativi a 32 caratteri che seguono lo standard UUID.

     

    Tipi di dati Collection

    I tipi Collection vengono utilizzati per memorizzare più valori atomici in una singola colonna. Cassandra può archiviare fino a 64000 elementi in una Collection. Cassandra legge tutto il contenuto di una Collection; le Collection lunghe richiedono pertanto più tempo per essere lette.

    Ci sono 3 tipi di Collection: List, Set e Map.

    Il tipo List consente di memorizzare diversi elementi; viene utilizzato quando l’ordine degli elementi è importante o quando è necessario archiviare lo stesso valore più volte.

    Il tipo Set è simile a List, tranne per il fatto che non esiste un ordine per gli elementi e ciascun elemento può essere memorizzato solo una volta. Dal punto di vista delle performance, Set è più efficiente di List.

    Il tipo Map è dato da insiemi di coppie chiave-valore. Viene utilizzato quando è necessario memorizzare un valore a cui accedere tramite una chiave.

     

    Tipi di dati Tuple

    Cassandra fornisce il tipo di dati Tuple per creare Collection strutturate. Le tuple sono liste ordinate di attributi che hanno una struttura fissa (a differenza dei tipi List e Set, che possono avere lunghezze variabili) e i cui elementi possono anche essere di tipi diversi. Nell’esempio che segue, viene creata una tabella con una tupla che memorizza, tra le altre cose, la latitudine, la longitudine e l’altitudine del sensore.

    Questa istruzione crea una tabella con un ID univoco, un nome di sensore, il nome del produttore del sensore e una posizione definita come una struttura di dati con tre attributi. L’ordine degli attributi è importante: la latitudine è il primo elemento della lista, la longitudine è la seconda e l’altitudine è la terza. Le tuple vengono utilizzate quando si desidera raggruppare logicamente diversi attributi e non sarà necessario aggiungere nuovi attributi in futuro.

     

    Giulio Cantali – IT Consultant

    Creatore di Database Master, il primo percorso per diventare esperti di database

Lascia un commento

Se vuoi condividere la tua opinione, lascia un commento

Puoi usare questi tag e attributi: HTML:

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">