Ulasan CockroachDB: SQL diedarkan beralih ke gear tinggi

Semasa saya mengkaji CockroachDB pada awal tahun 2018, saya mendapati bahawa pangkalan data SQL yang diedarkan, yang dibina di atas kedai nilai kunci transaksional dan konsisten, dirancang untuk bertahan dengan kegagalan cakera, mesin, rak, dan bahkan pusat data dengan gangguan latensi minimum dan campur tangan manual. Itu semua masih berlaku.

Pada masa itu, CockroachDB mempunyai tiga kekurangan besar, pada pendapat saya: Pengoptimuman terhad terhadap pertanyaan SQL JOIN, tidak ada perkhidmatan yang diuruskan sepenuhnya, dan tidak ada sokongan untuk jenis data JSON atau Protobuf. Saya dengan senang hati melaporkan bahawa semua kekurangan ini telah diatasi. JOIN kini menggunakan pengoptimum berasaskan kos, CockroachCloud dalam versi beta, dan jenis data JSONB telah dilaksanakan.

Apa yang masih ada di CockroachDB? Agak lama, jika anda mengambil berat tentang keserasian PostgreSQL:

  • Prosedur dan fungsi yang disimpan
  • Pencetus
  • Acara
  • Fungsi yang ditentukan pengguna
  • Fungsi dan indeks teks penuh
  • Fungsi dan indeks geospatial
  • Jatuhkan kunci utama
  • Fungsi XML
  • Tempat simpanan
  • Keistimewaan peringkat lajur
  • BUAT sintaks JADUAL SEMENTARA
  • Sintaks XA

Sebilangan besar aplikasi OLTP PostgreSQL yang ada dapat disalurkan ke CockroachDB dengan beberapa penyelesaian pada peringkat aplikasi. Sekiranya anda telah menggunakan ciri geospasial (PostGIS) atau carian teks penuh, saya tidak tahu cara yang baik untuk melaksanakannya dalam versi CockroachDB terkini.

Terdapat masalah penjejakan untuk indeks dan fungsi geospasial, tetapi walaupun telah dibuka selama beberapa tahun, status ciri geospasial hanya "berpotensi". Telah ada tinjauan pengguna mengenai kes penggunaan geospasial yang diinginkan, tetapi itu tidak sama dengan menjanjikan fitur tersebut.

Pengindeksan teks penuh "dirancang", tetapi belum ada di peta jalan. Beberapa orang mencadangkan untuk menggabungkan CockroachDB dengan Bleve untuk mencapainya. Sekali lagi, tiada janji.

Pada bulan Jun 2019, Cockroach mengubah lesen OSSnya dari APL-2 menjadi "versi Lesen Sumber Perniagaan (BSL) yang sangat permisif." Ini pada dasarnya adalah sebagai tindak balas kepada Perkhidmatan Web Amazon yang menawarkan versi ElasticSearch bercabang sebagai perkhidmatan berbayar, dan membolehkan Cockroach menawarkan pangkalan data sendiri sebagai perkhidmatan tanpa perlu risau AWS atau vendor awan lain mencuri guruhnya.

CockroachCloud adalah perkhidmatan yang dihoskan dan dikendalikan sepenuhnya yang dibuat dan dimiliki oleh Cockroach Labs yang mendakwa menjadikan penggunaan, penskalaan, dan pengurusan CockroachDB tidak dapat dilakukan dengan mudah. CockroachCloud kini berjalan di Amazon Web Services dan Google Cloud Platform.

Pemasangan dan ujian asas CockroachDB 

Saya memasang CockroachDB 19.2.2 pada MacBook Pro saya menggunakan Homebrew. Saya mula-mula melepaskan versi lama secara jelas (1.1.3) yang saya tinggalkan dari tinjauan awal saya.

Homebrew khusus untuk Mac. Ini hanya satu daripada lima cara memasang CockroachDB pada Mac, yang lain ialah memuat turun binari; gunakan Kubernetes; gunakan Docker; dan membina dari sumber. Linux dan Windows mempunyai pilihan pemasangan yang lebih sedikit.

martinheller @ Martins-Retina-MacBook ~% brew uninstall lipas

Nyahpasang /usr/local/Cellar/cockroach/1.1.3 ... (5 fail, 72.9MB)

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

==> Mengetuk lipas / ketuk

jarak jauh: Membilang objek: 6, selesai.

jauh: Membilang objek: 100% (6/6), selesai.

jauh: Memampatkan objek: 100% (5/5), selesai.

jauh: Jumlah 6 (delta 0), digunakan semula 3 (delta 0), pek digunakan semula 0

Membongkar objek: 100% (6/6), selesai.

Mengetuk 1 formula (32 fail, 45.6KB).

==> Memasang lipas dari lipas / ketuk

==> Memuat turun //binaries.cockroachdb.com/cockroach-v19.2.2.darwin-10.9-a

