Προγραμματισμός

Επανεξέταση CockroachDB: Κατανεμημένη μετατόπιση SQL σε υψηλή ταχύτητα

Όταν εξέτασα το CockroachDB στις αρχές του 2018, διαπίστωσα ότι η κατανεμημένη βάση δεδομένων SQL, χτισμένη πάνω από ένα κατάστημα συναλλαγών και σταθερών τιμών-κλειδιών, σχεδιάστηκε για να επιβιώσει σε αποτυχίες δίσκου, μηχανήματος, rack και ακόμη και κέντρων δεδομένων με ελάχιστη διακοπή καθυστέρησης και όχι χειροκίνητη παρέμβαση. Όλα αυτά εξακολουθούν να ισχύουν.

Εκείνη την εποχή, η CockroachDB είχε τρία μεγάλα ελλείμματα, κατά τη γνώμη μου: Περιορισμένη βελτιστοποίηση των ερωτημάτων SQL JOIN, χωρίς πλήρη διαχείριση υπηρεσίας και χωρίς υποστήριξη για τύπους δεδομένων JSON ή Protobuf. Είμαι στην ευχάριστη θέση να αναφέρω ότι έκτοτε έχουν αντιμετωπιστεί όλες αυτές οι ελλείψεις. Οι JOIN χρησιμοποιούν πλέον ένα εργαλείο βελτιστοποίησης βάσει κόστους, το CockroachCloud είναι σε έκδοση beta και έχει εφαρμοστεί ένας τύπος δεδομένων JSONB.

Τι λείπει ακόμα στο CockroachDB; Λίγο, αν ενδιαφέρεστε για τη συμβατότητα PostgreSQL:

  • Αποθηκευμένες διαδικασίες και λειτουργίες
  • Ενεργοποιητές
  • Εκδηλώσεις
  • Λειτουργίες που καθορίζονται από το χρήστη
  • Λειτουργίες και ευρετήρια πλήρους κειμένου
  • Γεωχωρικές συναρτήσεις και ευρετήρια
  • Απόρριψη πρωτεύοντος κλειδιού
  • Λειτουργίες XML
  • Σώματα
  • Προνόμια σε επίπεδο στήλης
  • ΔΗΜΙΟΥΡΓΙΑ ΣΥΝΤΟΜΙΚΗΣ σύνταξης ΠΙΝΑΚΑ
  • Σύνταξη XA

Οι περισσότερες υπάρχουσες εφαρμογές OLTP PostgreSQL μπορούν να μεταφερθούν στο CockroachDB με κάποιες λύσεις σε επίπεδο εφαρμογής. Εάν έχετε χρησιμοποιήσει γεωχωρικές δυνατότητες (PostGIS) ή αναζήτηση πλήρους κειμένου, ωστόσο, δεν γνωρίζω έναν καλό τρόπο για να τις εφαρμόσετε στην τρέχουσα έκδοση του CockroachDB.

Υπάρχει ένα πρόβλημα παρακολούθησης για γεωχωρικούς δείκτες και λειτουργίες, αλλά παρόλο που είναι ανοιχτό εδώ και αρκετά χρόνια, η κατάσταση των γεωχωρικών χαρακτηριστικών είναι μόνο "πιθανή". Υπήρξε δημοσκόπηση χρηστών σχετικά με τις επιθυμητές περιπτώσεις χωρικής χρήσης, αλλά δεν είναι το ίδιο με την υπόσχεση της δυνατότητας.

Η ευρετηρίαση πλήρους κειμένου είναι «προγραμματισμένη», αλλά δεν έχει ακόμη βρεθεί στον χάρτη πορείας. Αρκετοί άνθρωποι πρότειναν την ενσωμάτωση του CockroachDB με το Bleve για να το επιτύχουν. Και πάλι, δεν υπάρχουν υποσχέσεις.

Τον Ιούνιο του 2019, η Cockroach άλλαξε την άδεια χρήσης OSS από APL-2 σε "εξαιρετικά αποδεκτή έκδοση της άδειας επιχειρηματικής πηγής (BSL)". Αυτό ήταν βασικά ως απάντηση στο Amazon Web Services που προσφέρει μια διχασμένη έκδοση του ElasticSearch ως υπηρεσία επί πληρωμή και επιτρέπει στην Cockroach να προσφέρει τη δική της βάση δεδομένων ως υπηρεσία χωρίς να ανησυχείτε για την AWS ή οποιονδήποτε άλλο προμηθευτή cloud που κλέβει τις βροντές του.

