Programmēšana

CockroachDB pārskats: Izplatītais SQL pārslēdzas uz augstiem pārnesumiem

Kad es pārskatīju CockroachDB 2018. gada sākumā, es atklāju, ka izplatītā SQL datu bāze, kas veidota virs darījumu un konsekventa atslēgu vērtību krātuves, tika izstrādāta, lai izdzīvotu diska, mašīnas, plaukta un pat datu centra kļūmes ar minimāliem kavēšanās traucējumiem un bez manuāla iejaukšanās. Tas viss joprojām ir taisnība.

Tajā laikā CockroachDB, manuprāt, bija trīs lieli deficīti: ierobežota SQL JOIN vaicājumu optimizācija, nav pilnībā pārvaldīta pakalpojuma un nav atbalsta JSON vai Protobuf datu tipiem. Ar prieku ziņoju, ka visi šie trūkumi kopš tā laika ir novērsti. JOINs tagad izmanto uz izmaksām balstītu optimizētāju, CockroachCloud ir beta versijā un ir ieviests JSONB datu tips.

Kas vēl trūkst CockroachDB? Diezgan daudz, ja jums rūp PostgreSQL saderība:

  • Saglabātās procedūras un funkcijas
  • Trigeri
  • Notikumi
  • Lietotāja definētas funkcijas
  • Pilna teksta funkcijas un rādītāji
  • Ģeotelpiskās funkcijas un rādītāji
  • Nometiet primāro atslēgu
  • XML funkcijas
  • Savepoints
  • Kolonnu līmeņa privilēģijas
  • IZVEIDOT PAGAIDU TABULAS sintaksi
  • XA sintakse

Lielāko daļu esošo OLTP PostgreSQL lietojumprogrammu var pārnest uz CockroachDB, izmantojot dažus risinājumus lietojumprogrammu līmenī. Tomēr, ja esat izmantojis ģeotelpiskās funkcijas (PostGIS) vai pilna teksta meklēšanu, es nezinu labu veidu, kā tos ieviest pašreizējā CockroachDB versijā.

Ģeotelpisko indeksu un funkciju izsekošanas problēma pastāv, taču, lai arī ģeotelpisko objektu statuss ir atvērts vairākus gadus, tas ir tikai “potenciāls”. Ir notikusi lietotāju aptauja par vēlamajiem ģeotelpiskās izmantošanas gadījumiem, taču tas nav tas pats, kas solīt šo funkciju.

Pilna teksta indeksēšana ir “plānota”, taču tā vēl nav iekļauta ceļvedī. Vairāki cilvēki ir ieteikuši integrēt CockroachDB ar Bleve, lai to paveiktu. Atkal nav solījumu.

2019. gada jūnijā Prusaks nomainīja OSS licenci no APL-2 uz “ļoti atļautu biznesa avota licences (BSL) versiju”. Tas galvenokārt bija atbilde uz Amazon Web Services, kas piedāvāja ElasticSearch dakšu versiju kā apmaksātu pakalpojumu, un ļauj Tarakānam piedāvāt savu datu bāzi kā pakalpojumu, neuztraucoties par AWS vai jebkura cita mākoņa pārdevēja nozagšanu.

CockroachCloud ir pilnībā mitināts un pilnībā pārvaldīts pakalpojums Cockroach Labs izveidotais un piederošais pakalpojums, kas apgalvo, ka CockroachDB izvietošana, mērogošana un pārvaldīšana ir bez piepūles. CockroachCloud pašlaik darbojas Amazon Web Services un Google Cloud Platform.

CockroachDB uzstādīšana un pamata pārbaude

Es instalēju CockroachDB 19.2.2 savā MacBook Pro, izmantojot Homebrew. Vispirms es skaidri atinstalēju veco versiju (1.1.3), kas man bija palikusi pāri no sākotnējās pārskatīšanas.

Homebrew ir raksturīgs tikai Mac datoriem. Tas ir tikai viens no pieciem veidiem, kā instalēt CockroachDB Mac datoros, pārējie ir lejupielādēt bināro; izmantot Kubernetes; izmantot Docker; un veidot no avota. Linux un Windows ir mazāk instalēšanas iespēju.

