Programování

Recenze CockroachDB: Distribuovaný SQL řadí na nejvyšší rychlost

Když jsem na začátku roku 2018 zkontroloval CockroachDB, zjistil jsem, že distribuovaná databáze SQL, postavená na transakčním a konzistentním úložišti klíč-hodnota, byla navržena tak, aby přežila selhání disku, stroje, stojanu a dokonce i datového centra s minimálním narušením latence a bez manuální zásah. To je stále pravda.

V té době měl CockroachDB podle mého názoru tři velké deficity: Omezená optimalizace dotazů SQL JOIN, žádná plně spravovaná služba a žádná podpora pro datové typy JSON nebo Protobuf. S potěšením oznamuji, že všechny tyto nedostatky byly mezitím odstraněny. JOIN nyní používají optimalizátor založený na nákladech, CockroachCloud je v beta verzi a byl implementován datový typ JSONB.

Co stále chybí v CockroachDB? Docela dost, pokud vám záleží na kompatibilitě s PostgreSQL:

  • Uložené procedury a funkce
  • Spouštěče
  • Události
  • Uživatelem definované funkce
  • Fulltextové funkce a rejstříky
  • Geoprostorové funkce a indexy
  • Zrušte primární klíč
  • Funkce XML
  • Uložené body
  • Oprávnění na úrovni sloupců
  • VYTVOŘIT syntaxi DOČASNÉ TABULKY
  • Syntaxe XA

Většina stávajících aplikací OLTP PostgreSQL může být portována na CockroachDB s některými řešeními na úrovni aplikace. Pokud jste použili geoprostorové funkce (PostGIS) nebo fulltextové vyhledávání, nevím o dobrém způsobu jejich implementace v aktuální verzi CockroachDB.

U geoprostorových indexů a funkcí existuje problém se sledováním, ale přestože je již několik let otevřený, stav geoprostorových prvků je pouze „potenciální“. O požadovaných geoprostorových případech použití proběhlo uživatelské hlasování, ale to není totéž jako slibovat tuto funkci.

Fulltextové indexování je „plánováno“, ale zatím není v plánu. Několik lidí za tímto účelem navrhlo integraci CockroachDB s Bleve. Opět žádné sliby.

V červnu 2019 společnost Cockroach změnila svou licenci OSS z APL-2 na „extrémně tolerantní verzi licence na zdroj podnikání (BSL)“. To bylo v zásadě v reakci na to, že Amazon Web Services nabízí vidlicovou verzi ElasticSearch jako placenou službu, a umožňuje společnosti Cockroach nabízet svou vlastní databázi jako službu bez obav z AWS nebo jiného prodejce cloudu, který ukradl jeho hrom.

CockroachCloud je plně hostovaná a plně spravovaná služba vytvořená a vlastněná laboratořími Cockroach Labs, která tvrdí, že nasazení, škálování a správa CockroachDB jsou snadné. CockroachCloud aktuálně běží na webových službách Amazon a Google Cloud Platform.

Instalace CockroachDB a základní testování

Nainstaloval jsem CockroachDB 19.2.2 na svůj MacBook Pro pomocí Homebrew. Nejprve jsem explicitně odinstaloval starou verzi (1.1.3), kterou jsem nechal ze své původní kontroly.

Homebrew je specifický pro počítače Mac. Je to jen jeden z pěti způsobů instalace CockroachDB na počítačích Mac, ostatní jsou ke stažení binárního souboru; používat Kubernetes; použijte Docker; a stavět ze zdroje. Linux a Windows mají méně možností instalace.

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

Odinstalování /usr/local/Cellar/cockroach/1.1.3 ... (5 souborů, 72,9 MB)

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

==>Výčepní šváb / kohoutek

remote: Výčet objektů: 6, hotovo.

remote: Počítání objektů: 100% (6/6), hotovo.

remote: Komprese objektů: 100% (5/5), hotovo.

remote: Celkem 6 (delta 0), znovu použito 3 (delta 0), znovu použito 0

Vybalení objektů: 100% (6/6), hotovo.

Klepněte na 1 vzorec (32 souborů, 45,6 kB).

