Nella prima parte di questa serie di tutorial, ho trattato le basi di Cassandra e ho usato CQLSH per comunicare con il sistema di database tramite shell. In questa seconda parte, tratterò in breve i principali tipi di dati disponibili in CQL. Quindi parlerò degli elementi essenziali di gocql
, un pacchetto client Golang che implementa il driver Cassandra per Golang. Tratterò come creare una connessione di sessione con Cassandra con alcune opzioni di configurazione e quindi come eseguire varie query utilizzando la sessione.
Cassandra fornisce supporto per i tipi di dati di base disponibili in quasi tutti i sistemi di database. Oltre a questo, fornisce anche tipi di raccolta complessi che possono memorizzare combinazioni di dati semplici sotto forma di elenco, set e mappa. Oltre a questo, CQL ha anche il supporto per i tipi definiti dall'utente, consentendo agli sviluppatori di avere i propri tipi di dati che sono facili da leggere e capire.
vero
o falso
.INSERIRE
istruzioni consentite in una tabella con colonna (e) contatore (i); solo AGGIORNARE
può essere utilizzato. Per esempio:> CREATE TABLE website_tracker (id int PRIMARY KEY, testo url, contatore visitatori_count); > UPDATE website_tracker SET visitor_count = visitor_count + 1 WHERE id = 1; > SELEZIONA * FROM website_tracker; id | url | conta ---- + ------ + ------ 1 | a.com | 1 (1 file)
aaaa-mm-gg
.01: 02: 03,123
e numero intero con segno a 64 bit memorizzato che rappresenta i nanosecondi trascorsi da mezzanotte.2016-12-01 01: 02: 03.123
.> ALTER TABLE website_tracker AGGIUNGI tag Set set; > UPDATE website_tracker SET tagsSet = 'tag1' WHERE id = 1; > SELECT tagsSet FROM website_tracker WHERE id = 1; tagsSet ---------- 'tag1'> UPDATE website_tracker SET tagsSet = tagsSet + 'gat2' WHERE id = 1; > SELECT tagsSet FROM website_tracker WHERE id = 1; tagsSet ------------------ 'gat2', 'tag1'
È possibile utilizzare le consuete operazioni di set come differenza
rimuovere elementi. Per cancellare o sostituire il set completo, fare SET tags =
.
> ALTER TABLE website_tracker AGGIUNGI tag Elenco elenchi; > UPDATE website_tracker SET tagsList = ['tag1'] WHERE id = 1; > Seleziona tagLista FROM website_tracker WHERE id = 1; tagsList ---------- ['tag1']> UPDATE website_tracker SET tagsList = tagsList + ['gat2'] WHERE id = 1; > Seleziona tagLista FROM website_tracker WHERE id = 1; tagsList ------------------ ['tag1', 'gat2']
In una lista, i valori possono essere anteposti, sottratti (come nei set), inseriti / sostituiti / cancellati per valore di indice (SET tags [1] = '
), eccetera.
> ALTER TABLE website_tracker AGGIUNGI tagMappa mappa; > UPDATE website_tracker SET tagsMap = 'tag1': 'Tag One' WHERE id = 1; > SELEZIONA tagMappa FROM website_tracker WHERE id = 1; tagsMap ---------------------- 'tag1': 'Tag One'> UPDATE website_tracker SET tagsMap ['tag2'] = 'Tag Two' WHERE id = 1; > SELEZIONA tagMappa FROM website_tracker WHERE id = 1; tagsMap ------------------ 'tag1': 'Tag One', 'tag2': 'Tag Two'
È possibile in Cassandra definire i nostri tipi. Ciò offre molta flessibilità e facilita la manutenzione generale dei dati. Diciamo che vogliamo memorizzare l'indirizzo di registrazione del sito web.
> CREATE TYPE address (... testo di strada, ... testo di città, ... testo di stato); > ALTER TABLE website_tracker AGGIUNGI indirizzo reg_address;
Per utilizzare un tipo definito dall'utente in una raccolta nidificata, è necessario specificarlo come a congelato
collezione.
> ALTER TABLE website_tracker AGGIUNGI mappa reg_addresses>;
Presumo che tu abbia una certa conoscenza dell'uso di Golang e della configurazione e installazione dei pacchetti.
Per installare il gocql
pacchetto, eseguire il seguente comando dalla shell:
$ vai su github.com/gocql/gocql
Ora creerò uno script Go che spiegherà i concetti necessari per capire gocql
.
pacchetto main import ("github.com/gocql/gocql" "log" "time") func PerformOperations () // Fornire qui l'istanza del cluster cassandra. cluster: = gocql.NewCluster ("127.0.0.1") // L'autenticatore è necessario se l'autenticazione della password è // abilitata per l'installazione di Cassandra. Altrimenti, questo può essere rimosso. cluster.Authenticator = gocql.PasswordAuthenticator Username: "some_username", Password: "some_password", // gocql richiede che lo spazio per le chiavi venga fornito prima della creazione della sessione. // In futuro potrebbero esserci disposizioni per farlo più tardi. cluster.Keyspace = "keyspace_name" // Questo è il tempo dopo il quale la creazione della chiamata di sessione sarebbe scaduta. // Questo può essere personalizzato secondo necessità. cluster.Timeout = 5 * time.Second cluster.ProtoVersion = 4 session, err: = cluster.CreateSession () se err! = nil log.Fatalf ("Impossibile connettersi a cassandra cluster:% v", err) / / Controlla se la tabella esiste già. Crea se la tabella non esiste keySpaceMeta, _: = session.KeyspaceMetadata ("keyspace_name") se _, esiste: = keySpaceMeta.Tables ["person"]; esiste! = true // Crea una sessione table.Query ("CREATE TABLE person (" + "id testo, nome testo, testo telefono," + "PRIMARY KEY (id))"). Exec () // DIY : Aggiorna la tabella con qualcosa se già esiste. // Inserisci record nella tabella utilizzando la sessione di istruzioni preparate. Query ("INSERT INTO person (id, name, phone) VALUES (?,?,?)", "Shalabh", "Shalabh Aggarwal", "1234567890"). Exec ( // FAI DA TE: aggiorna il record esistente // Seleziona il record ed esegui un po 'di processo sui dati recuperati var name string var phone string se err: = session.Query ("SELECT name, phone FROM person WHERE"). Scan (& name, & phone) ; err! = nil if err! = gocql.ErrNotFound log.Fatalf ("Query failed:% v", err) log.Printf ("Nome:% v", nome) log.Printf ("Telefono:% v ", phone) // Scarica più righe ed esegui il processo su di esse iter: = session.Query (" SELECT name, phone FROM person "). Iter () per iter.Scan (& name, & phone) log.Printf (" Nome Iter:% v ", nome) log.Printf (" Iter Phone:% v ", telefono) // DIY: Elimina record func main () PerformOperations ()
La maggior parte dei concetti di lavoro sono spiegati nel codice sopra riportato. Alcuni punti degni di nota sono le diverse operazioni utilizzate insieme a session.Query ()
. Oltre alle tre operazioni sottostanti, ce ne sono molte altre supportate che possono essere viste nella documentazione.
Exec ()
: Questo eseguirà semplicemente la query senza restituire alcuna riga. Restituisce errore se presente.Scansione()
: Questo eseguiva la query durante la copia dei valori delle colonne dalla prima riga abbinata nella query alle variabili passate. Scarterebbe qualsiasi riga separata dalla prima.Iter ()
: Questo eseguiva la query e restituiva un iteratore che avrebbe funzionato come se fosse Scansione()
funziona per ogni riga recuperata.Per eseguire lo script, eseguire il comando di seguito in shell.
$ go run main.go 2017/02/03 12:53:40 Nome: Shalabh Aggarwal 2017/02/03 12:53:40 Telefono: 1234567890 2017/02/03 12:53:40 Iter Nome: Shalabh Aggarwal 2017 / 02/03 12:53:40 Iter Phone: 1234567890
In questa seconda parte di questa serie di tutorial, abbiamo trattato vari tipi di dati incorporati disponibili con Cassandra. Abbiamo anche visto come funzionano i tipi di raccolta e come i tipi definiti dall'utente possono essere utilizzati per rendere flessibile uno schema generale. Abbiamo anche visto come possiamo interagire con Cassandra a livello di codice in Golang usando gocql. Questo pacchetto offre molte più funzionalità che possono essere esplorate da soli.