martinheller @ Martins-Retina-MacBook ~% pagatavo atinstalēt prusaku

Notiek faila /usr/local/Cellar/cockroach/1.1.3 ... atinstalēšana ... (5 faili, 72,9 MB)

martinheller @ Martins-Retina-MacBook ~% brūvēt instalēt prusaku / tap / prusaku

==>Pieskaroties tarakānam / pieskarieties

tālvadība: Objektu uzskaitīšana: 6, izdarīts.

tālvadība: objektu skaitīšana: 100% (6/6), pabeigta.

tālvadība: Objektu saspiešana: 100% (5/5), pabeigta.

tālvadības pults: kopā 6 (delta 0), atkārtoti izmantota 3 (delta 0), iepakojumā atkārtoti izmantota 0

Objektu izpakošana: 100% (6/6), darīts.

Pieskaries 1 formulai (32 faili, 45,6 KB).

==>Prusaku instalēšana no tarakāna / pieskarieties

==>Lejupielādējot //binaries.cockroachdb.com/cockroach-v19.2.2.darwin-10.9-a

==>/usr/local/Cellar/cockroach/19.2.2/bin/cockroach gen man --path = / usr / local / 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 =

==>Brīdinājumi

startējiet viena mezgla kopu, kas datus glabā zem:

/ usr / local / var / tarakāns /

Noklusējuma porta 8080 vietā mezgls savu administratora lietotāja interfeisu apkalpo:

// vietējais saimnieks: 26256

NELIETOJIET šo kopu sev svarīgu datu glabāšanai; tas darbojas nedroši

režīmā un var publiski atklāt datus, piemēram, DNS atkārtoti atsaucošs uzbrukums. Skriet

PrusaksDB droši, lūdzu, skatiet:

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

Bash pabeigšana ir instalēta, lai:

/usr/local/etc/bash_completion.d

zsh pabeigšana ir instalēta:

/ usr / local / share / zsh / site-functions

Lai palaišana sāktu tarakānu / krānu / prusaku tagad un restartētu, piesakoties:

alus pagatavošanas pakalpojumi sākas tarakānsdb / tap / tarakāns

Vai arī, ja nevēlaties / nav nepieciešams fona pakalpojums, varat vienkārši palaist:

prusaku sākums - nedrošs

==>Kopsavilkums

==>`alus tīrīšana` nav veikta 30 dienas, darbojas tagad ...

Notiek noņemšana: /Users/martinheller/Library/Caches/Homebrew/node--12.12.0.catalina.bottle.tar.gz ... (14.8MB)

Atzarotas 18 simboliskas saites no / usr / local

martinheller @ Martins-Retina-MacBook ~% tarakānu sākums-viens mezgls - nedrošs

*

* BRĪDINĀJUMS: BRAUCIET DROŠĀ REŽĪMĀ!

*

* - jūsu kopa ir atvērta jebkuram klientam, kurš var piekļūt.

* - Jebkurš lietotājs, pat root, var pieteikties, nenorādot paroli.

* - jebkurš lietotājs, kas izveidojis savienojumu kā root, var lasīt vai rakstīt visus datus jūsu klasterī.

* - nav tīkla šifrēšanas un autentifikācijas, tātad konfidencialitātes.

*

* Pārbaudiet, kā nodrošināt savu kopu: //www.cockroachlabs.com/docs/v19.2/secure-a-cluster.html

*

*

* BRĪDINĀJUMS: nav norādīts ne --listen-addr, ne --Advertise-addr.

* Serveris reklamēs "Martins-Retina-MacBook.local" citiem mezgliem, vai tas ir maršrutējams?

*

* Apsveriet iespēju izmantot:

* - tikai vietējiem serveriem: --listen-addr = localhost

* - vairāku mezglu kopām: --advertise-addr =

*

*

*

* INFO: šai kopai tika atspējota replikācija.

* Kad / ja nākotnē pievienojat mezglus, atjauniniet zonu konfigurācijas, lai palielinātu replikācijas koeficientu.

