Programavimas

„CockroachDB“ apžvalga: paskirstytas SQL perjungia aukštą pavarą

Kai peržiūrėjau „CockroachDB“ 2018 m. Pradžioje, radau, kad paskirstyta SQL duomenų bazė, sukurta ant operacinės ir nuoseklios raktų vertės saugyklos, buvo sukurta taip, kad būtų galima išgyventi disko, įrenginio, stovo ir net duomenų centro gedimus, trunkant minimaliai delsai ir be jokių problemų. rankinis įsikišimas. Tai vis dar tiesa.

Tuo metu, mano manymu, „CockroachDB“ turėjo tris didelius trūkumus: Ribotas SQL JOIN užklausų optimizavimas, nebuvo visiškai valdomos paslaugos ir nebuvo palaikoma JSON ar „Protobuf“ duomenų rūšis. Džiaugiuosi galėdamas pranešti, kad visi šie trūkumai nuo to laiko buvo pašalinti. JOIN dabar naudoja kainomis pagrįstą optimizavimo priemonę, „CockroachCloud“ yra beta versijos ir įdiegtas JSONB duomenų tipas.

Ko vis dar trūksta tarakoneDB? Nemažai, jei jums rūpi „PostgreSQL“ suderinamumas:

  • Saugomos procedūros ir funkcijos
  • Trigeriai
  • Įvykiai
  • Vartotojo nustatytos funkcijos
  • Viso teksto funkcijos ir rodyklės
  • Geoerdvinės funkcijos ir rodyklės
  • Nuleiskite pagrindinį raktą
  • XML funkcijos
  • Išsaugojimo taškai
  • Stulpelio lygio privilegijos
  • SUKURTI LAIKINĄ LENTELĖS sintaksę
  • XA sintaksė

Daugumą esamų „OLTP PostgreSQL“ programų galima perkelti į „CockroachDB“ su tam tikrais būdais programų lygiu. Tačiau jei naudojote geoerdvines funkcijas („PostGIS“) arba viso teksto paiešką, nežinau gero būdo jas įdiegti dabartinėje „CockroachDB“ versijoje.

Yra geografinių erdvių rodyklių ir funkcijų stebėjimo problema, tačiau, nors ji buvo atidaryta kelerius metus, geoerdvinių savybių būklė yra tik „potenciali“. Buvo atlikta vartotojų apklausa apie norimus geografinės erdvės naudojimo atvejus, tačiau tai nėra tas pats, kas pažadėti šią funkciją.

Viso teksto indeksavimas yra „suplanuotas“, bet dar nėra numatytas. Keli žmonės pasiūlė integruoti „CockroachDB“ su Bleve, kad tai pasiektų. Vėlgi, jokių pažadų.

2019 m. Birželio mėn. Tarakonas pakeitė OSS licenciją iš APL-2 į „itin leistiną verslo šaltinio licencijos (BSL) versiją“. Tai iš esmės buvo atsakas į „Amazon Web Services“, siūlančią šakotą „ElasticSearch“ versiją kaip mokamą paslaugą, ir leido Tarakanams pasiūlyti savo duomenų bazę kaip paslaugą, nesijaudinant dėl ​​AWS ar bet kurio kito debesų pardavėjo, kuris pavogė griaustinį.

„CockroachCloud“ yra visiškai priglobta ir visiškai valdoma „Cockroach Labs“ sukurta ir jai priklausanti paslauga, kuri teigia, kad „CockroachDB“ diegimas, mastelio keitimas ir valdymas yra lengvas. Šiuo metu „CockroachCloud“ veikia „Amazon Web Services“ ir „Google Cloud Platform“.

TarakonųDB diegimas ir pagrindinis testavimas

Įdiegiau „CockroachDB 19.2.2“ į „MacBook Pro“ naudodamas „Homebrew“. Pirmiausia aš aiškiai pašalinau senąją versiją (1.1.3), kurią likau po savo pirminės peržiūros.