==>Instalace švába z cockroachdb / tap

==>Stahování //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 =

==>Upozornění

spustit klastr s jedním uzlem, který ukládá svá data pod:

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

Namísto výchozího portu 8080 uzel obsluhuje své uživatelské rozhraní správce na adrese:

// localhost: 26256

NEPOUŽÍVEJTE tento cluster k ukládání dat, na kterých vám záleží; běží nejistě

režimu a může vystavovat data veřejně např. útok rebinding DNS. Běžet

CockroachDB securely, see see:

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

Dokončení bash bylo nainstalováno pro:

/usr/local/etc/bash_completion.d

Doplňky zsh byly nainstalovány pro:

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

Chcete-li mít launchd start cockroachdb / tap / cockroach now and restart at login:

služby vaření začnou švábem / kohoutkem / švábem

Nebo pokud nechcete / nepotřebujete službu na pozadí, stačí spustit:

start švábů - nejistý

==>souhrn

==>program „brew cleanup“ nebyl spuštěn za 30 dní, běží nyní ...

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

Prořezáno 18 symbolických odkazů z / usr / local

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

*

* UPOZORNĚNÍ: BĚŽÍCÍ V NEBEZPEČNÉM REŽIMU!

*

* - Váš cluster je otevřený pro každého klienta, který má přístup.

* - Každý uživatel, dokonce i root, se může přihlásit bez zadání hesla.

* - Každý uživatel, který se připojuje jako root, může číst nebo zapisovat libovolná data ve vašem clusteru.

* - Neexistuje žádné síťové šifrování ani ověřování, a tedy ani důvěrnost.

*

* Podívejte se, jak zabezpečit svůj cluster: //www.cockroachlabs.com/docs/v19.2/secure-a-cluster.html

*

*

* UPOZORNĚNÍ: nebyl zadán --listen-addr ani --advertise-addr.

* Server bude inzerovat „Martins-Retina-MacBook.local“ na jiné uzly, je to směrovatelné?

*

* Zvažte použití:

* - pouze pro místní servery: --listen-addr = localhost

* - pro víceuzlové klastry: --advertise-addr =

*

*

*

* INFO: Replikace byla pro tento cluster zakázána.

* Při / pokud v budoucnu přidáte uzly, aktualizujte konfigurace zón, abyste zvýšili faktor replikace.

*

Uzel CockroachDB počínaje 2019-12-30 16:30: 35,369965 +0000 UTC (trvalo 0,6 s)

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 = deaktivovat

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

protokoly: / Uživatelé / martinheller / data švábů / 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

status: inicializovaný nový klastr

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

nodeID: 1

V tomto okamžiku jsem byl schopen otevřít odkaz na webové uživatelské rozhraní zobrazený výše a zobrazit webové rozhraní pro správu zobrazené na následujícím obrázku.

Při kouřové zkoušce instalace jsem sledoval první cvičení na Univerzitě švábů na jiné kartě Terminál, jak je uvedeno níže. Zjistil jsem, že výukový program je dobrý, i když je prezentován spíše v krátkých videích než v textu a je určen spíše pro začátečníky než pro zkušené DBA nebo vývojáře. Praktická část začíná použitím pracovní zátěž nástroj pro vytvoření malé databáze, movr, pak pokračuje ve skořepině SQL CockroachDB.

martinheller @ Martins-Retina-MacBook ~% pracovní zátěž švábů inicializace movr

I191230 16:55: 34,351650 1 pracovní zátěž / pracovní zátěžql / dataload.go: 135 importovaných uživatelů (0 s, 50 řádků)

I191230 16: 55: 34.356751 1 pracovní zátěž / pracovní zátěžql / dataload.go: 135 importovaných vozidel (0 s, 15 řádků)

I191230 16:55: 34,382023 1 pracovní zátěž / pracovní zátěžql / dataload.go: 135 importovaných jízd (0 s, 500 řádků)

I191230 16:55: 34,404733 1 pracovní vytížení / pracovní vytížení SQL / Dataload.go: 135 importovaných vozidel_místa_historie (0 s, 1000 řádků)

