Programiranje

Pregled CockroachDB: Porazdeljeni SQL preklopi v visoko prestavo

Ko sem v začetku leta 2018 pregledoval CockroachDB, sem ugotovil, da je porazdeljena baza podatkov SQL, zgrajena na vrhu transakcijske in dosledne shrambe ključ-vrednost, zasnovana tako, da preživi okvare diska, stroja, stojala in celo podatkovnega centra z minimalnimi motnjami v zakasnitvi in ​​brez ročni poseg. To še vedno drži.

Takrat je imel CockroachDB po mojem mnenju tri velike primanjkljaje: omejena optimizacija poizvedb SQL JOIN, nobena popolnoma vodena storitev in nobena podpora za podatkovne tipe JSON ali Protobuf. Z veseljem sporočam, da so bile vse te pomanjkljivosti od takrat odpravljene. ZDRUŽITVE zdaj uporabljajo stroškovni optimizator, CockroachCloud je v različici beta in implementiran je podatkovni tip JSONB.

Kaj še manjka v CockroachDB? Precej, če vas zanima združljivost PostgreSQL:

  • Shranjeni postopki in funkcije
  • Sprožilci
  • Dogodki
  • Uporabniško določene funkcije
  • Polnobesedilne funkcije in kazala
  • Geoprostorske funkcije in indeksi
  • Spustite primarni ključ
  • XML funkcije
  • Shranjevalne točke
  • Privilegije na ravni stolpca
  • Ustvari sintakso začasne tabele
  • Sintaksa XA

Večino obstoječih aplikacij OLTP PostgreSQL je mogoče prenesti v CockroachDB z nekaj rešitvami na ravni aplikacije. Če ste uporabljali geoprostorske funkcije (PostGIS) ali iskanje po celotnem besedilu, ne poznam dobrega načina za njihovo uporabo v trenutni različici CockroachDB.

Obstaja težava pri sledenju geoprostorskih indeksov in funkcij, a čeprav je bila odprta že nekaj let, je stanje geoprostorskih elementov le „potencialno“. Uporabniška anketa je zaželela primere geoprostorske uporabe, vendar to ni isto kot obljubljanje funkcije.

Indeksiranje celotnega besedila je "načrtovano", vendar še ni na načrtu. Več ljudi je predlagalo integracijo CockroachDB z Bleve, da bi to dosegli. Spet brez obljub.

Junija 2019 je Cockroach svojo licenco za OSS spremenil iz APL-2 v „izjemno dovoljeno različico licence za poslovni vir (BSL)“. To je bil v bistvu odgovor na Amazon Web Services, ki ponuja razvejano različico ElasticSearch kot plačljivo storitev, in Cockroachu ponuja lastno bazo podatkov kot storitev, ne da bi se skrbel za AWS ali katerega koli drugega prodajalca oblaka, ki bi mu ukradel grmenje.

CockroachCloud je v celoti gostila in v celoti upravljala storitev, ki jo je ustvaril in je v lasti Cockroach Labs in trdi, da omogoča uvajanje, skaliranje in upravljanje CockroachDB brez napora. CockroachCloud trenutno deluje na Amazon Web Services in Google Cloud Platform.

Namestitev CockroachDB in osnovno testiranje

CockroachDB 19.2.2 sem namestil na svoj MacBook Pro s pomočjo aplikacije Homebrew. Najprej sem izrecno odstranil staro različico (1.1.3), ki mi je ostala v prvem pregledu.

Homebrew je specifičen za Mace. To je le eden od petih načinov namestitve CockroachDB na Macs, drugi pa nalaganje binarne datoteke; uporabite Kubernetes; uporabite Docker; in gradijo iz vira. Linux in Windows imata manj možnosti namestitve.

martinheller @ Martins-Retina-MacBook ~% piščanca za odstranjevanje piva

Odstranitev /usr/local/Cellar/cockroach/1.1.3 ... (5 datotek, 72,9 MB)

martinheller @ Martins-Retina-MacBook ~% pivo namestite cockroachdb / tap / cockroach

==>Tapkanje ščurka db / pipe

daljinsko: naštevanje predmetov: 6, končano.

daljinsko: Štetje predmetov: 100% (6/6), končano.

daljinsko: Stiskanje predmetov: 100% (5/5), končano.

daljinsko: Skupaj 6 (delta 0), ponovno uporabljeno 3 (delta 0), ponovno uporabljeno 0

Razpakiranje predmetov: 100% (6/6), končano.

Izbrano 1 formula (32 datotek, 45,6 KB).

==>Nameščanje ščurka iz ščurka db / pipe

==>Prenos //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 =

==>Opozorila