„Homebrew“ yra būdingas „Mac“. Tai tik vienas iš penkių „CockroachDB“ diegimo būdų „Mac“ kompiuteriuose, kiti - atsisiųsti dvejetainį; naudoti Kubernetes; naudoti „Docker“; ir kurti iš šaltinio. „Linux“ ir „Windows“ turi mažiau diegimo galimybių.

martinheller @ Martins-Retina-MacBook ~% užvirina pašalinkite tarakoną

Pašalinamas /usr/local/Cellar/cockroach/1.1.3 ... (5 failai, 72,9 MB)

martinheller @ Martins-Retina-MacBook ~% užvirinkite įdiekite tarakoną / bakstelėkite / tarakoną

==>Bakstelėjimas tarakonas / bakstelėjimas

nuotolinis: objektų surašymas: 6, atlikta.

nuotolinis: objektų skaičiavimas: 100% (6/6), atlikta.

nuotolinis: objektų suspaudimas: 100% (5/5), padaryta.

nuotolinis: Iš viso 6 (delta 0), pakartotinai panaudotas 3 (delta 0), pakuotėje pakartotinai panaudotas 0

Išpakuokite objektus: 100% (6/6), atlikta.

Palietė 1 formulę (32 failai, 45,6 KB).

==>Tarakono diegimas iš tarakono / čiaupo

==>Atsisiunčiama //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 =

==>Įspėjimai

paleiskite vieno mazgo sankaupą, kurioje duomenys saugomi:

/ usr / local / var / tarakonas /

Vietoj numatytojo 8080 prievado mazgas aptarnauja savo administratoriaus vartotojo sąsają:

// localhost: 26256

NENAUDOKITE šio klasterio saugodami jums rūpimus duomenis; jis veikia nesaugiai

režimu ir gali viešai atskleisti duomenis, pvz. DNS atkūrimo ataka. Bėgti

TarakonasDB saugiai, žiūrėkite:

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

„Bash“ užbaigimas įdiegtas:

/usr/local/etc/bash_completion.d

„zsh“ užbaigimai buvo įdiegti:

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

Jei norite paleisti paleidimo tarakoną dabar / palieskite / tarakoną ir paleiskite iš naujo prisijungdami:

aludarystės paslaugos prasideda tarakonasdb / tap / tarakonas

Arba, jei nenorite / nereikia foninės paslaugos, galite tiesiog paleisti:

tarakonų pradžia - nesaugu

==>Santrauka

==>„alaus valymas“ nebuvo vykdomas per 30 dienų, veikia dabar ...

Pašalinama: /Users/martinheller/Library/Caches/homebrew/node--12.12.0.catalina.bottle.tar.gz ... (14.8MB)

Iškirpti 18 simbolinių nuorodų iš / usr / local

martinheller @ Martins-Retina-MacBook ~% tarakono pradžios-vieno mazgo - nesaugu

*

* ĮSPĖJIMAS: BĖKITE NEATIKRIAI REŽIMU!

*

* - Jūsų klasteris yra atviras kiekvienam klientui, kuris gali pasiekti.

* - Bet kuris vartotojas, net rootas, gali prisijungti nepateikęs slaptažodžio.

* - Bet kuris vartotojas, prisijungęs kaip root, gali skaityti ar rašyti bet kokius jūsų klasterio duomenis.

* - Nėra nei tinklo šifravimo, nei autentifikavimo, taigi ir konfidencialumo.

*

* Sužinokite, kaip apsaugoti savo grupę: //www.cockroachlabs.com/docs/v19.2/secure-a-cluster.html

*

*

* ĮSPĖJIMAS: nebuvo nurodytos nei --listen-addr, nei --Advertise-addr.

* Serveris reklamuos „Martins-Retina-MacBook.local“ kitiems mazgams, ar tai galima perkelti?

*

* Apsvarstykite galimybę naudoti:

* - tik vietiniams serveriams: --listen-addr = localhost

* - kelių mazgų sankaupoms: --advertise-addr =

*

*

*

* INFO: šio klasterio replikacija buvo išjungta.