Το CockroachCloud είναι μια πλήρως φιλοξενούμενη και πλήρως διαχειριζόμενη υπηρεσία που δημιουργήθηκε και ανήκε στην Cockroach Labs και ισχυρίζεται ότι κάνει εύκολη την ανάπτυξη, κλιμάκωση και διαχείριση του CockroachDB. Το CockroachCloud τρέχει επί του παρόντος στις Υπηρεσίες Ιστού του Amazon και στο Google Cloud Platform.

Εγκατάσταση CockroachDB και βασικές δοκιμές

Εγκατέστησα το CockroachDB 19.2.2 στο MacBook Pro χρησιμοποιώντας το Homebrew. Κατάργησα πρώτα την παλιά έκδοση (1.1.3) που είχα απομείνει από την αρχική μου κριτική.

Το Homebrew είναι ειδικό για Mac. Είναι μόνο ένας από τους πέντε τρόπους εγκατάστασης του CockroachDB σε Mac, ενώ άλλοι είναι να κατεβάσετε το δυαδικό αρχείο. χρησιμοποιήστε το Kubernetes. χρησιμοποιήστε το Docker; και χτίστε από την πηγή. Το Linux και τα Windows έχουν λιγότερες επιλογές εγκατάστασης.

martinheller @ Martins-Retina-MacBook ~% brew απεγκατάσταση κατσαρίδας

Απεγκατάσταση /usr/local/Cellar/cockroach/1.1.3 ... (5 αρχεία, 72.9MB)

martinheller @ Martins-Retina-MacBook ~% brew install cockroachdb / tap / κατσαρίδα

==>Πατώντας cockroachdb / πατήστε

απομακρυσμένο: απαρίθμηση αντικειμένων: 6, ολοκληρωμένα.

απομακρυσμένο: Μετρώντας αντικείμενα: 100% (6/6), ολοκληρωμένο.

απομακρυσμένο: Συμπίεση αντικειμένων: 100% (5/5), ολοκληρωμένο.

απομακρυσμένο: Σύνολο 6 (δέλτα 0), επαναχρησιμοποιήθηκε 3 (δέλτα 0), πακέτο επαναχρησιμοποιήθηκε 0

Αποσυσκευασία αντικειμένων: 100% (6/6), ολοκληρώθηκε.

Πατήστε 1 τύπος (32 αρχεία, 45,6 KB).

==>Εγκατάσταση κατσαρίδας από το cockroachdb / tap

==>Λήψη //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 =

==>Προειδοποιήσεις

ξεκινήστε ένα σύμπλεγμα ενός κόμβου που αποθηκεύει τα δεδομένα του κάτω από:

/ usr / local / var / κατσαρίδα /

Αντί για την προεπιλεγμένη θύρα του 8080, ο κόμβος εξυπηρετεί τη διεπαφή χρήστη του διαχειριστή στη διεύθυνση:

// localhost: 26256

ΜΗΝ χρησιμοποιείτε αυτό το σύμπλεγμα για να αποθηκεύσετε δεδομένα που σας ενδιαφέρουν. τρέχει σε ανασφαλή

λειτουργία και μπορεί να εκθέσει δεδομένα δημόσια σε π.χ. μια επίθεση επαναφοράς DNS. Τρέχω

CockroachDB με ασφάλεια, δείτε:

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

Η ολοκλήρωση του Bash έχει εγκατασταθεί σε:

/usr/local/etc/bash_completion.d

Οι ολοκληρώσεις zsh έχουν εγκατασταθεί σε:

/ usr / local / share / zsh / site-συναρτήσεις

Για να ξεκινήσετε την έναρξη του cockroachdb / tap / cockroach τώρα και κάντε επανεκκίνηση κατά τη σύνδεση:

οι υπηρεσίες παρασκευής ξεκινούν κατσαρίδα / βρύση / κατσαρίδα

Ή, εάν δεν θέλετε / χρειάζεστε μια υπηρεσία παρασκηνίου, μπορείτε απλώς να εκτελέσετε:

έναρξη κατσαρίδας - ανασφαλής

==>Περίληψη

==>Το "brew cleanup" δεν έχει εκτελεστεί σε 30 ημέρες, τρέχει τώρα ...

Κατάργηση: /Users/martinheller/Library/Caches/Homebrew/node--12.12.0.catalina.bottle.tar.gz ... (14.8MB)

