Programmering

CockroachDB anmeldelse: Distribueret SQL skifter til højt gear

Da jeg gennemgik CockroachDB tidligt i 2018, fandt jeg ud af, at den distribuerede SQL-database, bygget oven på en transaktionsmæssig og konsistent nøgleværdilager, var designet til at overleve fejl på disk, maskine, rack og endda datacenter med minimal latensforstyrrelse og ingen manuel indgriben. Det er alt sammen sandt.

På det tidspunkt havde CockroachDB efter min mening tre store underskud: Begrænset optimering af SQL JOIN-forespørgsler, ingen fuldt administreret service og ingen support til JSON- eller Protobuf-datatyper. Jeg er glad for at kunne rapportere, at alle disse mangler siden er blevet afhjulpet. JOINs bruger nu en omkostningsbaseret optimering, CockroachCloud er i beta, og en JSONB-datatype er blevet implementeret.

Hvad mangler der stadig i CockroachDB? En hel del, hvis du er interesseret i PostgreSQL-kompatibilitet:

  • Gemte procedurer og funktioner
  • Udløsere
  • Begivenheder
  • Brugerdefinerede funktioner
  • Fuldtekstfunktioner og indekser
  • Geospatiale funktioner og indekser
  • Slip primærnøgle
  • XML-funktioner
  • Savepoints
  • Privilegier på kolonniveau
  • Opret syntaks for MIDLERTIDIG TABEL
  • XA-syntaks

De fleste eksisterende OLTP PostgreSQL-applikationer kan overføres til CockroachDB med nogle løsninger på applikationsniveau. Hvis du har brugt geospatiale funktioner (PostGIS) eller søgning i fuldtekst, kender jeg dog ikke til en god måde at implementere dem på i den aktuelle version af CockroachDB.

Der er et sporingsproblem for geospatiale indekser og funktioner, men selvom det har været åbent i flere år, er status for geospatiale funktioner kun "potentielt". Der har været en brugerundersøgelse om ønskede geospatiale brugssager, men det er ikke det samme som at love funktionen.

Fuldtekstindeksering er "planlagt", men endnu ikke på køreplanen. Flere mennesker har foreslået at integrere CockroachDB med Bleve for at opnå dette. Igen ingen løfter.

I juni 2019 ændrede Cockroach sin OSS-licens fra APL-2 til en "ekstremt tilladelig version af Business Source License (BSL)." Dette var dybest set som svar på Amazon Web Services, der tilbyder en forked version af ElasticSearch som en betalt tjeneste og giver Cockroach mulighed for at tilbyde sin egen database som en tjeneste uden at bekymre sig om AWS eller nogen anden cloud-leverandør, der stjæler sin torden.

CockroachCloud er en fuldt hostet og fuldt administreret tjeneste oprettet og ejet af Cockroach Labs, der hævder at gøre implementering, skalering og styring af CockroachDB ubesværet. CockroachCloud kører i øjeblikket på Amazon Web Services og Google Cloud Platform.

CockroachDB installation og grundlæggende test

Jeg installerede CockroachDB 19.2.2 på min MacBook Pro ved hjælp af Homebrew. Jeg afinstallerede først eksplicit den gamle version (1.1.3), som jeg havde tilbage fra min første gennemgang.

Homebrew er specifikt for Mac-computere. Det er kun en af ​​fem måder at installere CockroachDB på Macs, de andre er at downloade binærprogrammet; brug Kubernetes; brug Docker; og bygge fra kilde. Linux og Windows har færre installationsmuligheder.

martinheller @ Martins-Retina-MacBook ~% bryg afinstaller kakerlak

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

martinheller @ Martins-Retina-MacBook ~% bryg installer kakerlakdb / tap / kakerlak

==>Trykker på cockroachdb / tap

fjernbetjening: Optælling af objekter: 6, færdig.

fjernbetjening: Tæller objekter: 100% (6/6), færdig.

