Programmering

CockroachDB anmeldelse: Distribuert SQL skifter til høyt gir

Da jeg gjennomgikk CockroachDB tidlig i 2018, fant jeg ut at den distribuerte SQL-databasen, bygget på toppen av en transaksjonell og konsistent nøkkelverdilager, var designet for å overleve feil på disk, maskin, rack og til og med datasenter med minimal latensforstyrrelse og ingen manuell inngrep. Det er fortsatt sant.

På den tiden hadde CockroachDB tre store underskudd, etter min mening: Begrenset optimalisering av SQL JOIN-spørringer, ingen fulladert tjeneste og ingen støtte for JSON- eller Protobuf-datatyper. Jeg er glad for å kunne rapportere at alle disse manglene siden er utbedret. JOINs bruker nå en kostnadsbasert optimaliseringsverktøy, CockroachCloud er i beta, og en JSONB-datatype er implementert.

Hva mangler fortsatt i CockroachDB? Ganske mye, hvis du bryr deg om PostgreSQL-kompatibilitet:

  • Lagrede prosedyrer og funksjoner
  • Utløsere
  • arrangementer
  • Brukerdefinerte funksjoner
  • Fulltekstfunksjoner og indekser
  • Geospatiale funksjoner og indekser
  • Slipp primærnøkkel
  • XML-funksjoner
  • Lagringspunkter
  • Privilegier på kolonnenivå
  • OPPRETT MIDLERTIDIG syntaks
  • XA syntaks

De fleste eksisterende OLTP PostgreSQL-applikasjoner kan porteres til CockroachDB med noen løsninger på applikasjonsnivå. Hvis du har brukt geospatiale funksjoner (PostGIS) eller fulltekstsøk, vet jeg derimot ikke om en god måte å implementere dem i den nåværende versjonen av CockroachDB.

Det er et sporingsproblem for geospatiale indekser og funksjoner, men selv om det har vært åpent i flere år, er statusen til geospatiale funksjoner bare "potensiell". Det har vært en brukerundersøkelse om ønsket geospatial bruk, men det er ikke det samme som å love funksjonen.

Fulltekstindeksering er "planlagt", men er ennå ikke på veikartet. Flere mennesker har foreslått å integrere CockroachDB med Bleve for å oppnå dette. Igjen, ingen løfter.

I juni 2019 endret Cockroach sin OSS-lisens fra APL-2 til en "ekstremt tillatende versjon av Business Source License (BSL)." Dette var i utgangspunktet et svar på at Amazon Web Services tilbyr en forked versjon av ElasticSearch som en betalt tjeneste, og lar Cockroach tilby sin egen database som en tjeneste uten å bekymre seg for AWS eller noen annen skyleverandør som stjeler torden.

CockroachCloud er en fullverdig og fullt administrert tjeneste opprettet og eid av Cockroach Labs som hevder å gjøre distribusjon, skalering og administrering av CockroachDB uanstrengt. CockroachCloud kjører for tiden på Amazon Web Services og Google Cloud Platform.

CockroachDB installasjon og grunnleggende testing

Jeg installerte CockroachDB 19.2.2 på min MacBook Pro ved hjelp av Homebrew. Jeg avinstallerte først eksplisitt den gamle versjonen (1.1.3) jeg hadde igjen fra den første gjennomgangen.

Homebrew er spesifikk for Mac-maskiner. Det er bare en av fem måter å installere CockroachDB på Mac, de andre er å laste ned binær; bruk Kubernetes; bruk Docker; og bygge fra kilde. Linux og Windows har færre installasjonsalternativer.

martinheller @ Martins-Retina-MacBook ~% bryg avinstaller kakerlakk

Avinstallere /usr/local/Cellar/cockroach/1.1.3 ... (5 filer, 72.9MB)

martinheller @ Martins-Retina-MacBook ~% bryg installer cockroachdb / tap / cockroach

==>Tapping cockroachdb / tap

ekstern: Oppregning av objekter: 6, ferdig.

ekstern: Telle objekter: 100% (6/6), ferdig.

fjernkontroll: Komprimering av objekter: 100% (5/5), ferdig.

fjernkontroll: Totalt 6 (delta 0), gjenbrukt 3 (delta 0), pakket gjenbrukt 0

Pakke ut gjenstander: 100% (6/6), ferdig.

Tappet 1 formel (32 filer, 45,6 KB).

==>Installere kakerlakk fra kakerlakk / kran

==>Nedlasting //binaries.cockroachdb.com/cockroach-v19.2.2.darwin-10.9-a

==>/usr/local/Cellar/cockroach/19.2.2/bin/cockroach gen man - sti = / usr / lokal / C

==>/usr/local/Cellar/cockroach/19.2.2/bin/cockroach gen autocomplete bash --out

==>/usr/local/Cellar/cockroach/19.2.2/bin/cockroach gen autocomplete zsh --out =

==>Advarsler

start en klynge med en node som lagrer dataene under:

/ usr / lokal / var / kakerlakk /

I stedet for standardporten 8080 betjener noden admin-brukergrensesnittet ved:

// lokal vert: 26256