Κλάδεμα 18 συμβολικούς συνδέσμους από / usr / local

martinheller @ Martins-Retina-MacBook ~% κατσαρίδα start-single-node --insecure

*

* ΠΡΟΕΙΔΟΠΟΙΗΣΗ: ΛΕΙΤΟΥΡΓΙΑ ΣΕ ΑΣΦΑΛΕΙΑ ΛΕΙΤΟΥΡΓΙΑ!

*

* - Το σύμπλεγμα είναι ανοιχτό για οποιονδήποτε πελάτη μπορεί να έχει πρόσβαση.

* - Κάθε χρήστης, ακόμη και root, μπορεί να συνδεθεί χωρίς να παρέχει κωδικό πρόσβασης.

* - Κάθε χρήστης, που συνδέεται ως root, μπορεί να διαβάσει ή να γράψει δεδομένα στο σύμπλεγμα.

* - Δεν υπάρχει κρυπτογράφηση δικτύου ούτε έλεγχος ταυτότητας, και επομένως δεν υπάρχει εμπιστευτικότητα.

*

* Δείτε πώς μπορείτε να ασφαλίσετε το σύμπλεγμα σας: //www.cockroachlabs.com/docs/v19.2/secure-a-cluster.html

*

*

* ΠΡΟΕΙΔΟΠΟΙΗΣΗ: δεν καθορίστηκε ούτε --listen-addr ούτε --advertise-addr.

* Ο διακομιστής θα διαφημίσει το "Martins-Retina-MacBook.local" σε άλλους κόμβους, είναι αυτό δρομολογημένο;

*

* Σκεφτείτε να χρησιμοποιήσετε:

* - για τοπικούς διακομιστές μόνο: --listen-addr = localhost

* - για συστάδες πολλαπλών κόμβων: - διαφήμιση-addr =

*

*

*

* ΠΛΗΡΟΦΟΡΙΕΣ: Η αναπαραγωγή απενεργοποιήθηκε για αυτό το σύμπλεγμα.

* Όταν / εάν προσθέτετε κόμβους στο μέλλον, ενημερώστε τις διαμορφώσεις ζώνης για να αυξήσετε τον παράγοντα αναπαραγωγής.

*

Κόμβος CockroachDB από 2019-12-30 16: 30: 35.369965 +0000 UTC (πήρε 0,6 δευτερόλεπτα)

έκδοση: CCL v19.2.2 @ 2019/12/11 01:27:47 (go1.12.12)

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

sql: postgresql: //[email protected]: 26257sslmode = απενεργοποίηση

Σημαίες πελάτη RPC: κατσαρίδα - ξενώνας = Martins-Retina-MacBook. Τοπική: 26257 - ασφαλής

logs: / Χρήστες / martinheller / κατσαρίδα-δεδομένα / αρχεία καταγραφής

temp dir: / Χρήστες / martinheller / κατσαρίδα-δεδομένα / κατσαρίδα-temp884406444

εξωτερική διαδρομή εισόδου / εξόδου: / Χρήστες / martinheller / κατσαρίδα-δεδομένα / εξωτερικό

store [0]: διαδρομή = / Χρήστες / martinheller / κατσαρίδα-δεδομένα

κατάσταση: αρχικοποιημένο νέο σύμπλεγμα

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

nodeID: 1

Σε αυτό το σημείο μπόρεσα να ανοίξω τον σύνδεσμο διεπαφής χρήστη Ιστού που εμφανίζεται παραπάνω και να δω τη διεπαφή διαχείρισης μέσω διαδικτύου που εμφανίζεται στο παρακάτω στιγμιότυπο οθόνης.

Για να δοκιμάσω τον καπνό της εγκατάστασης, ακολούθησα την πρώτη άσκηση στο Cockroach University σε μια άλλη καρτέλα Terminal, όπως φαίνεται παρακάτω. Βρήκα το σεμινάριο καλό, αν και παρουσιάστηκε σε σύντομα βίντεο αντί για κείμενο, και απευθυνόταν σε αρχάριους και όχι σε έμπειρους DBA ή προγραμματιστές. Το hands-on μέρος ξεκινά χρησιμοποιώντας το φόρτο εργασίας εργαλείο για τη δημιουργία μιας μικρής βάσης δεδομένων, movr, και στη συνέχεια συνεχίζεται στο κέλυφος CockroachDB SQL.