fjernbetjening: Komprimering af objekter: 100% (5/5), færdig.

fjernbetjening: I alt 6 (delta 0), genbrugt 3 (delta 0), genbrugt pakke 0

Udpakning af genstande: 100% (6/6), færdig.

Trykte på 1 formel (32 filer, 45,6 KB).

==>Installation af kakerlak fra cockroachdb / tap

==>Download //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, der gemmer sine data under:

/ usr / lokal / var / kakerlak /

I stedet for standardporten på 8080 betjener noden sin admin-brugergrænseflade ved:

// localhost: 26256

Brug IKKE denne klynge til at gemme data, du holder af; det kører i usikkerhed

tilstand og kan eksponere data offentligt i f.eks. et DNS-genbindingsangreb. At løbe

CockroachDB sikkert, se:

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

Bash-færdiggørelse er installeret til:

/usr/local/etc/bash_completion.d

zsh-kompletteringer er installeret til:

/ usr / local / share / zsh / site-funktioner

For at have startet start cockroachdb / tap / cockroach nu og genstart ved login:

bryggeservices starter kakerlak / tap / kakerlak

Eller hvis du ikke ønsker / har brug for en baggrundstjeneste, kan du bare køre:

start på kakerlak - usikker

==>Resumé

==>"brygoprydning" er ikke kørt på 30 dage, kører nu ...

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

Beskærede 18 symbolske links fra / usr / local

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

*

* ADVARSEL: Kører i usikker tilstand!

*

* - Din klynge er åben for enhver klient, der har adgang.

* - Enhver bruger, endda root, kan logge ind uden at angive en adgangskode.

* - Enhver bruger, der forbinder som root, kan læse eller skrive alle data i din klynge.

* - Der er ingen netværkskryptering eller godkendelse og dermed ingen fortrolighed.

*

* Tjek hvordan du beskytter din klynge: //www.cockroachlabs.com/docs/v19.2/secure-a-cluster.html

*

*

* ADVARSEL: hverken --listen-addr eller --advertise-addr blev specificeret.

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

*

* Overvej at bruge:

* - til lokale servere kun: --listen-addr = localhost

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

*

*

*

* INFO: Replikering blev deaktiveret for denne klynge.

* Når / hvis der tilføjes noder i fremtiden, opdater zonekonfigurationer for at øge replikationsfaktoren.

*

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

build: 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-klientflag: kakerlak --host = Martins-Retina-MacBook.local: 26257 --insecure

logs: / Brugere / martinheller / kakerlak-data / logs

temp dir: / Brugere / martinheller / kakerlak-data / kakerlak-temp884406444

ekstern I / O-sti: / Brugere / martinheller / kakerlak-data / ekstern

gem [0]: sti = / Brugere / martinheller / kakerlak-data

status: initialiseret ny klynge

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

nodeID: 1

På dette tidspunkt var jeg i stand til at åbne web-UI-linket vist ovenfor og se den webbaserede styringsgrænseflade vist i skærmbilledet nedenfor.

For at ryge-teste installationen fulgte jeg den første øvelse i Cockroach University i en anden Terminal-fane, som vist nedenfor. Jeg fandt vejledningen god, omend præsenteret i korte videoer snarere end tekst, og var beregnet til begyndere snarere end erfarne DBA'er eller udviklere. Den praktiske del starter med at bruge arbejdsbyrde værktøj til at oprette en lille database, movr, fortsætter derefter i CockroachDB SQL-shell.

martinheller @ Martins-Retina-MacBook ~% kakerlak arbejdsbelastning init movr

I191230 16: 55: 34.351650 1 workload / workloadsql / dataload.go: 135 importerede brugere (0s, 50 rækker)

I191230 16: 55: 34.356751 1 workload / workloadsql / dataload.go: 135 importerede køretøjer (0s, 15 rækker)

I191230 16: 55: 34.382023 1 workload / workloadsql / dataload.go: 135 importerede forlystelser (0s, 500 rækker)

