Ulasan CockroachDB: SQL terdistribusi bergeser ke kecepatan tinggi

Ketika saya meninjau CockroachDB awal tahun 2018, saya menemukan bahwa database SQL terdistribusi, dibangun di atas penyimpanan nilai kunci yang konsisten dan transaksional, dirancang untuk bertahan dari kegagalan disk, mesin, rak, dan bahkan pusat data dengan gangguan latensi minimal dan tidak ada intervensi manual. Itu semua masih benar.

Pada saat itu, CockroachDB mengalami tiga defisit besar, menurut saya: Optimalisasi kueri SQL JOIN yang terbatas, tidak ada layanan yang dikelola sepenuhnya, dan tidak ada dukungan untuk tipe data JSON atau Protobuf. Dengan senang hati saya laporkan bahwa semua kekurangan ini telah diperbaiki. JOIN sekarang menggunakan pengoptimal berbasis biaya, CockroachCloud dalam versi beta, dan tipe data JSONB telah diterapkan.

Apa yang masih hilang di CockroachDB? Sedikit, jika Anda peduli dengan kompatibilitas PostgreSQL:

  • Prosedur dan fungsi yang tersimpan
  • Pemicu
  • Acara
  • Fungsi yang ditentukan pengguna
  • Fungsi dan indeks teks lengkap
  • Fungsi dan indeks geospasial
  • Jatuhkan kunci utama
  • Fungsi XML
  • Savepoints
  • Hak istimewa tingkat kolom
  • BUAT sintaks TABEL TEMPORER
  • Sintaks XA

Sebagian besar aplikasi OLTP PostgreSQL yang ada dapat di-porting ke CockroachDB dengan beberapa solusi di tingkat aplikasi. Namun, jika Anda telah menggunakan fitur geospasial (PostGIS) atau pencarian teks lengkap, saya tidak tahu cara yang baik untuk mengimplementasikannya dalam versi CockroachDB saat ini.

Ada masalah pelacakan untuk indeks dan fungsi geospasial, tetapi meskipun telah dibuka selama beberapa tahun, status fitur geospasial hanya “potensial”. Telah ada jajak pendapat pengguna tentang kasus penggunaan geospasial yang diinginkan, tetapi itu tidak sama dengan menjanjikan fitur tersebut.

Pengindeksan teks lengkap "direncanakan", tetapi belum ada di peta jalan. Beberapa orang menyarankan untuk mengintegrasikan CockroachDB dengan Bleve untuk mencapai hal ini. Sekali lagi, tidak ada janji.

Pada Juni 2019, Cockroach mengubah lisensi OSS-nya dari APL-2 menjadi "versi Lisensi Sumber Bisnis (BSL) yang sangat permisif". Ini pada dasarnya sebagai tanggapan atas Amazon Web Services yang menawarkan versi ElasticSearch bercabang sebagai layanan berbayar, dan memungkinkan Cockroach menawarkan database-nya sendiri sebagai layanan tanpa mengkhawatirkan AWS atau vendor cloud lainnya yang mencuri perhatiannya.

CockroachCloud adalah layanan yang dihosting dan dikelola sepenuhnya yang dibuat dan dimiliki oleh Cockroach Labs yang mengklaim dapat membuat penerapan, penskalaan, dan pengelolaan CockroachDB menjadi mudah. CockroachCloud saat ini berjalan di Amazon Web Services dan Google Cloud Platform.

Instalasi dan pengujian dasar CockroachDB 

Saya menginstal CockroachDB 19.2.2 di MacBook Pro saya menggunakan Homebrew. Saya pertama kali secara eksplisit menghapus versi lama (1.1.3) yang tersisa dari tinjauan awal saya.

Homebrew dikhususkan untuk Mac. Ini hanya salah satu dari lima cara menginstal CockroachDB di Mac, cara lainnya adalah mengunduh biner; gunakan Kubernetes; gunakan Docker; dan membangun dari sumber. Linux dan Windows memiliki lebih sedikit opsi penginstalan.

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

Menghapus /usr/local/Cellar/cockroach/1.1.3 ... (5 file, 72.9MB)

