Apache Cassandra er et av de mest populære open source-distribuerte databasesystemene som er tilgjengelige. Den ble utformet med det formål å håndtere store mengder data lagret på mange servere fordelt på geografiske områder, samtidig som det gir høy skalerbarhet og tilgjengelighet uten enkelt feilpunkt. Cassandra-systemene kan spenne flere datasentre, noe som gir lav ventetid for alle tilkoblede klienter.
Dette er en tredelte opplæringsserie der jeg skal begynne med grunnlaget for Cassandra, ved hjelp av CQLSH for å lage tabeller og plater. Da skal jeg forklare de forskjellige datatypene som støttes av Cassandra, og så bruker vi et Go-klientbibliotek for å håndtere Cassandra-operasjoner programmatisk.
I denne første delen vil jeg dekke hvordan Cassandra datamodellen er lagt ut kort og utfører grunnleggende operasjoner ved hjelp av CQLSH.
For denne opplæringsserien antar jeg at leserne vil kunne installere Cassandra av seg selv på sine respektive maskiner, avhengig av operativsystemet.
Cassandra datamodellen følger kolonnefamiliemetoden, som lett kan forstås som å være analog med en relasjonell tabellstruktur, men på en NoSQL-måte. Beskrivelsen nedenfor skal gjøre det tydeligere:
Et nøkkelrom kan ses som den ytterste beholderen for data i Cassandra. Alle dataene i Cassandra bor i et nøkkelrom. Det kan ses som en database i RDBMS som er en samling av tabeller. I tilfelle av Cassandra er et nøkkelrom en samling av kolonnefamilier.
En kolonnefamilie kan ses som en samling av rader, og hver rad er en samling av kolonner. Det er analogt med et bord i RDBMS, men har noen forskjeller. Kolonnefamiliene er definert, men det er ikke nødvendig for hver rad å ha alle kolonnene, og kolonnene kan legges til eller fjernes fra en rad når og når det kreves.
Kolonnen er den grunnleggende dataenheten i Cassandra. Den har tre verdier: nøkkel- eller kolonnenavn, kolonneverdi og en tidsstempel.
En super kolonne er en spesiell type kolonne som lagrer et kart over andre underkolonner. Det gjør det enklere å lagre komplekse data, og gjør dataene også raskere, da hver kolonnefamilie i Cassandra er lagret i en enkelt fil på filsystemet.
CQLSH er standardskallet for interaksjon med Cassandra gjennom CQL (Cassandra Query Language). CQL ligner veldig på SQL (som hovedsakelig brukes til RDBMS) og gjør det derfor veldig enkelt for utviklere nye til Cassandra å få jobbe med det raskt. CQLSH leveres med alle Cassandra-pakker og bør allerede være installert på maskinen når du installerte Cassandra.
Som vi så i datamodellen beskrevet ovenfor, a KEYSPACE
er den ytre beholderen og bør opprettes før noe annet. For å lage den, kjør:
$ cqlsh localhost -e "CREATE KEYSPACE hvis ikke EXISTS k1 MED replikering = 'class': 'SimpleStrategy', 'replication_factor': '1' OG durable_writes = true;"
I ovennevnte kommando har jeg antatt at din Cassandra eksisterer på lokal vert
uten brukerautentisering. Jeg har laget en KEYSPACE
kalt k1
med replikering
og durable_writes
definert policy.
Hvis du har definert brukerautentisering, kan du kjøre:
$ cqlsh -u-p localhost -e "CREATE KEYSPACE hvis ikke EXISTS k1 MED replikering = 'class': 'SimpleStrategy', 'replication_factor': '1' og durable_writes = true;"
I kommandoen ovenfor, erstatt
og
med bekreftelsesinformasjonen din.
Kjører en kommando som dette kan være litt tungvint. En annen måte er å starte CQLSH-spørringen og deretter kjøre spørringer direkte i den.
$ cqlsh -u-p localhost koblet til testklyngen på 127.0.0.1:9042. [cqlsh 5.0.1 | Cassandra 3.9 | CQL spesifikasjon 3.4.2 | Native protokoll v4] Bruk HJELP for hjelp. cassandra @ cqlsh> CREATE KEYSPACE hvis ikke EXISTS k1 MED replikering = 'class': 'SimpleStrategy', 'replication_factor': '1' OG durable_writes = true;
Fortsett, jeg bruker ovennevnte metode for å kjøre spørringer. Før du kjører noen andre spørsmål, må vi fortelle CQLSH hvilken nøkkelplass som skal brukes.
cassandra @ cqlsh> BRUK k1; cassandra @ cqlsh: k1>
De replication_factor
for et nøkkelrom kan endres for å passe hvor mye replikering er nødvendig i henhold til replikasjonen klasse
.
cassandra @ cqlsh: k1> ALTER KEYSPACE "k1" MED REPLIKASJON = 'class': 'SimpleStrategy', 'replication_factor': 3;
Et bord svarer til en kolonnefamilie i Cassandra. Cassandra støtter mange forskjellige datatyper for lagring av data, som jeg vil dekke i detalj i neste del av denne opplæringsserien. For å lage et bord, bare kjør CREATE TABLE
kommando.
cassandra @ cqlsh: k1> CREATE TABLE person (id tekst, navn tekst, etternavn tekst, PRIMARY KEY (id));
For å sjekke hvordan strukturen på bordet ser ut en gang opprettet:
cassandra @ cqlsh: k1> DESCRIBE person; CREATE TABLE k1.person (id tekst PRIMARY KEY, navn tekst, etternavn tekst) MED bloom_filter_fp_chance = 0.01 OG caching = 'keys': 'ALL', 'rows_per_partition': 'NONE' og kommentar = "AND compaction = ' klasse ':' org.apache.cassandra.db.compaction.SizeTieredCompactionStrategy ',' max_threshold ':' 32 ',' min_threshold ':' 4 ' OG komprimering = ' chunk_length_in_kb ':' 64 ',' class ' org.apache.cassandra.io.compress.LZ4Compressor ' OG crc_check_chance = 1.0 OG dclocal_read_repair_chance = 0,1 OG default_time_to_live = 0 OG gc_grace_seconds = 864000 OG max_index_interval = 2048 OG memtable_flush_period_in_ms = 0 OG min_index_interval = 128 OG read_repair_chance = 0.0 OG speculative_retry =' 99PERCENTILE ';
La oss si at vi vil endre bordet for å lagre e-posten til personen også.
cassandra @ cqlsh: k1> ALTER TABLE person ADD e-posttekst; cassandra @ cqlsh: k1> DESCRIBE person; CREATE TABLE k1.person (id tekst PRIMARY KEY, e-posttekst, navn tekst, etternavn tekst) MED bloom_filter_fp_chance = 0.01 OG caching = 'keys': 'ALL', 'rows_per_partition': 'NONE' og kommentar = "OG komprimering = 'klasse': 'org.apache.cassandra.db.compaction.SizeTieredCompactionStrategy', 'max_threshold': '32', 'min_threshold': '4' OG komprimering = 'chunk_length_in_kb': '64', 'klasse ':' org.apache.cassandra.io.compress.LZ4Compressor ' OG crc_check_chance = 1.0 OG dclocal_read_repair_chance = 0,1 OG default_time_to_live = 0 OG gc_grace_seconds = 864000 OG max_index_interval = 2048 OG memtable_flush_period_in_ms = 0 OG min_index_interval = 128 OG read_repair_chance = 0.0 OG spekulativ_retry = '99PERCENTILE';
Sette inn data i et Cassandra-bord ved hjelp av CQL, er ganske grei.
cassandra @ cqlsh: k1> VELG * FRA person; id | e-post | navn | etternavn ---- + ------- + ------ + --------- (0 rader) cassandra @ cqlsh: k1> INSERT INTO person (id, navn, etternavn, e-post) verdier ('001', 'Shalabh', 'Aggarwal', '[email protected]'); cassandra @ cqlsh: k1> VELG * FRA person; id | e-post | navn | etternavn ----- + ----------------------------- + --------- + --- ------- 001 | [email protected] | Shalabh | Aggarwal
I denne tabellen har vi alle feltene for kun én datatype. Ting blir litt komplekse når vi bruker forskjellige datatyper eller sammensatte datatyper. Dette blir en diskusjon i neste del av denne serien.
La oss si at vi vil oppdatere verdien i kolonnen e-post
til noe annet.
cassandra @ cqlsh: k1> UPDATE person SET email = "[email protected]" hvor; cassandra @ cqlsh: k1> VELG * FRA person; id | e-post | navn | etternavn ----- + -------------------------- + --------- + ------ ---- 001 | [email protected] | Shalabh | Aggarwal
Data i en tabell kan bare forespørres ved å bruke Å VELGE
uttalelser.
La oss sette inn noen flere poster og spørre dem.
cassandra @ cqlsh: k1> INSERT TIL person (id, navn, etternavn, e-post) VÆRDIER ('002', 'John', 'Doe', '[email protected]'); cassandra @ cqlsh: k1> INSERT TIL person (id, navn, etternavn, e-post) VÆRDIER ('003', 'Harry', 'Potter', '[email protected]'); cassandra @ cqlsh: k1> VELG * fra person; id | e-post | navn | etternavn ----- + -------------------------- + --------- + ------ ---- 002 | [email protected] | John | Doe 001 | [email protected] | Shalabh | Aggarwal 003 | [email protected] | Harry | Potter (3 rader) cassandra @ cqlsh: k1> VELG navn fra person WHERE; navn --------- Shalabh (1 rader) cassandra @ cqlsh: k1> VELG navn fra person WHERE id IN ('001', '002'); navn --------- Shalabh John (2 rader)
Mer komplekse spørreoperatører som inequality operatører kan også brukes, eller flere HVOR
forholdene kan sammenkobles med OG
/ELLER
, etc.
Cassandra er et av de mest populære NoSQL-databasesystemene som er tilgjengelig, og er den beste bygningen som skal brukes i distribuerte miljøer. Å håndtere Cassandra er ganske enkelt for nybegynnere med litt kunnskap om RDBMS og SQL.
CQL er svært lik SQL i en viss grad, og CQLSH gjør testing og feilsøking mye lettere. I neste del av denne serien vil jeg dekke de forskjellige datatypene som Cassandra gir og hvordan de skal håndtere dem.