zaženite gručo z enim vozliščem, ki svoje podatke shrani pod:

/ usr / local / var / ščurka /

Namesto privzetih vrat 8080 vozlišče služi skrbniški uporabniški vmesnik na:

// localhost: 26256

NE uporabljajte te gruče za shranjevanje podatkov, ki vas zanimajo; teče v negotovih

način in lahko podatke javno izpostavi npr. napad preusmeritve DNS. Teči

CockroachDB varno, glejte:

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

Dokončanje Bash je nameščeno za:

/usr/local/etc/bash_completion.d

dokončanja zsh so nameščena za:

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

Če želite zagnati start cockroachdb / tap / cockroach zdaj in znova zagnati ob prijavi:

pivovarne začnejo s ščurkom db / pipo / ščurkom

Če pa ne želite / potrebujete storitve v ozadju, lahko preprosto zaženete:

začetek ščurkov - nezanesljiv

==>Povzetek

==>`brew cleanup` že 30 dni ne deluje, teče zdaj ...

Odstranjevanje: /Users/martinheller/Library/Caches/Homebrew/node--12.12.0.catalina.bottle.tar.gz ... (14,8 MB)

Obrezanih 18 simboličnih povezav iz / usr / local

martinheller @ Martins-Retina-MacBook ~% začetek ščurka-eno vozlišče --insecure

*

* OPOZORILO: TEKANJE V NEVARNEM NAČINU!

*

* - Vaša gruča je odprta za vse odjemalce, ki imajo dostop.

* - Vsak uporabnik, tudi root, se lahko prijavi brez navedbe gesla.

* - Vsak uporabnik, ki se poveže kot root, lahko bere ali zapisuje katere koli podatke v vaši gruči.

* - Ni šifriranja omrežja ali preverjanja pristnosti in s tem zaupnosti.

*

* Oglejte si, kako zaščititi svojo gručo: //www.cockroachlabs.com/docs/v19.2/secure-a-cluster.html

*

*

* OPOZORILO: ni bil določen niti --listen-addr niti --advertise-addr.

* Strežnik bo oglasil "Martins-Retina-MacBook.local" drugim vozliščem, ali je to usmerljivo?

*

* Razmislite o uporabi:

* - samo za lokalne strežnike: --listen-addr = localhost

* - za gruče z več vozlišči: --advertise-addr =

*

*

*

* INFO: Za to skupino je bila replikacija onemogočena.

* Ko / če boste vozlišča dodajali v prihodnosti, posodobite konfiguracije con, da povečate faktor podvajanja.

*

Vozlišče CockroachDB, ki se začne ob 2019-12-30 16: 30: 35.369965 +0000 UTC (trajalo 0,6 s)

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

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

sql: postgresql: //[email protected]: 26257sslmode = onemogoči

Zastave odjemalca RPC: ščurek --host = Martins-Retina-MacBook.local: 26257 --insecure

dnevniki: / Uporabniki / martinheller / ščurki-podatki / dnevniki

temp režija: / Uporabniki / martinheller / ščurki-podatki / ščurki-temp884406444

zunanja V / I pot: / Uporabniki / martinheller / ščurki-podatki / zunanja

trgovina [0]: pot = / Uporabniki / martinheller / ščurki-podatki

status: inicializirana nova gruča

ID grozda: 9f7141f8-d53d-49e3-9a5a-264de8cfa626

nodeID: 1

Na tej točki sem lahko odprl zgoraj prikazano povezavo do spletnega uporabniškega vmesnika in si ogledal spletni vmesnik za upravljanje, prikazan na spodnjem posnetku zaslona.

Da bi preizkusil namestitev, sem sledil prvi vaji na univerzi Ščurki v drugem zavihku Terminal, kot je prikazano spodaj. Vadnica se mi je zdela dobra, čeprav je bila predstavljena v kratkih videoposnetkih in ne v besedilu ter je namenjena začetnikom in ne izkušenim DBA-jem ali razvijalcem. Priročnik se začne z uporabo delovna obremenitev orodje za ustvarjanje majhne baze podatkov, movr, nato se nadaljuje v lupini CockroachDB SQL.

martinheller @ Martins-Retina-MacBook ~% obremenitve ščurkov init movr

I191230 16: 55: 34.351650 1 obremenitev / workloadsql / dataload.go: 135 uvoženih uporabnikov (0s, 50 vrstic)

I191230 16: 55: 34.356751 1 obremenitev / obremenitevsql / dataload.go: 135 uvoženih vozil (0s, 15 vrstic)

I191230 16: 55: 34.382023 1 obremenitev / workloadsql / dataload.go: 135 uvoženih voženj (0s, 500 vrstic)

