Programovanie

Recenzia CockroachDB: Distribuované SQL zaraďuje vysoké otáčky

Keď som začiatkom roka 2018 skontroloval program CockroachDB, zistil som, že distribuovaná databáza SQL postavená na transakčnom a konzistentnom úložisku kľúč-hodnota bola navrhnutá na prežitie zlyhaní diskov, strojov, rackov a dokonca aj dátových centier s minimálnym narušením latencie a bez manuálny zásah. To je stále všetko pravda.

V tom čase mal CockroachDB podľa mňa tri veľké deficity: Obmedzená optimalizácia dotazov SQL JOIN, žiadna plne spravovaná služba a žiadna podpora pre dátové typy JSON alebo Protobuf. S radosťou oznamujem, že všetky tieto nedostatky boli medzičasom odstránené. JOINs teraz používajú optimalizátor založený na nákladoch, CockroachCloud je v beta verzii a bol implementovaný dátový typ JSONB.

Čo stále chýba v aplikácii CockroachDB? Trochu, ak vám záleží na kompatibilite s PostgreSQL:

  • Uložené procedúry a funkcie
  • Spúšťače
  • Diania
  • Užívateľom definované funkcie
  • Fulltextové funkcie a indexy
  • Geopriestorové funkcie a indexy
  • Zrušte primárny kľúč
  • Funkcie XML
  • Uložené body
  • Oprávnenia na úrovni stĺpca
  • VYTVORIŤ syntax dočasnej tabuľky
  • Syntax XA

Väčšina existujúcich aplikácií OLTP PostgreSQL sa dá portovať na server CockroachDB s niektorými riešeniami na úrovni aplikácie. Ak ste použili geopriestorové funkcie (PostGIS) alebo fulltextové vyhľadávanie, neviem, aký je dobrý spôsob ich implementácie do súčasnej verzie aplikácie CockroachDB.

Pre geopriestorové indexy a funkcie existuje problém so sledovaním, ale aj keď je otvorený už niekoľko rokov, stav geopriestorových prvkov je iba „potenciálny“. Uskutočnili sa ankety používateľov o požadovaných prípadoch použitia v geopriestore, ale to nie je to isté ako sľubovanie tejto funkcie.

Fulltextové indexovanie je „plánované“, ale zatiaľ nie je v pláne. Niekoľko ľudí navrhlo na tento účel integráciu CockroachDB s Bleve. Opäť žiadne sľuby.

V júni 2019 spoločnosť Cockroach zmenila svoju licenciu OSS z APL-2 na „mimoriadne tolerantnú verziu licencie na zdroj podnikania (BSL)“. To bolo v zásade v reakcii na to, že Amazon Web Services ponúka vidlicovú verziu ElasticSearch ako platenú službu, a umožňuje spoločnosti Cockroach ponúkať svoju vlastnú databázu ako službu bez obáv z AWS alebo iných predajcov cloudu, ktorí by ukradli jeho hromy.

CockroachCloud je plne hostená a plne spravovaná služba vytvorená a vlastnená spoločnosťou Cockroach Labs, ktorá tvrdí, že s nasadením, škálovaním a správou CockroachDB je bezproblémová. CockroachCloud v súčasnosti beží na webových službách Amazon a Google Cloud Platform.

Inštalácia CockroachDB a základné testovanie

Nainštaloval som si CockroachDB 19.2.2 na svoj MacBook Pro pomocou Homebrew. Najskôr som výslovne odinštaloval starú verziu (1.1.3), ktorá mi zostala z pôvodnej kontroly.

Homebrew je špecifický pre počítače Mac. Je to iba jeden z piatich spôsobov inštalácie CockroachDB na počítačoch Mac, pričom ostatnými je stiahnutie binárneho súboru; používať Kubernetes; použite Docker; a stavať zo zdroja. Linux a Windows majú menej možností inštalácie.

martinheller @ Martins-Retina-MacBook ~% brew uninstall šváb

Odinštalovanie /usr/local/Cellar/cockroach/1.1.3 ... (5 súborov, 72,9 MB)

martinheller @ Martins-Retina-MacBook ~% brew install cockroachdb / tap / cockroach

==>Klepnutím na kohútikdb / klepnutím

remote: Vymenovanie objektov: 6, hotovo.

remote: Počítanie objektov: 100% (6/6), hotovo.

remote: Compressing objects: 100% (5/5), done.

remote: Total 6 (delta 0), reused 3 (delta 0), pack-reused 0

Rozbalenie predmetov: 100% (6/6), hotovo.