IKKE bruk denne klyngen til å lagre data du bryr deg om; det går i usikkerhet

modus og kan eksponere data offentlig i f.eks. et DNS-gjenbindende angrep. Å løpe

CockroachDB sikkert, se:

//www.cockroachlabs.com/docs/secure-a-cluster.html

Fullføring av bash er installert for å:

/usr/local/etc/bash_completion.d

zsh-kompletteringer er installert for å:

/ usr / local / share / zsh / site-funksjoner

For å ha startet start cockroachdb / tap / cockroach nå og start på nytt ved pålogging:

bryggetjenester starter kakerlakk / kran / kakerlakk

Eller hvis du ikke vil / trenger en bakgrunnstjeneste, kan du bare kjøre:

start på kakerlakk - usikker

==>Sammendrag

==>`bryggeopprydding` har ikke blitt kjørt på 30 dager, kjører nå ...

Fjerner: /Users/martinheller/Library/Caches/Homebrew/node--12.12.0.catalina.bottle.tar.gz ... (14.8MB)

Beskjærte 18 symbolske lenker fra / usr / local

martinheller @ Martins-Retina-MacBook ~% kakerlakk start-single-node --insecure

*

* ADVARSEL: LØPER I INSIKRE MODUS!

*

* - Klyngen din er åpen for alle klienter som har tilgang.

* - Enhver bruker, til og med root, kan logge på uten å oppgi passord.

* - Enhver bruker, som kobler til som root, kan lese eller skrive data i klyngen din.

* - Det er ingen nettverkskryptering eller autentisering, og dermed ingen konfidensialitet.

*

* Sjekk ut hvordan du kan sikre klyngen din: //www.cockroachlabs.com/docs/v19.2/secure-a-cluster.html

*

*

* ADVARSEL: verken --listen-addr eller --advertise-addr ble spesifisert.

* Serveren vil annonsere "Martins-Retina-MacBook.local" til andre noder, er dette rutbart?

*

* Vurder å bruke:

* - for kun servere: --listen-addr = localhost

* - for klynger med flere noder: --advertise-addr =

*

*

*

* INFO: Replikering ble deaktivert for denne klyngen.

* Når / hvis du legger til noder i fremtiden, oppdater sonekonfigurasjonene for å øke replikasjonsfaktoren.

*

CockroachDB node starter kl. 30-12-2019 16:30: 35.369965 +0000 UTC (tok 0,6 sek.)

bygg: CCL v19.2.2 @ 2019/12/11 01:27:47 (go1.12.12)

webui: //Martins-Retina-MacBook.local:8080

sql: postgresql: //[email protected]: 26257sslmode = deaktiver

RPC-klientflagg: kakerlakk --host = Martins-Retina-MacBook.local: 26257 --insecure

logger: / Brukere / martinheller / kakerlakk-data / logger

temp dir: / Brukere / martinheller / kakerlakk-data / kakerlakk-temp884406444

ekstern I / O-bane: / Brukere / martinheller / kakerlakk-data / ekstern

lagre [0]: sti = / brukere / martinheller / kakerlakk-data

status: initialisert ny klynge

clusterID: 9f7141f8-d53d-49e3-9a5a-264de8cfa626

nodeID: 1

På dette tidspunktet var jeg i stand til å åpne web-UI-lenken vist ovenfor og se det nettbaserte administrasjonsgrensesnittet vist i skjermbildet nedenfor.

For å røyktest installasjonen fulgte jeg den første øvelsen i Cockroach University i en annen Terminal-fane, som vist nedenfor. Jeg syntes opplæringen var bra, om enn presentert i korte videoer i stedet for tekst, og var rettet mot nybegynnere i stedet for erfarne DBA-er eller utviklere. Den praktiske delen starter med å bruke arbeidsmengde verktøy for å lage en liten database, movr, og fortsetter deretter i CockroachDB SQL-skallet.

martinheller @ Martins-Retina-MacBook ~% kakerlakk arbeidsmengde init movr

I191230 16: 55: 34.351650 1 arbeidsbelastning / arbeidsbelastning / dataload.go: 135 importerte brukere (0 sekunder, 50 rader)

I191230 16: 55: 34.356751 1 arbeidsmengde / arbeidsmengde / dataload.go: 135 importerte biler (0s, 15 rader)

I191230 16: 55: 34.382023 1 arbeidsmengde / arbeidsmengde / dataload.go: 135 importerte turer (0s, 500 rader)

I191230 16: 55: 34.404733 1 arbeidsmengde / arbeidsmengde / dataload.go: 135 importerte kjøretøylokaliseringshistorier (0s, 1000 rader)

I191230 16: 55: 34.429203 1 arbeidsmengde / arbeidsmengde / dataload.go: 135 importerte promo_codes (0s, 1000 rader)

martinheller @ Martins-Retina-MacBook ~% kakerlakk sql --insecure

#

# Velkommen til CockroachDB SQL-skallet.

# Alle utsagn må avsluttes med semikolon.

# For å avslutte, skriv: \ q.

#

# Serverversjon: CockroachDB CCL v19.2.2 (x86_64-apple-darwin14, bygget 2019/12/11 01:27:47, go1.12.12) (samme versjon som klient)