martinheller @ Martins-Retina-MacBook ~% minuman menginstal kecoadb / tap / kecoa

==> Menyadap kecoa / tap

remote: Menghitung objek: 6, selesai.

remote: Menghitung benda: 100% (6/6), selesai.

remote: Mengompresi objek: 100% (5/5), selesai.

remote: Total 6 (delta 0), digunakan kembali 3 (delta 0), pak-kembali 0

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

Mengetuk 1 rumus (32 file, 45.6KB).

==> Memasang kecoa dari cockroachdb / tap

==> Mengunduh //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 =

==> Peringatan

memulai cluster node tunggal yang menyimpan datanya di bawah:

  / usr / local / var / cockroach /

Alih-alih port default 8080, node melayani UI adminnya di:

  // localhost: 26256

JANGAN gunakan cluster ini untuk menyimpan data yang Anda pedulikan; itu berjalan dengan tidak aman

mode dan dapat mengekspos data secara publik dalam misalnya serangan rebinding DNS. Untuk berlari

CockroachDB dengan aman, silakan lihat:

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

Penyelesaian Bash telah dipasang ke:

  /usr/local/etc/bash_completion.d

zsh penyelesaian telah diinstal ke:

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

Agar launchd mulai cockroachdb / tap / cockroach sekarang dan mulai ulang saat login:

  layanan pembuatan bir mulai cockroachdb / tap / cockroach

Atau, jika Anda tidak ingin / membutuhkan layanan latar belakang, Anda dapat menjalankan:

  mulai kecoa --tidak aman

==> Ringkasan

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

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

Pangkas 18 tautan simbolis dari / usr / local

martinheller @ Martins-Retina-MacBook ~% kecoa mulai-simpul-tunggal - tidak aman

*

* PERINGATAN: BERJALAN DALAM MODE TIDAK AMAN!

*

* - Cluster Anda terbuka untuk semua klien yang dapat mengakses.

* - Setiap pengguna, bahkan root, dapat masuk tanpa memberikan kata sandi.

* - Setiap pengguna, menghubungkan sebagai root, dapat membaca atau menulis data apa pun di cluster Anda.

* - Tidak ada enkripsi jaringan atau otentikasi, dan karenanya tidak ada kerahasiaan.

*

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

*

*

* PERINGATAN: baik --listen-addr maupun --advertise-addr tidak ditentukan.

* Server akan mengiklankan "Martins-Retina-MacBook.local" ke node lain, apakah ini dapat dirutekan?

*

* Pertimbangkan untuk menggunakan:

* - untuk server khusus lokal: --listen-addr = localhost

* - untuk cluster multi-node: --advertise-addr =

*

*

*

* INFO: Replikasi dinonaktifkan untuk cluster ini.

* Ketika / jika menambahkan node di masa mendatang, perbarui konfigurasi zona untuk meningkatkan faktor replikasi.

*

Node CockroachDB mulai 2019-12-30 16: 30: 35.369965 +0000 UTC (mengambil 0,6 detik)

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

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

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

Tanda klien RPC: cockroach --host = Martins-Retina-MacBook.local: 26257 --insecure

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

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

jalur I / O eksternal: / Users / martinheller / cockroach-data / extern

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

status: menginisialisasi cluster baru

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

nodeID: 1

Pada titik ini saya dapat membuka tautan UI web yang ditunjukkan di atas dan melihat antarmuka manajemen berbasis web yang ditunjukkan pada gambar di bawah.

Untuk menguji instalasi, saya mengikuti latihan pertama di Cockroach University di tab Terminal lain, seperti yang ditunjukkan di bawah ini. Saya menemukan tutorialnya bagus, meskipun disajikan dalam video pendek daripada teks, dan ditujukan untuk pemula daripada DBA atau pengembang berpengalaman. Bagian langsung dimulai dengan menggunakan workloadalat untuk membuat database kecil, movr, lalu berlanjut di shell SQL CockroachDB.

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

I191230 16: 55: 34.351650 1 workload / workloadsql / dataload.go: 135 pengguna yang diimpor (0s, 50 baris)

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