==> /usr/local/Cellar/cockroach/19.2.2/bin/cockroach gen man - jalan = / usr / tempatan / C

==> /usr/local/Cellar/cockroach/19.2.2/bin/cockroach gen autocomplete gen --out

==> /usr/local/Cellar/cockroach/19.2.2/bin/cockroach gen autocomplete zsh --out =

==> Kaveat

mulakan kluster nod tunggal yang menyimpan datanya di bawah:

  / usr / tempatan / var / lipas /

Daripada port lalai 8080, node melayani UI pentadbirnya di:

  // localhost: 26256

JANGAN gunakan kluster ini untuk menyimpan data yang anda minati; ia berjalan dalam keadaan tidak selamat

mod dan boleh mendedahkan data secara terbuka seperti serangan rebinding DNS. Untuk menjalankan

CockroachDB dengan selamat, sila lihat:

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

Penyelesaian Bash telah dipasang ke:

  /usr/local/etc/bash_completion.d

penyelesaian zsh telah dipasang untuk:

  / usr / local / share / zsh / site-function

Untuk memulakan launchd mulakan cockroachdb / tap / lipas sekarang dan mulakan semula semasa log masuk:

  perkhidmatan pembuatan bir mulai lipas / ketuk / lipas

Atau, jika anda tidak mahu / memerlukan perkhidmatan latar belakang, anda hanya boleh menjalankan:

  permulaan lipas - tidak selamat

==> Ringkasan

==> `pembersihan brew` belum dijalankan dalam 30 hari, berjalan sekarang ...

Mengalih keluar: /Users/martinheller/Library/Caches/Homebrew/node--12.12.0.catalina.bottle.tar.gz ... (14.8MB)

Dipotong 18 pautan simbolik dari / usr / local

martinheller @ Martins-Retina-MacBook ~% lipas permulaan-simpul tunggal - tidak selamat

*

* PERINGATAN: MENJALANKAN DALAM MOD INSECURE!

*

* - Kluster anda terbuka untuk setiap pelanggan yang dapat mengakses.

* - Mana-mana pengguna, walaupun root, boleh log masuk tanpa memberikan kata laluan.

* - Mana-mana pengguna, yang menghubungkan sebagai root, dapat membaca atau menulis data dalam kluster anda.

* - Tidak ada penyulitan rangkaian atau pengesahan, dan oleh itu tidak ada kerahsiaan.

*

* Lihat cara mengamankan kluster anda: //www.cockroachlabs.com/docs/v19.2/secure-a-cluster.html

*

*

* PERINGATAN: tidak ada --listen-addr atau - iklan-addr yang ditentukan.

* Pelayan akan mengiklankan "Martins-Retina-MacBook.local" ke node lain, adakah ini dapat dilancarkan?

*

* Pertimbangkan untuk menggunakan:

* - untuk pelayan tempatan sahaja: --listen-addr = localhost

* - untuk kelompok berbilang nod: - iklan-addr =

*

*

*

* INFO: Replikasi dilumpuhkan untuk kluster ini.

* Bila / jika menambahkan node di masa depan, kemas kini konfigurasi zon untuk meningkatkan faktor replikasi.

*

Node CockroachDB bermula pada 2019-12-30 16: 30: 35.369965 +0000 UTC (mengambil 0.6s)

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

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

sql: postgresql: //[email protected]: 26257sslmode = lumpuhkan

Bendera pelanggan RPC: lipas --host = Martins-Retina-MacBook.local: 26257 --secure

log: / Pengguna / martinheller / lipas-data / log

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

laluan I / O luaran: / Pengguna / martinheller / lipas-data / extern

simpan [0]: path = / Pengguna / martinheller / lipas-data

status: kluster baru yang dimulakan

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

NodeID: 1

Pada ketika ini saya dapat membuka pautan UI web yang ditunjukkan di atas dan melihat antara muka pengurusan berasaskan web yang ditunjukkan dalam tangkapan skrin di bawah.

Untuk menguji asap pemasangan, saya mengikuti latihan pertama di Cockroach University di tab Terminal lain, seperti gambar di bawah. Saya mendapati tutorialnya bagus, walaupun disajikan dalam video pendek dan bukannya teks, dan ditujukan untuk pemula daripada DBA atau pembangun yang berpengalaman. Bahagian hands-on dimulakan dengan menggunakan workloadalat untuk membuat pangkalan data kecil, movr, kemudian dilanjutkan di shell CockroachDB SQL.

martinheller @ Martins-Retina-MacBook ~% beban kerja lipas init movr

I191230 16: 55: 34.351650 1 beban kerja / beban kerjaql / dataload.go: 135 pengguna yang diimport (0s, 50 baris)

I191230 16: 55: 34.356751 1 beban kerja / beban kerjaql / dataload.go: 135 kenderaan yang diimport (0s, 15 baris)