# Klynge-ID: 9f7141f8-d53d-49e3-9a5a-264de8cfa626

#

# Tast inn \? for en kort introduksjon.

#

root @: 26257 / defaultdb> VIS databaser;

database_name

+---------------+

standarddb

movr

postgres

system

(4 rader)

Tid: 2.028ms

root @: 26257 / defaultdb> VIS TABELLER FRA movr;

tabellnavn

+----------------------------+

promo_codes

rir

user_promo_codes

brukere

vehicle_location_histories

kjøretøy

(6 rader)

Tid: 2.863ms

root @: 26257 / defaultdb> VELG * FRA movr.users LIMIT 10;

id | by | navn | adresse | kredittkort

+--------------------------------------+-----------+---------------------+-------------------------------+-------------+

ae147ae1-47ae-4800-8000-000000000022 | amsterdam | Tyler Dalton | 88194 Angela Gardens Suite 94 | 4443538758

b3333333-3333-4000-8000-000000000023 | amsterdam | Dillon Martin | 29590 Butler Plain Apt. 25 | 3750897994

b851eb85-1eb8-4000-8000-000000000024 | amsterdam | Deborah Carson | 32768 Eric Divide Suite 88 | 8107478823

bd70a3d7-0a3d-4000-8000-000000000025 | amsterdam | David Stanton | 80015 Mark Views Suite 96 | 3471210499

c28f5c28-f5c2-4000-8000-000000000026 | amsterdam | Maria Weber | 14729 Karen Radial | 5844236997

1eb851eb-851e-4800-8000-000000000006 | boston | Brian Campbell | 92025 Yang Village | 9016427332

23d70a3d-70a3-4800-8000-000000000007 | boston | Carl Mcguire | 60124 Palmer Mews Apt. 49 | 4566257702

28f5c28f-5c28-4600-8000-000000000008 | boston | Jennifer Sanders | 19121 Padilla Brooks Apt. 12 | 1350968125

2e147ae1-47ae-4400-8000-000000000009 | boston | Cindy Medina | 31118 Allen Gateway Apt. 60 | 6464362441

33333333-3333-4400-8000-00000000000a | boston | Daniel Hernandez MD | 51438 Janet Valley | 0904722368

(10 rader)

Tid: 2.977ms

Opplæringen fortsetter derfra for å lære mer om CockroachDB, inkludert grunnleggende CockroachDB-klynger og det grunnleggende om å kjøre SQL i stor skala.

Kakerlakk

Å spinne opp en CockroachDB-node er ganske enkelt, som vi nettopp så. Å spinne opp en klynge med tre eller flere noder tar litt mer innsats og planlegging, spesielt hvis du oppretter klynger med flere regioner og trenger å stille inn bordtopologien. Hvis du trenger hjelp, setter salgsingeniørene fra Cockroach gjerne inn.

På den annen side er å lage en klynge i CockroachCloud et spørsmål om å fylle ut et webskjema, som vist på skjermbildet nedenfor. For øyeblikket kan du bare opprette en enkeltregionsklynge fra dette selvbetjeningsgrensesnittet; Hvis du trenger klynger med flere regioner, større noder eller mer enn 24 noder per klynge, må du kontakte Cockroach Labs support for å skaffe dem til deg i CockroachCloud.

CockroachCloud-klynger er så isolerte og sikre som mulig. De er enslige leietakere, hver i sin egen underkonto og VPC, og VPC-ene er brannmur fra hverandre og fra andre eksterne forbindelser, med mindre de er godkjent for SQL- og web-UI-porter. Alle tilkoblinger til klyngen over internett bruker TLS 1.2.

Merk at Cockroach Labs foreløpig ikke støtter private skyer. De har imidlertid planer om å gjøre det i fremtiden.

Som en tommelfingerregel anslår Cockroach Labs at hver vCPU kan håndtere rundt 1000 TPS. Estimatene gitt på klyngesettingssiden mens du gjør klargjøringen, er sannsynligvis mer nøyaktige, men er gitt i forskjellige enheter (IOPS i stedet for TPS). For tiden er en 2-vCPU-node på GCP estimert til 1800 IOPS, og en 2-vCPU-node på AWS er ​​estimert til 600 IOPS.

CockroachDB ytelsesforbedringer

Da jeg så på CockroachDB 1.1.3 i begynnelsen av 2018, var implementeringen av SQL JOIN begrenset til hash-join og en heuristisk planlegger; spørringsytelsen ble ofte skalert lineært, men var ingenting som den nyeste teknikken - den var nærmere ytelsen til SQLite. I november 2018 hadde CockroachDB 2.1 en kostnadsbasert spørreoptimerer som var konkurransedyktig med PostgreSQL for JOIN-ytelse. Fra versjon 19.2, etter et år med utvikling (og bytte til kalenderversjonering), alle SQL-spørsmål bruker den kostnadsbaserte optimalisereren, til og med DDL-setninger og vindusfunksjoner. Til støtte for den kostnadsbaserte optimalisereren genererer CockroachDB automatisk tabellstatistikk.

$config[zx-auto] not found$config[zx-overlay] not found