* Kai / pridėsite mazgų ateityje, atnaujinkite zonų konfigūracijas, kad padidintumėte replikacijos koeficientą.

*

TarakonasDB mazgas prasideda 2019-12-30 16: 30: 35.369965 +0000 UTC (užtruko 0.6s)

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

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

sql: postgresql: //[email protected]: 26257sslmode = išjungti

RPC kliento vėliavos: tarakonas - šeimininkas = Martins-Retina-MacBook.local: 26257 - nesaugu

žurnalai: / Vartotojai / martinheller / tarakonų duomenys / žurnalai

temp dir: / Vartotojai / martinheller / tarakonas-duomenys / tarakonas-temp884406444

išorinis įvesties / išvesties kelias: / Users / martinheller / cockroach-data / extern

parduotuvė [0]: kelias = / Vartotojai / martinheller / tarakonų duomenys

status: inicijuotas naujas klasteris

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

nodeID: 1

Šiuo metu man pavyko atidaryti aukščiau pateiktą žiniatinklio vartotojo sąsają ir pamatyti žiniatinklio valdymo sąsają, parodytą žemiau esančiame ekrano kopijoje.

Norėdami išbandyti instaliaciją, atlikau pirmąjį tarakonų universiteto pratimą kitame „Terminal“ skirtuke, kaip parodyta žemiau. Man pasirodė, kad pamoka yra gera, nors ir pateikiama trumpuose vaizdo įrašuose, o ne tekste, ir skirta pradedantiesiems, o ne patyrusiems DBA ar kūrėjams. Praktinė dalis pradedama naudojant darbo krūvis įrankis sukurti mažą duomenų bazę, movr, tada tęsiasi CockroachDB SQL apvalkale.

martinheller @ Martins-Retina-MacBook ~% tarakonų darbo krūvis init movr

I191230 16: 55: 34.351650 1 darbo krūvis / workloadsql / dataload.go: 135 importuoti vartotojai (0s, 50 eilučių)

I191230 16: 55: 34.356751 1 darbo krūvis / darbo krūvisql / dataload.go: 135 importuotos transporto priemonės (0s, 15 eilučių)

I191230 16: 55: 34.382023 1 darbo krūvis / workloadsql / dataload.go: 135 importuoti važiavimai (0s, 500 eilučių)

I191230 16: 55: 34.404733 1 darbo krūvis / workloadsql / dataload.go: 135 importuotos transporto priemonės_location_histories (0s, 1000 eilučių)

I191230 16: 55: 34.429203 1 workload / workloadsql / dataload.go: 135 importuoti promo_codes (0s, 1000 eilučių)

martinheller @ Martins-Retina-MacBook ~% tarakonų sql - nesaugu

#

# Sveiki atvykę į „CockroachDB SQL“ apvalkalą.

# Visi teiginiai turi būti nutraukti kabliataškiu.

# Norėdami išeiti, įveskite: \ q.

#

# Serverio versija: CockroachDB CCL v19.2.2 (x86_64-apple-darwin14, pastatytas 2019/12/11 01:27:47, go1.12.12) (ta pati versija kaip ir klientas)

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

#

# Įvesti \? trumpam įvadui.

#

root @: 26257 / defaultdb> RODYTI duomenų bazes;

duomenų bazės_vardas

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

defaultdb

movr

postgres

sistema

(4 eilutės)

Laikas: 2.028ms

root @: 26257 / defaultdb> RODYTI LENTELES IŠ movr;

lentelės_vardas

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

promo_codes

važiuoja

vartotojo_promo_kodai

vartotojų

transporto priemonės_vietos_istorijos

transporto priemonių

(6 eilutės)

Laikas: 2.863ms

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

id | miestas | vardas | adresas | kredito_kortelė

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

ae147ae1-47ae-4800-8000-000000000022 | amsterdamas | Taileris Daltonas | 88194 „Angela Gardens Suite 94“ 4443538758

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