martinheller @ Martins-Retina-MacBook ~% φόρτος εργασίας κατσαρίδας init movr

I191230 16: 55: 34.351650 1 φόρτος εργασίας / φόρτος εργασίαςql / dataload.go: 135 εισαγόμενοι χρήστες (0s, 50 σειρές)

I191230 16: 55: 34.356751 1 φόρτος εργασίας / φόρτος εργασίαςql / dataload.go: 135 εισαγόμενα οχήματα (0s, 15 σειρές)

I191230 16: 55: 34.382023 1 φόρτος εργασίας / φόρτος εργασίαςql / dataload.go: 135 εισαγόμενες βόλτες (0s, 500 σειρές)

I191230 16: 55: 34.404733 1 φόρτος εργασίας / φόρτος εργασίαςql / dataload.go: 135 εισαγόμενα οχήματα_ τοποθεσίες_ ιστορίες (0s, 1000 σειρές)

I191230 16: 55: 34.429203 1 φόρτος εργασίας / φόρτος εργασίαςqq / dataload.go: 135 εισαγόμενοι κωδικοί προσφοράς (0s, 1000 σειρές)

martinheller @ Martins-Retina-MacBook ~% κατσαρίδα sql - ασφαλές

#

# Καλώς ήλθατε στο κέλυφος CockroachDB SQL.

# Όλες οι δηλώσεις πρέπει να τερματιστούν με ερωτηματικό.

# Για έξοδο, πληκτρολογήστε: \ q.

#

# Έκδοση διακομιστή: CockroachDB CCL v19.2.2 (x86_64-apple-darwin14, built 2019/12/11 01:27:47, go1.12.12) (ίδια έκδοση με τον πελάτη)

# Αναγνωριστικό συμπλέγματος: 9f7141f8-d53d-49e3-9a5a-264de8cfa626

#

# Εισαγω \? για μια σύντομη εισαγωγή.

#

root @: 26257 / defaultdb> SHOW βάσεις δεδομένων;

όνομα βάσης δεδομένων

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

προεπιλογή db

movr

postgres

Σύστημα

(4 σειρές)

Χρόνος: 2.028ms

root @: 26257 / defaultdb> ΕΚΘΕΣΗ ΠΙΝΑΚΩΝ ΑΠΟ movr;

όνομα_τραπεζιού

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

κωδικοί προώθησης

βόλτες

κωδικοί_προγραμματισμού χρήστη

χρήστες

οχήματα_τοποθεσία_ ιστορίες

οχήματα

(6 σειρές)

Χρόνος: 2.863ms

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

αναγνωριστικό | πόλη | όνομα | διεύθυνση | πιστωτική κάρτα

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

ae147ae1-47ae-4800-8000-000000000022 | Άμστερνταμ | Τάιλερ Ντάλτον | 88194 Angela Gardens Σουίτα 94 | 4443538758

b3333333-3333-4000-8000-000000000023 | Άμστερνταμ | Dillon Martin | 29590 Butler Plain Apt. 25 | 3750897994

b851eb85-1eb8-4000-8000-000000000024 | Άμστερνταμ | Ντέμπορα Κάρσον | 32768 Eric Divide Σουίτα 88 | 8107478823

bd70a3d7-0a3d-4000-8000-000000000025 | Άμστερνταμ | Ντέιβιντ Στάντον | 80015 Mark Views Σουίτα 96 | 3471210499

c28f5c28-f5c2-4000-8000-000000000026 | Άμστερνταμ | Μαρία Weber | 14729 Karen Radial | 5844236997

1eb851eb-851e-4800-8000-000000000006 | Μπόστον | Μπράιαν Κάμπελ | 92025 Yang Village | 9016427332

23d70a3d-70a3-4800-8000-000000000007 | Μπόστον | Carl Mcguire | 60124 Palmer Mews Apt. 49 | 4566257702

28f5c28f-5c28-4600-8000-000000000008 | Μπόστον | Τζένιφερ Σάντερς | 19121 Padilla Brooks Apt. 12 | 1350968125

2e147ae1-47ae-4400-8000-000000000009 | Μπόστον | Cindy Medina | 31118 Allen Gateway Apt. 60 | 6464362441

33333333-3333-4400-8000-00000000000a | Μπόστον | Daniel Hernandez MD | 51438 Janet Valleys | 0904722368

(10 σειρές)

Χρόνος: 2.977ms