I191230 16: 55: 34.404733 1 obremenitev / delovna obremenitevql / dataload.go: 135 uvoženih zgodovin_lokacij_voz (0s, 1000 vrstic)

I191230 16: 55: 34.429203 1 obremenitev / workloadsql / dataload.go: 135 uvoženih promo_ kod (0s, 1000 vrstic)

martinheller @ Martins-Retina-MacBook ~% ščurka sql --insecure

#

# Dobrodošli v lupini SQL CockroachDB.

# Vse izjave morajo biti zaključene s podpičjem.

# Za izhod vnesite: \ q.

#

# Različica strežnika: CockroachDB CCL v19.2.2 (x86_64-apple-darwin14, zgrajena 2019/12/11 01:27:47, go1.12.12) (ista različica kot odjemalec)

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

#

# Vnesite \? za kratek uvod.

#

root @: 26257 / defaultdb> POKAŽI baze podatkov;

ime_baze podatkov

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

defaultdb

movr

postgres

sistem

(4 vrstice)

Čas: 2.028ms

root @: 26257 / defaultdb> POKAŽI TABLE IZ movr;

ime_tabele

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

promocijske kode

vozi

uporabniške_promo_kode

uporabnikov

zgodovina_lokacije_v vozilu

vozil

(6 vrstic)

Čas: 2.863ms

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

id | mesto | ime | naslov | kreditna kartica

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

ae147ae1-47ae-4800-8000-000000000022 | amsterdam | Tyler Dalton | 88194 Suita Angela Gardens 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 Suite 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 vas Yang | 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 | Dr. Daniel Hernandez | 51438 Doline Janet | 0904722368

(10 vrstic)

Čas: 2.977ms

Vadnica nadaljuje od tam, kjer boste izvedeli več o CockroachDB, vključno z osnovami grozdov CockroachDB in osnovami izvajanja SQL v obsegu.

CockroachCloud

Kot smo pravkar videli, je vrtenje enega vozlišča CockroachDB dokaj preprosto. Predenje gruče treh ali več vozlišč zahteva malo več truda in načrtovanja, še posebej, če ustvarite večregijske gruče in morate prilagoditi topologijo tabele. Če potrebujete pomoč, se prodajni inženirji ščurkov z veseljem oglasijo.

Po drugi strani pa je ustvarjanje grozda v CockroachCloud stvar izpolnjevanja spletnega obrazca, kot je prikazano na spodnjem posnetku zaslona. Trenutno lahko iz tega samopostrežnega vmesnika ustvarite samo enorejonsko gručo; če potrebujete večregijske grozde, večja vozlišča ali več kot 24 vozlišč na gručo, se morate obrniti na podporo Cockroach Labs, da vam jih priskrbi v CockroachCloud.

Grozdi CockroachCloud so čim bolj izolirani in varni. So najemniki, vsak v svojem podračunu in VPC, VPC-ji pa so požarni zidi med seboj in od katere koli druge zunanje povezave, razen če so na seznamu SQL in spletnega uporabniškega vmesnika. Vse povezave do grozda prek interneta uporabljajo TLS 1.2.

Upoštevajte, da Cockroach Labs trenutno ne podpira zasebnih oblakov. Vendar to načrtujejo tudi v prihodnje.

Kot pravilo Cockroach Labs ocenjuje, da lahko vsak vCPU obdela približno 1000 TPS. Ocene, podane na strani za ustvarjanje grozda, ko naredite določbe, so verjetno bolj natančne, vendar so podane v različnih enotah (IOPS in ne TPS). Trenutno je vozlišče 2-vCPU na GCP ocenjeno na 1800 IOPS, vozlišče 2-vCPU na AWS pa 600 IOPS.

Izboljšave zmogljivosti CockroachDB

Ko sem si v začetku leta 2018 ogledal CockroachDB 1.1.3, je bila njegova implementacija SQL JOIN omejena na zgoščena združevanja in hevristični načrtovalec; uspešnost poizvedb je bila pogosto linearno prilagojena, vendar ni bila nič takega kot najsodobnejše - bila je bližje zmogljivosti SQLite. Do novembra 2018 je imel CockroachDB 2.1 stroškovno optimiziran poizvedbo, ki je bil konkurenčen PostgreSQL za delovanje JOIN. Od različice 19.2 je po novem letu razvoja (in prehodu na različico koledarja) vse Poizvedbe SQL uporabljajo optimizator, ki temelji na stroških, celo stavke DDL in okenske funkcije. V podporo stroškovnemu optimizatorju CockroachDB samodejno ustvari statistiko tabel.

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