CockroachDB-Überprüfung: Verteiltes SQL legt einen hohen Gang ein

Als ich CockroachDB Anfang 2018 überprüfte, stellte ich fest, dass die verteilte SQL-Datenbank, die auf einem transaktionalen und konsistenten Schlüsselwertspeicher basiert, so konzipiert ist, dass sie Festplatten-, Computer-, Rack- und sogar Rechenzentrumsfehler mit minimaler Latenzunterbrechung und Nein überlebt manuelle Eingriffe. Das ist alles noch wahr.

Zu dieser Zeit hatte CockroachDB meiner Meinung nach drei große Defizite: Eingeschränkte Optimierung von SQL JOIN-Abfragen, kein vollständig verwalteter Dienst und keine Unterstützung für JSON- oder Protobuf-Datentypen. Ich freue mich, berichten zu können, dass all diese Mängel inzwischen behoben wurden. JOINs verwenden jetzt einen kostenbasierten Optimierer, die CockroachCloud befindet sich in der Beta-Phase und ein JSONB-Datentyp wurde implementiert.

Was fehlt noch in CockroachDB? Ein bisschen, wenn Sie sich für die PostgreSQL-Kompatibilität interessieren:

  • Gespeicherte Prozeduren und Funktionen
  • Löst aus
  • Veranstaltungen
  • Benutzerdefinierte Funktionen
  • Volltextfunktionen und Indizes
  • Geodatenfunktionen und Indizes
  • Primärschlüssel löschen
  • XML-Funktionen
  • Sicherungspunkte
  • Berechtigungen auf Spaltenebene
  • CREATE TEMPORARY TABLE-Syntax
  • XA-Syntax

Die meisten vorhandenen OLTP-PostgreSQL-Anwendungen können mit einigen Problemumgehungen auf Anwendungsebene auf CockroachDB portiert werden. Wenn Sie jedoch Geodatenfunktionen (PostGIS) oder Volltextsuche verwendet haben, ist mir keine gute Möglichkeit bekannt, diese in der aktuellen Version von CockroachDB zu implementieren.

Es gibt ein Tracking-Problem für Geodatenindizes und -funktionen, aber obwohl es seit mehreren Jahren geöffnet ist, ist der Status von Geodatenmerkmalen nur "potenziell". Es gab eine Benutzerumfrage zu gewünschten geospatialen Anwendungsfällen, aber das ist nicht dasselbe wie das Versprechen der Funktion.

Die Volltextindizierung ist „geplant“, steht jedoch noch nicht auf der Roadmap. Mehrere Personen haben vorgeschlagen, CockroachDB in Bleve zu integrieren, um dies zu erreichen. Wieder keine Versprechen.

Im Juni 2019 änderte Cockroach seine OSS-Lizenz von APL-2 in eine „äußerst zulässige Version der Business Source License (BSL)“. Dies war im Wesentlichen eine Reaktion darauf, dass Amazon Web Services eine gegabelte Version von ElasticSearch als kostenpflichtigen Dienst anbot und es Cockroach ermöglichte, eine eigene Datenbank als Dienst anzubieten, ohne sich Sorgen machen zu müssen, dass AWS oder ein anderer Cloud-Anbieter seinen Donner stiehlt.

CockroachCloud ist ein vollständig gehosteter und vollständig verwalteter Dienst, der von Cockroach Labs erstellt wurde und dessen Eigentümer Cockroach Labs ist und der behauptet, die Bereitstellung, Skalierung und Verwaltung von CockroachDB mühelos zu gestalten. CockroachCloud läuft derzeit auf Amazon Web Services und der Google Cloud Platform.

Installation von CockroachDB und grundlegende Tests 

Ich habe CockroachDB 19.2.2 mit Homebrew auf meinem MacBook Pro installiert. Ich habe zuerst die alte Version (1.1.3) explizit deinstalliert, die ich von meiner ersten Überprüfung übrig hatte.

Homebrew ist spezifisch für Macs. Es ist nur eine von fünf Möglichkeiten, CockroachDB auf Macs zu installieren. Die anderen Möglichkeiten sind das Herunterladen der Binärdatei. benutze Kubernetes; benutze Docker; und aus der Quelle bauen. Linux und Windows haben weniger Installationsoptionen.

martinheller @ Martins-Retina-MacBook ~% brauen deinstallieren Kakerlake

Deinstallation von /usr/local/Cellar/cockroach/1.1.3 ... (5 Dateien, 72,9 MB)

martinheller @ Martins-Retina-MacBook ~% Brew installieren Kakerlake / Tap / Kakerlake

==> Kakerlake tippen / tippen

remote: Objekte aufzählen: 6, fertig.

remote: Objekte zählen: 100% (6/6), fertig.

remote: Objekte komprimieren: 100% (5/5), fertig.

Remote: Insgesamt 6 (Delta 0), wiederverwendet 3 (Delta 0), Pack-wiederverwendet 0