*

TarakānsDB mezgls, sākot no 2019. gada 12. septembra 16: 30: 35,369965 +0000 UTC (bija 0,6 sekundes)

būvējums: CCL v19.2.2 @ 2019/12/11 01:27:47 (go1.12.12)

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

sql: postgresql: //[email protected]: 26257sslmode = atspējot

RPC klienta karodziņi: tarakāns - host = Martins-Retina-MacBook.local: 26257 --insecure

žurnāli: / Users / martinheller / cockroach-data / logs

temp dir: / Users / martinheller / cockroach-data / cockroach-temp884406444

ārējais I / O ceļš: / Users / martinheller / cockroach-data / extern

veikals [0]: path = / Users / martinheller / cockroach-data

statuss: inicializēta jauna kopa

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

nodeID: 1

Šajā brīdī es varēju atvērt iepriekš redzamo tīmekļa lietotāja saskarnes saiti un redzēt tīmekļa pārvaldības saskarni, kas parādīta zemāk redzamajā ekrānuzņēmumā.

Lai pārbaudītu instalācijas dūmu pārbaudi, es sekoju pirmajam Prusaku universitātes vingrinājumam citā Terminal cilnē, kā parādīts zemāk. Es uzskatīju, ka apmācība ir laba, kaut arī tā ir īsos videoklipos, nevis tekstā, un ir paredzēta iesācējiem, nevis pieredzējušiem DBA vai izstrādātājiem. Praktiskā daļa sākas, izmantojot darba slodze rīks, lai izveidotu nelielu datu bāzi, movr, pēc tam turpinās CockroachDB SQL čaulā.

martinheller @ Martins-Retina-MacBook ~% prusaku darba slodze init movr

I191230 16: 55: 34.351650 1 slodze / slodzeql / dataload.go: 135 importēti lietotāji (0s, 50 rindas)

I191230 16: 55: 34.356751 1 slodze / slodzeql / dataload.go: 135 importēti transportlīdzekļi (0, 15 rindas)

I191230 16: 55: 34.382023 1 slodze / slodzeql / dataload.go: 135 importēti braucieni (0s, 500 rindas)

I191230 16: 55: 34.404733 1 slodze / slodzeql / dataload.go: 135 importēti transportlīdzekļu_vietu_vēstures (0s, 1000 rindas)

I191230 16: 55: 34.429203 1 workload / workloadsql / dataload.go: 135 importēti promo_codes (0s, 1000 rindas)

martinheller @ Martins-Retina-MacBook ~% tarakāns sql - nedrošs

#

# Laipni lūdzam CockroachDB SQL čaulā.

# Visi paziņojumi jāpārtrauc ar semikolu.

# Lai izietu, ierakstiet: \ q.

#

# Servera versija: CockroachDB CCL v19.2.2 (x86_64-apple-darwin14, būvēts 2019/12/11 01:27:47, go1.12.12) (tāda pati versija kā klientam)

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

#

# Ievadīt \? par īsu ievadu.

#

root @: 26257 / defaultdb> RĀDĪT datu bāzes;

datu bāzes_nosaukums

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

defaultdb

movr

postgres

sistēmā

(4 rindas)

Laiks: 2.028ms

root @: 26257 / defaultdb> RĀDĪT TABULAS NO MOVR;

tabulas_nosaukums

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

promo_codes

braucieni

user_promo_codes

lietotājiem

transportlīdzekļa_vietas_vēstures

transportlīdzekļiem

(6 rindas)

Laiks: 2.863ms

root @: 26257 / defaultdb> SELECT * FROM movr.users LIMIT 10;

id | pilsēta | nosaukums | adrese | kredītkarte

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

ae147ae1-47ae-4800-8000-000000000022 | amsterdam | Tailers Daltons | 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 | Debora Kārsone | 32768 Ērika dalītās svītas 88 | 8107478823

bd70a3d7-0a3d-4000-8000-000000000025 | amsterdam | Deivids Stantons | 80015 Marka skatu komplekts 96 | 3471210499