Kleplo na 1 vzorec (32 súborov, 45,6 kB).

==>Inštalácia švába z cockroachdb / tap

==>Sťahuje sa //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 =

==>Upozornenia

spustiť klaster s jedným uzlom, ktorý ukladá svoje údaje pod:

/ usr / local / var / šváb /

Namiesto predvoleného portu 8080 uzol slúži svojmu používateľskému rozhraniu správcu na adrese:

// localhost: 26256

NEPOUŽÍVAJTE tento klaster na ukladanie údajov, na ktorých vám záleží; beží to neisté

režime a môže vystaviť údaje verejne napr. útok rebinding DNS. Bežať

CockroachDB bezpečne, pozrite si prosím:

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

Dokončenie bash bolo nainštalované na:

/usr/local/etc/bash_completion.d

Zsh dokončenia boli nainštalované do:

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

Ak chcete mať launchd start cockroachdb / tap / cockroach now and restart at login:

pivovarské služby začínajú švábom / kohútikom / švábom

Alebo ak nechcete / nepotrebujete službu na pozadí, môžete jednoducho spustiť:

šváb štart - neistý

==>Zhrnutie

==>program „brew cleanup“ nebol spustený 30 dní, beží teraz ...

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

Orezané 18 symbolických odkazov z / usr / local

martinheller @ Martins-Retina-MacBook ~% začiatočný šváb jedného uzla - nezabezpečený

*

* UPOZORNENIE: BEH V BEZPEČNOM REŽIME!

*

* - Váš klaster je otvorený pre každého klienta, ktorý má prístup.

* - Každý používateľ, dokonca aj root, sa môže prihlásiť bez zadania hesla.

* - Každý používateľ, ktorý sa pripája ako root, môže čítať alebo zapisovať akékoľvek údaje vo vašom klastri.

* - Neexistuje žiadne sieťové šifrovanie ani autentifikácia, a teda ani dôvernosť.

*

* Zistite, ako zabezpečiť svoj klaster: //www.cockroachlabs.com/docs/v19.2/secure-a-cluster.html

*

*

* UPOZORNENIE: nebol zadaný --listen-addr ani --advertise-addr.

* Server bude inzerovať „Martins-Retina-MacBook.local“ na iné uzly, je to smerovateľné?

*

* Zvážte použitie:

* - iba pre miestne servery: --listen-addr = localhost

* - pre viacuzlové klastre: --advertise-addr =

*

*

*

* INFO: Replikácia bola pre tento klaster zakázaná.

* Pri pridávaní uzlov v budúcnosti aktualizujte konfigurácie zón, aby ste zvýšili faktor replikácie.

*

Uzol CockroachDB so začiatkom o 2019-12-30 16:30: 35,369965 +0000 UTC (trvalo 0,6 s)

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

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

sql: postgresql: //[email protected]: 26257sslmode = vypnúť

Príznaky klienta RPC: šváb --host = Martins-Retina-MacBook.local: 26257 - nezabezpečené

protokoly: / Používatelia / martinheller / dáta o šváboch / protokoly

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

externá cesta I / O: / Users / martinheller / cockroach-data / extern

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

stav: inicializovaný nový klaster

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

nodeID: 1

V tomto okamihu sa mi podarilo otvoriť odkaz na webové používateľské rozhranie zobrazený vyššie a vidieť webové rozhranie na správu zobrazené na snímke obrazovky nižšie.

Aby som inštaláciu testoval podľa fajčenia, nasledoval som prvé cvičenie na Švábovej univerzite na inej karte Terminál, ako je to znázornené nižšie. Tutorial som považoval za dobrý, aj keď je prezentovaný skôr v krátkych videách ako v texte a je zameraný skôr na začiatočníkov ako na skúsených DBA alebo vývojárov. Praktická časť sa začína použitím pracovná záťaž nástroj na vytvorenie malej databázy, movr, potom pokračuje v shelli CockroachDB SQL.

martinheller @ Martins-Retina-MacBook ~% pracovnej záťaže švába init movr

I191230 16:55: 34,351650 1 pracovné zaťaženie / workloadsql / dataload.go: 135 importovaných používateľov (0 s, 50 riadkov)

I191230 16:55: 34.356751 1 pracovné zaťaženie / workloadsql / dataload.go: 135 importovaných vozidiel (0 s, 15 riadkov)

I191230 16:55: 34,382023 1 pracovné zaťaženie / workloadsql / dataload.go: 135 importovaných jázd (0 s, 500 riadkov)

I191230 16:55: 34,404733 1 pracovné zaťaženie / workloadsql / dataload.go: 135 importovaných vozidiel_lokalita_histórie (0 s, 1000 riadkov)