I191230 16: 55: 34.382023 1 beban kerja / bebanan kerja

I191230 16: 55: 34.404733 1 beban kerja / beban kerjaql / dataload.go: 135 kenderaan_lokasi_history yang diimport (0s, 1000 baris)

I191230 16: 55: 34.429203 1 beban kerja / beban kerjaql / dataload.go: 135 kod promo yang diimport (0s, 1000 baris)

martinheller @ Martins-Retina-MacBook ~% lipas sql --insecure

#

# Selamat datang ke shell CockroachDB SQL.

# Semua pernyataan mesti diakhiri dengan titik koma.

# Untuk keluar, ketik: \ q.

#

# Versi pelayan: CockroachDB CCL v19.2.2 (x86_64-apple-darwin14, built 2019/12/11 01:27:47, go1.12.12) (versi yang sama dengan pelanggan)

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

#

# Masukkan \? untuk pengenalan ringkas.

#

root @: 26257 / defaultdb> TUNJUKKAN pangkalan data;

  pangkalan data_nama 

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

  lalaidb     

  movr          

  postgres      

  sistem        

(4 baris)

Masa: 2.028ms

root @: 26257 / defaultdb> TAMPILKAN TABEL DARI movr;

          nama_nama meja          

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

  promo_kod                

  menunggang                      

  kod_promo pengguna           

  pengguna                      

  kenderaan_lokasi_sejarah 

  kenderaan                   

(6 baris)

Masa: 2.863ms

root @: 26257 / defaultdb> PILIH * DARI movr.users TERHAD 10;

                   id | bandar | nama | alamat | kad kredit 

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

  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 Lembah Janet | 0904722368  

(10 baris)

Masa: 2.977ms

Tutorial diteruskan dari sana untuk mengajar lebih banyak mengenai CockroachDB, termasuk asas-asas kluster CockroachDB dan asas-asas menjalankan SQL secara besar-besaran.

CockroachCloud

Memutar satu simpul CockroachDB agak mudah, seperti yang baru kita lihat. Memutar sekumpulan tiga atau lebih nod memerlukan sedikit usaha dan perancangan, terutamanya jika anda membuat kelompok berbilang wilayah dan perlu menyesuaikan topologi jadual. Sekiranya anda memerlukan pertolongan, jurutera jualan Lipas dengan senang hati akan masuk.

Sebaliknya, membuat kluster di CockroachCloud adalah soal mengisi borang web, seperti yang ditunjukkan dalam tangkapan skrin di bawah. Pada masa ini, anda hanya boleh membuat kluster wilayah tunggal dari antara muka layan diri ini; jika anda memerlukan kluster berbilang wilayah, node yang lebih besar, atau lebih daripada 24 node per kluster, anda perlu menghubungi sokongan Makmal Cockroach untuk menyediakannya di CockroachCloud.

Kluster CockroachCloud terpencil dan aman mungkin. Mereka adalah penyewa tunggal, masing-masing dalam sub-akaun dan VPC sendiri, dan VPC di firewall antara satu sama lain dan dari sambungan luar yang lain, kecuali dalam senarai putih untuk port SQL dan UI web. Semua sambungan ke kluster melalui internet menggunakan TLS 1.2.

Perhatikan bahawa Makmal Lipas pada masa ini tidak menyokong awan peribadi Namun, mereka mempunyai rancangan untuk melakukannya di masa depan.

Sebagai kaedah praktik, Cockroach Labs menganggarkan bahawa setiap vCPU dapat menangani sekitar 1000 TPS. Anggaran yang diberikan di halaman pembuatan kluster seperti yang anda lakukan penyediaan mungkin lebih tepat, tetapi diberikan dalam unit yang berlainan (IOPS dan bukannya TPS). Pada masa ini nod 2-vCPU pada GCP dianggarkan pada 1800 IOPS, dan simpul 2-vCPU pada AWS dianggarkan pada 600 IOPS.

Peningkatan prestasi CockroachDB

Ketika saya melihat CockroachDB 1.1.3 pada awal tahun 2018, pelaksanaan SQL JOIN terhad kepada hash bergabung dan perancang heuristik; prestasi pertanyaannya sering diturunkan secara linear tetapi tidak seperti keadaan terkini - ia lebih dekat dengan persembahan SQLite. Menjelang November 2018, CockroachDB 2.1 mempunyai pengoptimum pertanyaan berdasarkan kos yang bersaing dengan PostgreSQL untuk prestasi JOIN. Pada versi 19.2, setelah satu tahun pengembangan (dan beralih ke versi kalendar), semua pertanyaan SQL menggunakan pengoptimum berdasarkan kos, bahkan pernyataan DDL dan fungsi tetingkap. Untuk menyokong pengoptimum berasaskan kos, CockroachDB menghasilkan statistik jadual secara automatik.