I191230 16: 55: 34.382023 1 beban kerja / beban kerjaql / dataload.go: 135 kendaraan impor (0s, 500 baris)

I191230 16: 55: 34.404733 1 workload / workloadsql / dataload.go: 135 import vehicle_location_histories (0s, 1000 lines)

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

martinheller @ Martins-Retina-MacBook ~% kecoa sql - tidak aman

#

# Selamat datang di shell SQL CockroachDB.

# Semua pernyataan harus diakhiri dengan titik koma.

# Untuk keluar, ketik: \ q.

#

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

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

#

# Masuk \? untuk pengenalan singkat.

#

root @: 26257 / defaultdb> TAMPILKAN database;

  database_name 

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

  defaultdb     

  movr          

  postgres      

  sistem        

(4 baris)

Waktu: 2.028ms

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

          nama_tabel          

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

  promo_codes                

  wahana                      

  user_promo_codes           

  pengguna                      

  vehicle_location_histories 

  kendaraan                   

(6 baris)

Waktu: 2.863ms

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

                   id | kota | nama | alamat | kartu 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 Desa Yang | 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 baris)

Waktu: 2.977ms

Tutorial berlanjut dari sana untuk mengajarkan lebih banyak tentang CockroachDB, termasuk dasar-dasar cluster CockroachDB dan dasar-dasar menjalankan SQL dalam skala besar.

CockroachCloud

Memutar satu node CockroachDB cukup sederhana, seperti yang baru saja kita lihat. Memutar cluster yang terdiri dari tiga node atau lebih membutuhkan sedikit upaya dan perencanaan, terutama jika Anda membuat cluster multi-region dan perlu menyesuaikan topologi tabel. Jika Anda memerlukan bantuan, teknisi penjualan Kecoa dengan senang hati membantu.

Di sisi lain, membuat cluster di CockroachCloud adalah masalah mengisi formulir web, seperti yang ditunjukkan pada gambar di bawah. Saat ini Anda hanya dapat membuat cluster wilayah tunggal dari antarmuka layanan mandiri ini; jika Anda membutuhkan cluster multi-region, node yang lebih besar, atau lebih dari 24 node per cluster, Anda perlu menghubungi dukungan Cockroach Labs untuk menyediakannya untuk Anda di CockroachCloud.

Cluster CockroachCloud diisolasi dan seaman mungkin. Mereka adalah tenant tunggal, masing-masing di sub-akun dan VPC-nya sendiri, dan VPC di-firewall dari satu sama lain dan dari koneksi luar lainnya, kecuali dalam daftar putih untuk port SQL dan UI web. Semua koneksi ke cluster melalui internet menggunakan TLS 1.2.

Perhatikan bahwa Cockroach Labs saat ini tidak mendukung awan pribadi. Namun, mereka memiliki rencana untuk melakukannya di masa depan.

Sebagai aturan praktis, Cockroach Labs memperkirakan bahwa setiap vCPU dapat menangani sekitar 1000 TPS. Estimasi yang diberikan pada halaman pembuatan cluster saat Anda melakukan penyediaan mungkin lebih akurat, tetapi diberikan dalam unit yang berbeda (IOPS daripada TPS). Saat ini node 2-vCPU di GCP diperkirakan mencapai 1.800 IOPS, dan node 2-vCPU di AWS diperkirakan mencapai 600 IOPS.

Peningkatan kinerja CockroachDB

Ketika saya melihat CockroachDB 1.1.3 pada awal 2018, implementasi SQL JOIN-nya terbatas pada hash joins dan perencana heuristik; kinerja kuerinya sering diskalakan secara linier tetapi tidak seperti yang tercanggih - itu lebih dekat dengan kinerja SQLite. Pada November 2018, CockroachDB 2.1 memiliki pengoptimal kueri berbasis biaya yang bersaing dengan PostgreSQL untuk kinerja JOIN. Pada versi 19.2, setelah satu tahun pengembangan (dan beralih ke versi kalender), semua kueri SQL menggunakan pengoptimal berbasis biaya, bahkan pernyataan DDL dan fungsi jendela. Untuk mendukung pengoptimal berbasis biaya, CockroachDB menghasilkan statistik tabel secara otomatis.