I191230 16: 55: 34.404733 1 arbejdsbyrde / workloadsql / dataload.go: 135 importerede køretøjs-lokaliseringshistorier (0s, 1000 rækker)

I191230 16: 55: 34.429203 1 arbejdsbelastning / workloadsql / dataload.go: 135 importerede promo_codes (0s, 1000 rækker)

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

#

# Velkommen til CockroachDB SQL shell.

# Alle udsagn skal afsluttes med et semikolon.

# For at afslutte, skriv: \ q.

#

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

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

#

# Gå ind \? til en kort introduktion.

#

root @: 26257 / defaultdb> VIS databaser;

database_navn

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

standarddb

movr

postgres

system

(4 rækker)

Tid: 2.028ms

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

tabelnavn

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

promo_codes

forlystelser

user_promo_codes

brugere

køretøjsplacering_historier

køretøjer

(6 rækker)

Tid: 2.863ms

root @: 26257 / defaultdb> VÆLG * FRA movr.users LIMIT 10;

id | by | navn | adresse | kreditkort

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

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-dale | 0904722368

(10 rækker)

Tid: 2.977ms

Vejledningen fortsætter derfra for at lære mere om CockroachDB, herunder de grundlæggende i CockroachDB-klynger og det grundlæggende i at køre SQL i skala.

Kakerlaksky

At spinde en CockroachDB-node er ret enkel, som vi lige så. At spinde en klynge på tre eller flere noder kræver lidt mere indsats og planlægning, især hvis du opretter klynger med flere regioner og har brug for at indstille bordtopologien. Hvis du har brug for hjælp, er kokkerlakens salgsingeniører glade for at komme ind.

På den anden side er oprettelse af en klynge i CockroachCloud et spørgsmål om at udfylde en webformular som vist på skærmbilledet nedenfor. I øjeblikket kan du kun oprette en enkelt regionsklynge fra denne selvbetjeningsgrænseflade; hvis du har brug for klynger med flere regioner, større noder eller mere end 24 noder pr. klynge, skal du kontakte Cockroach Labs support for at sørge for dem i CockroachCloud.

Kakerlaksklynger er så isolerede og sikre som muligt. De er enlige lejere, hver på sin egen underkonto og VPC, og VPC'erne er firewalled fra hinanden og fra enhver anden ekstern forbindelse, medmindre de er hvidlistet til SQL- og web-UI-porte. Alle forbindelser til klyngen over internettet bruger TLS 1.2.

Bemærk, at Cockroach Labs i øjeblikket ikke understøtter private skyer. De har dog planer om at gøre det i fremtiden.

Som en tommelfingerregel estimerer Cockroach Labs, at hver vCPU kan håndtere omkring 1000 TPS. Estimaterne på siden med oprettelse af klyngen, mens du foretager klargøringen, er sandsynligvis mere nøjagtige, men er angivet i forskellige enheder (IOPS snarere end TPS). I øjeblikket estimeres en 2-vCPU-node på GCP til 1800 IOPS, og en 2-vCPU-node på AWS anslås til 600 IOPS.

CockroachDB ydeevne forbedringer

Da jeg kiggede på CockroachDB 1.1.3 i begyndelsen af ​​2018, var dens SQL JOIN-implementering begrænset til hash-sammenføjninger og en heuristisk planlægger; dens forespørgsel ydeevne ofte skaleres lineært, men var ikke noget i retning af state of the art - det var tættere på udførelsen af ​​SQLite. I november 2018 havde CockroachDB 2.1 en omkostningsbaseret forespørgselsoptimering, der var konkurrencedygtig med PostgreSQL for JOIN-ydeevne. Fra og med version 19.2, efter endnu et års udvikling (og skift til kalenderversionering), alle SQL-forespørgsler bruger den omkostningsbaserede optimering, endda DDL-udsagn og vinduesfunktioner. Til støtte for den omkostningsbaserede optimering genererer CockroachDB automatisk tabelstatistikker.

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