I191230 16:55: 34,429203 1 pracovné zaťaženie / workloadsql / dataload.go: 135 importovaných promo_codes (0 s, 1000 riadkov)

martinheller @ Martins-Retina-MacBook ~% šváb sql - nezabezpečený

#

# Vitajte v prostredí SQL CockroachDB.

# Všetky výpisy musia byť ukončené bodkočiarkou.

# Pre ukončenie zadajte: \ q.

#

# Verzia servera: CockroachDB CCL v19.2.2 (x86_64-apple-darwin14, postavený 2019/12/11 01:27:47, go1.12.12) (rovnaká verzia ako klient)

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

#

# Enter \? na krátke predstavenie.

#

root @: 26257 / defaultdb> ZOBRAZIŤ databázy;

názov_databázy

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

defaultdb

movr

postgres

systém

(4 riadky)

Čas: 2,028 ms

root @: 26257 / defaultdb> ZOBRAZIŤ TABUĽKY Z movr;

nazov_tabulky

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

promo_codes

jazdí

user_promo_codes

používateľov

history_location_histories

vozidiel

(6 riadkov)

Čas: 2,863 ms

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

id | mesto | meno | adresa | kreditná karta

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

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 Dedina 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 | Daniel Hernandez, MD | 51438 Janet Valleys | 0904722368

(10 riadkov)

Čas: 2,977 ms

Výukový program pokračuje odtiaľ a naučí sa viac o CockroachDB, vrátane základov klastrov CockroachDB a základov bežného fungovania SQL.

CockroachCloud

Roztočenie jedného uzla CockroachDB je pomerne jednoduché, ako sme práve videli. Otáčanie klastra troch alebo viacerých uzlov si vyžaduje trochu viac úsilia a plánovania, najmä ak vytvárate klastre s viacerými regiónmi a potrebujete vyladiť topológiu tabuľky. Ak potrebujete pomoc, predajní technici Švábov sa radi prihlásia.

Na druhej strane je vytvorenie klastra v CockroachCloud otázkou vyplnenia webového formulára, ako je to znázornené na snímke obrazovky nižšie. V súčasnosti môžete z tohto samoobslužného rozhrania vytvoriť iba klaster s jednou oblasťou; Ak potrebujete klastre s viacerými regiónmi, väčšie uzly alebo viac ako 24 uzlov na klaster, musíte kontaktovať podporu spoločnosti Cockroach Labs, aby vám ich poskytla v CockroachCloud.

Klastre CockroachCloud sú čo najizolovanejšie a najbezpečnejšie. Sú to samostatní nájomníci, každý vo svojom vlastnom podúčte a VPC, a VPC sú navzájom chránené bránou firewall medzi sebou a akýmkoľvek iným externým pripojením, pokiaľ nie sú na bielom zozname pre porty SQL a webové používateľské rozhranie. Všetky pripojenia do klastra cez internet používajú protokol TLS 1.2.

Upozorňujeme, že Cockroach Labs momentálne nepodporuje súkromné ​​cloudy. Plánujú to však do budúcnosti.

Pravidlom je, že spoločnosť Cockroach Labs odhaduje, že každá vCPU zvládne okolo 1 000 TPS. Odhady uvedené na stránke vytvárania klastrov pri vytváraní rezerv sú pravdepodobne presnejšie, ale uvádzajú sa v rôznych jednotkách (skôr IOPS ako TPS). V súčasnosti sa uzol 2-vCPU na GCP odhaduje na 1 800 IOPS a uzol 2-vCPU na AWS sa odhaduje na 600 IOPS.

Vylepšenia výkonu CockroachDB

Keď som sa začiatkom roka 2018 pozrel na CockroachDB 1.1.3, jeho implementácia SQL JOIN bola obmedzená na hašovacie spojenia a heuristický plánovač; jeho výkon dotazov bol často lineárne zmenšený, ale nebol ničím podobným ako súčasný stav techniky - mal bližšie k výkonu SQLite. Do novembra 2018 mal CockroachDB 2.1 nákladový optimalizátor dotazov, ktorý bol konkurencieschopný s PostgreSQL pre výkon JOIN. Od verzie 19.2, po ďalšom roku vývoja (a po prechode na verzovanie kalendára), všetko Dotazy SQL používajú optimalizátor založený na nákladoch, dokonca aj príkazy DDL a funkcie okna. Na podporu optimalizátora založeného na nákladoch generuje CockroachDB automaticky štatistiku tabuľky.

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