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ábOdinstalová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 movrI191230 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.