I den første delen av denne opplæringsserien dekket jeg veldig grunnleggende om Cassandra og brukte CQLSH til å kommunisere med databasesystemet via shell. I denne andre delen vil jeg kortfattet dekke de store datatyper som er tilgjengelige i CQL. Da skal jeg dekke hovedtrekkene til gocql
, en Golang klientpakke som implementerer Cassandra-driveren for Golang. Jeg vil dekke hvordan du lager en øktforbindelse med Cassandra med noen konfigurasjonsalternativer og deretter hvordan du kjører ulike søk ved hjelp av økten.
Cassandra støtter grunnleggende datatyper som er tilgjengelige i nesten alle databasesystemer. Bortsett fra dette gir det også komplekse samlingstyper som kan lagre kombinasjoner av enkle data i form av liste, sett og kart. Bortsett fra dette har CQL også støtte for brukerdefinerte typer, slik at utviklere har egne datatyper som er lette å lese og forstå.
ekte
eller falsk
.SETT INN
uttalelser tillatt i et bord med counter kolonne (r); bare OPPDATER
kan bli brukt. For eksempel:> CREATE TABLE website_tracker (id int PRIMARY KEY, url tekst, visitor_count counter); > OPPDATERING website_tracker SET visitor_count = visitor_count + 1 hvor id = 1; > VELG * FRA website_tracker; id | url | telle ---- + ------ + ------ 1 | a.com | 1 (1 rader)
yyyy-mm-dd
.01: 02: 03,123
og lagret 64-bits signert heltall som representerer nanosekunder som er gått siden midnatt.2016-12-01 01: 02: 03.123
.> ALTER TABLE website_tracker ADD tagsSet sett; > OPPDATERING website_tracker SET tagsSet = 'tag1' HVOR id = 1; > SELECT tagsSet FROM website_tracker hvor id = 1; tagsSet ---------- 'tag1'> UPDATE website_tracker SET tagsSet = tagsSet + 'gat2' HVOR id = 1; > SELECT tagsSet FROM website_tracker hvor id = 1; tagsSet ------------------ 'gat2', 'tag1'
Du kan bruke de vanlige angitte operasjonene som forskjell
for å fjerne elementer. For å fjerne eller erstatte hele settet, gjør du SET-koder =
.
> ALTER TABLE website_tracker ADD tagsList liste; > OPPDATERING website_tracker SET tagsList = ['tag1'] HVOR id = 1; > SELECT tagsList FROM website_tracker hvor id = 1; tagsList ---------- ['tag1']> UPDATE website_tracker SET tagsList = tagsList + ['gat2'] WHERE id = 1; > SELECT tagsList FROM website_tracker hvor id = 1; tagsList ------------------ ['tag1', 'gat2']
I en liste kan verdier bli prepended, subtraheres (som i sett), satt inn / erstattet / slettet av indeksverdien (SET-koder [1] = '
), etc.
> ALTER TABLE website_tracker ADD tagsMap map; > UPDATE website_tracker SET tagsMap = 'tag1': 'Tag ett' HVOR id = 1; > SELECT tagsMap FROM website_tracker HVOR id = 1; tagsMap ---------------------- 'tag1': 'Tag ett'> UPDATE website_tracker SET tagsMap ['tag2'] = 'Merk to' hvor ID = 1; > SELECT tagsMap FROM website_tracker HVOR id = 1; tagsMap ------------------ 'tag1': 'Tag ett', 'tag2': 'Merk to'
Det er mulig i Cassandra å definere våre egne typer. Dette gir stor fleksibilitet og gjør det enklere å vedlikeholde dataene. La oss si at vi ønsker å lagre registreringsadressen til nettstedet.
> CREATE TYPE adresse (... gate tekst, ... by tekst, ... statlig tekst); > ALTER TABLE website_tracker ADD reg_address adresse;
For å kunne bruke en brukerdefinert type i en nestet samling, må vi spesifisere den som en frossen
samling.
> ALTER TABLE website_tracker ADD reg_addresses kart>;
Jeg antar at du har kunnskap om å bruke Golang og konfigurere og installere pakker.
For å installere gocql
pakke, kjør følgende kommando fra skallet:
$ gå github.com/gocql/gocql
Nå skal jeg lage et Go-skript som vil forklare konseptene som trengs for å forstå gocql
.
pakke viktigste import ("github.com/gocql/gocql" "log" "time") func PerformOperations () // Gi cassandra cluster instance her. cluster: = gocql.NewCluster ("127.0.0.1") // Autentiseringen er nødvendig hvis passordautentisering er // aktivert for Cassandra-installasjonen. Hvis ikke, kan dette / / fjernes. cluster.Authenticator = gocql.PasswordAuthenticator Brukernavn: "some_username", Passord: "some_password", // gocql krever nøkkelplassen som skal oppgis før sesjonen opprettes. // I fremtiden kan det være bestemmelser for å gjøre dette senere. cluster.Keyspace = "keyspace_name" // Dette er tiden etter som opprettelsen av øktsamtalen ville timeout. // Dette kan tilpasses etter behov. cluster.Timeout = 5 * time.Second cluster.ProtoVersion = 4 økt, feil: = cluster.CreateSession () hvis err! = null log.Fatalf ("Kunne ikke koble til cassandra cluster:% v", err) / / Sjekk om tabellen allerede eksisterer. Opprett hvis tabellen ikke eksisterer keySpaceMeta, _: = session.KeyspaceMetadata ("keyspace_name") hvis _, eksisterer: = keySpaceMeta.Tables ["person"]; eksisterer! = true // Opprett en tabell session.Query ("CREATE TABLE person (" + "id tekst, navn tekst, telefon tekst," + "PRIMARY KEY (id))). Exec () // DIY : Oppdater tabell med noe hvis det allerede eksisterer. // Sett inn post i tabell ved hjelp av forberedte setninger session.Query ("INSERT INTO person (ID, navn, telefon) VALUES (?,?,?)", "Shalabh", "Shalabh Aggarwal", "1234567890"). ) // DIY: Oppdater eksisterende post // Velg post og kjør litt prosess på data hentet var navnstreng var telefonstreng hvis feil: = session.Query ("VELG navn, telefon FRA person WHERE"). Skann (& navn og telefon) ; err! = null hvis feil! = gocql.ErrNotFound log.Fatalf ("Forespørsel mislyktes:% v", err) log.Printf ("Navn:% v", navn) log.Printf ("Telefon:% v ", telefon) // Hent flere rader og kjør prosess over dem iter: = session.Query (" VELG navn, telefon FRA person ") .Iter () for iter.Scan (& navn og telefon) log.Printf Iter Navn:% v ", navn) log.Printf (" Iter Telefon:% v ", telefon) // DIY: Slett post Func Main () PerformOperations ()
De fleste arbeidskonseptene er forklart i selve koden selv. Noen poeng verdt å merke seg er de forskjellige operasjonene som brukes sammen med session.Query ()
. Bortsett fra de tre operasjonene nedenfor, er det mange flere støttede som kan ses i dokumentasjonen.
Exec ()
: Dette ville bare utføre spørringen uten å returnere noen rader. Returnerer feil hvis noen.Scan ()
: Dette ville utføre spørringen mens du kopierer verdiene av kolonner fra den første raden som er matchet i spørringen til variablene som er gått. Det ville kaste bort noen rader bortsett fra den første.Iter ()
: Dette ville utføre spørringen og returnere en iterator som da bare ville fungere som hvordan Scan ()
Fungerer for hver rad hentet.For å kjøre skriptet, kjør kommandoen nedenfor i skallet.
$ go run main.go 2017/02/03 12:53:40 Navn: Shalabh Aggarwal 2017/02/03 12:53:40 Telefon: 1234567890 2017/02/03 12:53:40 Iter Navn: Shalabh Aggarwal 2017 / 02/03 12:53:40 Iter Telefon: 1234567890
I denne andre delen av denne opplæringsserien dekket vi ulike innebygde datatyper tilgjengelig med Cassandra. Vi så også hvordan samlingstyper fungerer og hvordan brukerdefinerte typer kan brukes til å gjøre et overordnet skjema fleksibelt. Vi så også hvordan vi kan samhandle med Cassandra programmatisk i Golang ved hjelp av gocql. Denne pakken tilbyr mye mer funksjonalitet som kan utforskes alene.