Objekte auspacken: 100% (6/6), fertig.

1 Formel getippt (32 Dateien, 45,6 KB).

==> Kakerlake von cockroachdb / tap installieren

==> Herunterladen von //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 =

==> Vorsichtsmaßnahmen

Starten Sie einen Einzelknotencluster, in dem die Daten gespeichert sind unter:

  / usr / local / var / cockroach /

Anstelle des Standardports 8080 dient der Knoten seiner Administrator-Benutzeroberfläche unter:

  // localhost: 26256

Verwenden Sie diesen Cluster NICHT zum Speichern von Daten, die Sie interessieren. es läuft unsicher

Modus und kann Daten öffentlich verfügbar machen, z. B. bei einem DNS-Rebinding-Angriff. Laufen

CockroachDB sicher, siehe:

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

Die Bash-Vervollständigung wurde installiert, um:

  /usr/local/etc/bash_completion.d

zsh-Vervollständigungen wurden installiert für:

  / usr / local / share / zsh / site-Funktionen

Starten Sie cockroachdb / tap / cockroach jetzt und starten Sie es beim Login neu:

  Brauservices starten Kakerlake / Tap / Kakerlake

Wenn Sie keinen Hintergrunddienst möchten / benötigen, können Sie einfach Folgendes ausführen:

  Kakerlakenstart - unsicher

==> Zusammenfassung

==> `Brew Cleanup` wurde seit 30 Tagen nicht mehr ausgeführt und läuft jetzt ...

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

18 symbolische Links von / usr / local beschnitten

martinheller @ Martins-Retina-MacBook ~% Kakerlake Start-Einzelknoten - unsicher

* *

* WARNUNG: LÄUFT IM INSECURE-MODUS!

* *

* - Ihr Cluster ist für jeden Client geöffnet, der darauf zugreifen kann.

* - Jeder Benutzer, auch root, kann sich ohne Angabe eines Passworts anmelden.

* - Jeder Benutzer, der eine Verbindung als Root herstellt, kann beliebige Daten in Ihrem Cluster lesen oder schreiben.

* - Es gibt keine Netzwerkverschlüsselung oder -authentifizierung und somit keine Vertraulichkeit.

* *

* Überprüfen Sie, wie Sie Ihren Cluster sichern können: //www.cockroachlabs.com/docs/v19.2/secure-a-cluster.html

* *

* *

* WARNUNG: Es wurde weder --listen-addr noch --advertise-addr angegeben.

* Der Server kündigt "Martins-Retina-MacBook.local" für andere Knoten an. Ist dies routingfähig?

* *

* Erwägen Sie die Verwendung von:

* - für nur lokale Server: --listen-addr = localhost

* - für Cluster mit mehreren Knoten: --advertise-addr =

* *

* *

* *

* INFO: Die Replikation wurde für diesen Cluster deaktiviert.

* Wenn / falls in Zukunft Knoten hinzugefügt werden, aktualisieren Sie die Zonenkonfigurationen, um den Replikationsfaktor zu erhöhen.

* *

CockroachDB-Knoten ab 2019-12-30 16: 30: 35.369965 +0000 UTC (dauerte 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 = disable

RPC-Client-Flags: Kakerlake --host = Martins-Retina-MacBook.local: 26257 - unsicher

Protokolle: / Users / martinheller / cockroach-data / logs

temporäres Verzeichnis: / Users / martinheller / cockroach-data / cockroach-temp884406444

externer E / A-Pfad: / Users / martinheller / cockroach-data / extern

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

Status: neuer Cluster initialisiert

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

Knoten-ID: 1

Zu diesem Zeitpunkt konnte ich den oben gezeigten Link zur Web-Benutzeroberfläche öffnen und die im folgenden Screenshot gezeigte webbasierte Verwaltungsoberfläche sehen.

Um die Installation auf Rauch zu testen, folgte ich der ersten Übung an der Cockroach University in einer anderen Registerkarte des Terminals, wie unten gezeigt. Ich fand das Tutorial gut, obwohl es eher in kurzen Videos als in Textform präsentiert wurde und eher für Anfänger als für erfahrene Datenbankadministratoren oder Entwickler gedacht war. Der praktische Teil beginnt mit der Verwendung des workloadTools zum Erstellen einer kleinen Datenbank, movr, und wird dann in der CockroachDB-SQL-Shell fortgesetzt.

martinheller @ Martins-Retina-MacBook ~% Kakerlaken-Workload init movr

I191230 16: 55: 34.351650 1 workload / workloadsql / dataload.go: 135 importierte Benutzer (0s, 50 Zeilen)

I191230 16: 55: 34.356751 1 workload / workloadsql / dataload.go: 135 importierte Fahrzeuge (0s, 15 Zeilen)

I191230 16: 55: 34.382023 1 workload / workloadsql / dataload.go: 135 importierte Fahrten (0s, 500 Zeilen)

I191230 16: 55: 34.404733 1 workload / workloadsql / dataload.go: 135 importierte Fahrzeugstandortgeschichten (0s, 1000 Zeilen)

I191230 16: 55: 34.429203 1 workload / workloadsql / dataload.go: 135 importierte promo_codes (0s, 1000 Zeilen)

martinheller @ Martins-Retina-MacBook ~% Kakerlake sql - unsicher

#

# Willkommen in der CockroachDB SQL-Shell.

# Alle Anweisungen müssen mit einem Semikolon abgeschlossen werden.

# Geben Sie zum Beenden Folgendes ein: \ q.

#

# Serverversion: CockroachDB CCL v19.2.2 (x86_64-apple-darwin14, erstellt 2019/12/11 01:27:47, go1.12.12) (gleiche Version wie Client)

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

#

# Eingeben \? für eine kurze Einführung.

#

root @: 26257 / defaultdb> SHOW-Datenbanken;

  Name der Datenbank 

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

  defaultdb     

  movr          

  postgres      

  System        

(4 Reihen)

Zeit: 2,028 ms

root @: 26257 / defaultdb> SHOW TABLES FROM movr;

          Tabellenname          

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

  Promo-Codes                

  Fahrten                      

  user_promo_codes           

  Benutzer                      

  Fahrzeugstandortgeschichten 

  Fahrzeuge                   

(6 Reihen)

Zeit: 2,863 ms

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

                   id | Stadt | Name | Adresse | Kreditkarte 

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

  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 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 Zeilen)