I191230 16:55: 34,429203 1 pracovní zátěž / pracovní zátěžql / dataload.go: 135 importovaných promo_codes (0 s, 1000 řádků)

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

#

# Vítejte v prostředí SQL CockroachDB.

# Všechny příkazy musí být ukončeny středníkem.

# Chcete-li ukončit, zadejte: \ q.

#

# Verze serveru: CockroachDB CCL v19.2.2 (x86_64-apple-darwin14, postaveno 2019/12/11 01:27:47, go1.12.12) (stejná verze jako klient)

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

#

# Enter \? pro krátký úvod.

#

root @: 26257 / defaultdb> ZOBRAZIT databáze;

jméno databáze

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

defaultdb

movr

postgres

Systém

(4 řádky)

Čas: 2,028 ms

root @: 26257 / defaultdb> ZOBRAZIT TABULKY Z movr;

název_tabulky

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

promo_codes

jezdí

user_promo_codes

uživatelů

history_location_histories

vozidla

(6 řádků)

Čas: 2,863 ms

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

id | město | jméno | 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 Označit zobrazení 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 Valleys | 0904722368

(10 řádků)

Čas: 2,977 ms

Výukový program pokračuje odtud, kde se dozvíte více o CockroachDB, včetně základů klastrů CockroachDB a základů spouštění SQL ve velkém.

Šváb Cloud

Roztočení jednoho uzlu CockroachDB je poměrně jednoduché, jak jsme právě viděli. Roztočení klastru tří nebo více uzlů vyžaduje trochu většího úsilí a plánování, zvláště pokud vytváříte klastry s více oblastmi a potřebujete vyladit topologii tabulky. Pokud potřebujete pomoc, prodejní technici švábů se rádi zapojí.

Na druhou stranu je vytvoření clusteru v CockroachCloud otázkou vyplnění webového formuláře, jak je znázorněno na následujícím obrázku. V současné době můžete z tohoto samoobslužného rozhraní vytvořit pouze cluster s jednou oblastí; Pokud potřebujete klastry s více regiony, větší uzly nebo více než 24 uzlů na klastr, musíte kontaktovat podporu společnosti Cockroach Labs a zajistit je pro vás v CockroachCloud.

Klastry CockroachCloud jsou co nejizolovanější a nejbezpečnější. Jsou to jediní tenanti, každý ve svém vlastním podúčtu a VPC, a VPC jsou firewallovaní od sebe navzájem a od jakéhokoli jiného vnějšího připojení, pokud nejsou na seznamu povolených pro porty SQL a webové uživatelské rozhraní. Všechna připojení ke clusteru přes internet používají protokol TLS 1.2.

Upozorňujeme, že Cockroach Labs aktuálně nepodporuje soukromé cloudy. Mají však plány do budoucna.

Pravidlem je, že společnost Cockroach Labs odhaduje, že každá vCPU zvládne přibližně 1 000 TPS. Odhady uvedené na stránce vytváření clusteru, jak provádíte zřizování, jsou pravděpodobně přesnější, ale jsou uvedeny v různých jednotkách (spíše IOPS než TPS). V současné době se uzel 2-vCPU na GCP odhaduje na 1 800 IOPS a uzel 2-vCPU na AWS se odhaduje na 600 IOPS.

Vylepšení výkonu CockroachDB

Když jsem se na začátku roku 2018 podíval na CockroachDB 1.1.3, jeho implementace SQL JOIN byla omezena na hash joins a heuristický plánovač; jeho výkon dotazů se často měnil lineárně, ale nebyl nic podobného stavu techniky - blížil se výkonu SQLite. V listopadu 2018 měl CockroachDB 2.1 nákladový optimalizátor dotazů, který byl konkurenceschopný s PostgreSQL pro výkon JOIN. Od verze 19.2, po dalším roce vývoje (a přechodu na verzi kalendáře), Všechno Dotazy SQL používají optimalizátor založený na nákladech, dokonce i příkazy DDL a funkce okna. Na podporu optimalizátoru založeného na nákladech generuje CockroachDB automaticky statistiku tabulek.