b851eb85-1eb8-4000-8000-000000000024 | amsterdamas | Deborah Carson | 32768 Eriko padalijimo liuksas 88 | 8107478823

bd70a3d7-0a3d-4000-8000-000000000025 | amsterdamas | Davidas Stantonas | 80015 „Mark Views Suite“ 96 | 3471210499

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

1eb851eb-851e-4800-8000-000000000006 | bostonas | Brianas Campbellas 92025 Yang kaimas | 9016427332

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

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

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

33333333-3333-4400-8000-00000000000a | bostonas | Danielis Hernandezas, MD | 51438 Janet slėniai | 0904722368

(10 eilučių)

Laikas: 2.977ms

Mokymo programa tęsiama mokant daugiau apie „CockroachDB“, įskaitant „CockroachDB“ grupių pagrindus ir pagrindinius SQL paleidimo pagrindus.

Tarakonas debesis

Sukti vieną „CockroachDB“ mazgą yra gana paprasta, kaip ką tik matėme. Sukurti trijų ar daugiau mazgų sankaupą reikia šiek tiek daugiau pastangų ir planavimo, ypač jei kuriate kelių regionų sankaupas ir turite suderinti lentelės topologiją. Jei jums reikia pagalbos, tarakonų prekybos inžinieriai mielai įsitaisys.

Kita vertus, kuriant klasterį „CockroachCloud“, reikia užpildyti žiniatinklio formą, kaip parodyta toliau pateiktoje ekrano kopijoje. Šiuo metu iš šios savitarnos sąsajos galite sukurti tik vieno regiono sankaupą; jei jums reikia kelių regionų sankaupų, didesnių mazgų arba daugiau nei 24 mazgų vienoje grupėje, turite susisiekti su „Tarakonų laboratorija“ palaikymo tarnyba, kad galėtumėte juos suteikti „CockroachCloud“.

„CockroachCloud“ grupės yra kuo izoliuotos ir saugios. Jie yra vieniši nuomininkai, kiekvienas iš jų savo abonemente ir VPC, o VPC yra užkardos viena nuo kitos ir iš bet kurio kito išorinio ryšio, nebent įtrauktos į baltąjį SQL ir žiniatinklio sąsajos prievadų sąrašą. Visuose interneto ryšiuose su klasteriu naudojamas TLS 1.2.

Atminkite, kad tarakonų laboratorijos šiuo metu nepalaiko privačių debesų. Tačiau jie planuoja tai padaryti ateityje.

Kaip taisyklė „Cockroach Labs“ skaičiuoja, kad kiekvienas vCPU gali apdoroti maždaug 1000 TPS. Įvertinimai, pateikti klasterio kūrimo puslapyje, kai atliekate atidėjimą, tikriausiai yra tikslesni, tačiau pateikiami skirtingais vienetais (IOPS, o ne TPS). Šiuo metu 2 vCPU mazgas GCP yra įvertintas 1800 IOPS, o 2 vCPU mazgas AWS vertinamas 600 IOPS.

TarakonoDB našumo patobulinimai

Kai pažvelgiau į „CockroachDB 1.1.3“ 2018 m. Pradžioje, jo SQL JOIN diegimas apsiribojo maišos prisijungimais ir euristiniu planuotoju; jos užklausos našumas dažnai buvo keičiamas tiesiškai, tačiau nebuvo panašus į pažangiausią lygį - jis buvo arčiau SQLite našumo. Iki 2018 m. Lapkričio mėn. „CockroachDB 2.1“ turėjo sąnaudomis pagrįstą užklausų optimizavimo priemonę, kuri JOIN našumui buvo konkurencinga su „PostgreSQL“. Nuo 19.2 versijos, po kitų metų kūrimo (ir perėjimo prie kalendoriaus versijų), visi SQL užklausose naudojamas sąnaudomis pagrįstas optimizavimo įrankis, net DDL sakiniai ir lango funkcijos. Palaikydama sąnaudomis pagrįstą optimizavimo priemonę, „CockroachDB“ automatiškai kuria lentelės statistiką.