Το σεμινάριο συνεχίζεται από εκεί για να διδάξει περισσότερα για το CockroachDB, συμπεριλαμβανομένων των θεμελιωδών στοιχείων των συμπλεγμάτων CockroachDB και των βασικών στοιχείων της λειτουργίας SQL σε κλίμακα.

CockroachCloud

Η περιστροφή ενός κόμβου CockroachDB είναι αρκετά απλή, όπως μόλις είδαμε. Η περιστροφή ενός συμπλέγματος τριών ή περισσότερων κόμβων απαιτεί λίγο περισσότερη προσπάθεια και σχεδιασμό, ειδικά εάν δημιουργείτε συστάδες πολλαπλών περιοχών και πρέπει να συντονίσετε την τοπολογία του πίνακα. Εάν χρειάζεστε βοήθεια, οι μηχανικοί πωλήσεων της κατσαρίδας θα χαρούν να συμμετάσχουν.

Από την άλλη πλευρά, η δημιουργία ενός συμπλέγματος στο CockroachCloud είναι θέμα συμπλήρωσης μιας φόρμας ιστού, όπως φαίνεται στο παρακάτω στιγμιότυπο οθόνης. Προς το παρόν, μπορείτε να δημιουργήσετε ένα σύμπλεγμα μίας περιοχής μόνο από αυτήν τη διεπαφή αυτοεξυπηρέτησης. εάν χρειάζεστε συστάδες πολλαπλών περιοχών, μεγαλύτερους κόμβους ή περισσότερους από 24 κόμβους ανά σύμπλεγμα, θα πρέπει να επικοινωνήσετε με την υποστήριξη της Cockroach Labs για να τους παρέχετε στο CockroachCloud.

Οι συστάδες CockroachCloud είναι όσο το δυνατόν πιο απομονωμένες και ασφαλείς. Είναι μεμονωμένοι μισθωτές, ο καθένας στον δικό του δευτερεύοντα λογαριασμό και το VPC, και τα VPC είναι τείχος προστασίας μεταξύ τους και από οποιαδήποτε άλλη εξωτερική σύνδεση, εκτός εάν υπάρχει λίστα επιτρεπόμενων για θύρες SQL και UI ιστού. Όλες οι συνδέσεις στο σύμπλεγμα μέσω Διαδικτύου χρησιμοποιούν το TLS 1.2.

Σημειώστε ότι το Cockroach Labs δεν υποστηρίζει προς το παρόν ιδιωτικά σύννεφα. Ωστόσο, σκοπεύουν να το πράξουν στο μέλλον.

Κατά κανόνα, το Cockroach Labs εκτιμά ότι κάθε vCPU μπορεί να χειριστεί περίπου 1000 TPS. Οι εκτιμήσεις που δίνονται στη σελίδα δημιουργίας συμπλέγματος όπως κάνετε η παροχή είναι πιθανώς πιο ακριβείς, αλλά δίνονται σε διαφορετικές μονάδες (IOPS αντί για TPS). Επί του παρόντος, ένας κόμβος 2-vCPU στο GCP εκτιμάται σε 1800 IOPS και ένας κόμβος 2-vCPU στο AWS εκτιμάται σε 600 IOPS.

Βελτιώσεις απόδοσης CockroachDB

Όταν κοίταξα το CockroachDB 1.1.3 στις αρχές του 2018, η εφαρμογή του SQL JOIN περιορίστηκε σε hash jins και heuristic planner. Η απόδοση της ερώτησής της συχνά κλιμακώθηκε γραμμικά, αλλά δεν ήταν κάτι σαν την τελευταία λέξη της τεχνολογίας - ήταν πιο κοντά στην παράσταση του SQLite. Μέχρι τον Νοέμβριο του 2018, το CockroachDB 2.1 είχε ένα εργαλείο βελτιστοποίησης ερωτήσεων βάσει κόστους που ήταν ανταγωνιστικό με την PostgreSQL για απόδοση JOIN. Από την έκδοση 19.2, μετά από ένα ακόμη έτος ανάπτυξης (και μετάβαση σε έκδοση ημερολογίου), όλα Τα ερωτήματα SQL χρησιμοποιούν το εργαλείο βελτιστοποίησης βάσει κόστους, ακόμη και τις δηλώσεις DDL και τις λειτουργίες παραθύρων. Για την υποστήριξη του βελτιστοποιητή βάσει κόστους, το CockroachDB δημιουργεί αυτόματα στατιστικά πίνακα.

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