c28f5c28-f5c2-4000-8000-000000000026 | amsterdam | Marija Vēbere | 14729 Karen Radial | 5844236997

1eb851eb-851e-4800-8000-000000000006 | bostona | Braiens Kempbels | 92025 Yang Village | 9016427332

23d70a3d-70a3-4800-8000-000000000007 | bostona | Karls Makgīrs | 60124 Palmer Mews Apt. 49 | 4566257702

28f5c28f-5c28-4600-8000-000000000008 | bostona | Dženifera Sandersa 19121 Padilla Brooks Apt. 12 | 1350968125

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

33333333-3333-4400-8000-00000000000a | bostona | Daniels Ernandess, MD | 51438 Dženetas ielejas | 0904722368

(10 rindas)

Laiks: 2.977ms

Turpmāk apmācība turpina mācīt vairāk par CockroachDB, ieskaitot CockroachDB klasteru pamatus un SQL palaišanas pamatus.

PrusaksMākonis

Viena TockroachDB mezgla vērpšana ir diezgan vienkārša, kā mēs tikko redzējām. Trīs vai vairāk mezglu klastera izveide prasa nedaudz vairāk pūļu un plānošanas, it īpaši, ja izveidojat vairāku reģionu kopas un jums jāpielāgo tabulas topoloģija. Ja jums nepieciešama palīdzība, tarakānu pārdošanas inženieri labprāt pieveicas.

No otras puses, klastera izveide CockroachCloud ir tīmekļa veidlapas aizpildīšana, kā parādīts zemāk esošajā ekrānuzņēmumā. Pašlaik no šīs pašapkalpošanās saskarnes var izveidot tikai viena reģiona kopu; ja jums ir nepieciešami vairāku reģionu kopas, lielāki mezgli vai vairāk nekā 24 mezgli vienā klasterī, jums jāsazinās ar Cockroach Labs atbalstu, lai tos nodrošinātu jums CockroachCloud.

CockroachCloud kopas ir pēc iespējas izolētas un drošākas. Tie ir vieni īrnieki, katrs savā apakškontā un VPC, un VPC ir ugunsmūri viens no otra un no jebkura cita ārēja savienojuma, ja vien SQL un tīmekļa lietotāja interfeisa porti nav iekļauti baltajā sarakstā. Visos savienojumos ar kopu internetā tiek izmantots TLS 1.2.

Ņemiet vērā, ka Cockroach Labs pašlaik neatbalsta privātus mākoņus. Viņiem tomēr ir plāns to darīt nākotnē.

Saskaņā ar īkšķa likumu Cockroach Labs lēš, ka katrs vCPU var apstrādāt aptuveni 1000 TPS. Aprēķini, kas sniegti klastera izveides lapā, veicot nodrošinājumu, iespējams, ir precīzāki, taču tiek sniegti dažādās vienībās (nevis IPS, bet gan TPS). Pašlaik tiek lēsts, ka 2-vCPU mezgls GCP ir 1800 IOPS, un 2-vCPU mezgls AWS tiek lēsts 600 IOPS.

CockroachDB veiktspējas uzlabojumi

Kad 2018. gada sākumā apskatīju CockroachDB 1.1.3, tā SQL JOIN ieviešana aprobežojās ar hash pievienošanu un heiristisko plānotāju; tā vaicājumu veiktspēja bieži tika mērogota lineāri, bet nebija līdzīga vismodernākajam - tas bija tuvāk SQLite veiktspējai. Līdz 2018. gada novembrim CockroachDB 2.1 bija uz izmaksām balstīts vaicājumu optimizētājs, kas bija konkurētspējīgs ar PostgreSQL par JOIN veiktspēju. Sākot ar 19.2 versiju, pēc vēl viena gada izstrādes (un pārejas uz kalendāra versiju), visi SQL vaicājumos tiek izmantots uz izmaksām balstīts optimizētājs, pat DDL priekšraksti un logu funkcijas. Atbalstot optimizētāju, kas balstīts uz izmaksām, CockroachDB automātiski ģenerē tabulas statistiku.

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