Zeit: 2,977 ms

In diesem Tutorial erfahren Sie mehr über CockroachDB, einschließlich der Grundlagen von CockroachDB-Clustern und der Grundlagen zum Ausführen von SQL in großem Maßstab.

Kakerlakenwolke

Das Hochfahren eines CockroachDB-Knotens ist ziemlich einfach, wie wir gerade gesehen haben. Das Hochfahren eines Clusters aus drei oder mehr Knoten erfordert etwas mehr Aufwand und Planung, insbesondere wenn Sie Cluster mit mehreren Regionen erstellen und die Tabellentopologie anpassen müssen. Wenn Sie Hilfe benötigen, sind die Vertriebsingenieure von Cockroach gerne für Sie da.

Zum Erstellen eines Clusters in der CockroachCloud müssen Sie jedoch ein Webformular ausfüllen, wie im folgenden Screenshot gezeigt. Derzeit können Sie über diese Self-Service-Schnittstelle nur einen Cluster mit nur einer Region erstellen. Wenn Sie Cluster mit mehreren Regionen, größere Knoten oder mehr als 24 Knoten pro Cluster benötigen, müssen Sie sich an den Support von Cockroach Labs wenden, um diese in der CockroachCloud für Sie bereitzustellen.

CockroachCloud-Cluster sind so isoliert und sicher wie möglich. Sie sind einzelne Mandanten, jeder in seinem eigenen Unterkonto und seiner eigenen VPC, und die VPCs sind voneinander und von jeder anderen externen Verbindung durch eine Firewall geschützt, sofern sie nicht für SQL- und Web-UI-Ports auf der Whitelist stehen. Alle Verbindungen zum Cluster über das Internet verwenden TLS 1.2.

Beachten Sie, dass Cockroach Labs derzeit keine privaten Clouds unterstützt. Sie haben jedoch Pläne, dies in Zukunft zu tun.

Als Faustregel schätzt Cockroach Labs, dass jede vCPU etwa 1000 TPS verarbeiten kann. Die Schätzungen, die auf der Seite zur Clustererstellung während der Bereitstellung angegeben werden, sind wahrscheinlich genauer, werden jedoch in verschiedenen Einheiten angegeben (IOPS anstelle von TPS). Derzeit wird ein 2-vCPU-Knoten in GCP auf 1800 IOPS und ein 2-vCPU-Knoten in AWS auf 600 IOPS geschätzt.

Leistungsverbesserungen bei CockroachDB

Als ich mir Anfang 2018 CockroachDB 1.1.3 ansah, beschränkte sich die Implementierung von SQL JOIN auf Hash-Joins und einen heuristischen Planer. Die Abfrageleistung wurde häufig linear skaliert, entsprach jedoch nicht dem Stand der Technik - sie entsprach eher der Leistung von SQLite. Bis November 2018 verfügte CockroachDB 2.1 über einen kostenbasierten Abfrageoptimierer, der hinsichtlich der JOIN-Leistung mit PostgreSQL konkurrierte. Ab Version 19.2 verwenden alle SQL-Abfragen nach einem weiteren Entwicklungsjahr (und einem Wechsel zur Kalenderversionierung) den kostenbasierten Optimierer, sogar DDL-Anweisungen und Fensterfunktionen. Zur Unterstützung des kostenbasierten Optimierers generiert CockroachDB automatisch Tabellenstatistiken.