CockroachDBレビュー:分散SQLがハイギアに移行
2018年の初めにCockroachDBを確認したところ、トランザクション型で一貫性のあるKey-Valueストアの上に構築された分散SQLデータベースは、ディスク、マシン、ラック、さらにはデータセンターの障害にも耐えられるように設計されており、レイテンシの中断は最小限に抑えられています。手動介入。それはすべてまだ真実です。
当時、CockroachDBには、SQL JOINクエリの最適化の制限、完全に管理されたサービスの欠如、JSONまたはProtobufデータ型のサポートの3つの大きな欠陥がありました。これらの不足のすべてがその後修正されたことを報告できてうれしいです。JOINは現在、コストベースのオプティマイザーを使用しており、CockroachCloudはベータ版であり、JSONBデータ型が実装されています。
CockroachDBにはまだ何が欠けていますか?PostgreSQLの互換性に関心がある場合は、かなりの量です。
- ストアドプロシージャと関数
- トリガー
- イベント
- ユーザー定義関数
- フルテキスト関数とインデックス
- 地理空間関数とインデックス
- 主キーを削除します
- XML関数
- セーブポイント
- 列レベルの特権
- CREATE TEMPORARYTABLE構文
- XA構文
ほとんどの既存のOLTPPostgreSQLアプリケーションは、アプリケーションレベルでいくつかの回避策を使用してCockroachDBに移植できます。ただし、地理空間機能(PostGIS)または全文検索を使用したことがある場合は、現在のバージョンのCockroachDBにそれらを実装するための適切な方法がわかりません。
地理空間インデックスと機能の追跡の問題がありますが、それは数年前から開かれていますが、地理空間機能のステータスは「潜在的」にすぎません。望ましい地理空間のユースケースについてユーザーの投票がありましたが、それは機能を約束することと同じではありません。
全文索引付けは「計画」されていますが、ロードマップにはまだ含まれていません。これを達成するために、CockroachDBをBleveと統合することを提案した人もいます。繰り返しますが、約束はありません。
2019年6月、CockroachはOSSライセンスをAPL-2から「ビジネスソースライセンス(BSL)の非常に寛容なバージョン」に変更しました。これは基本的に、Amazon Web ServicesがElasticSearchのフォークバージョンを有料サービスとして提供していることに対応しており、Cockroachは、AWSや他のクラウドベンダーが雷を盗むことを心配することなく、独自のデータベースをサービスとして提供できます。
CockroachCloudは、Cockroach Labsによって作成および所有される完全にホストされ、完全に管理されたサービスであり、CockroachDBの展開、スケーリング、および管理を簡単に行えると主張しています。CockroachCloudは現在、Amazon WebServicesとGoogleCloudPlatformで実行されています。
CockroachDBのインストールと基本的なテスト
Homebrewを使用してMacBookProにCockroachDB19.2.2をインストールしました。最初に、最初のレビューで残した古いバージョン(1.1.3)を明示的にアンインストールしました。
HomebrewはMacに固有のものです。これは、MacにCockroachDBをインストールする5つの方法のうちの1つにすぎず、他の方法はバイナリをダウンロードすることです。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 / cockroach
==> cockroachdb / tapをタップします
リモート:オブジェクトの列挙:6、完了。
リモート:オブジェクトのカウント:100%(6/6)、完了。
リモート:オブジェクトの圧縮:100%(5/5)、完了。
リモート:合計6(デルタ0)、再利用3(デルタ0)、パック再利用0
オブジェクトの開梱:100%(6/6)、完了。
1つの数式をタップしました(32ファイル、45.6KB)。
==> 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 / cockroach /
デフォルトのポート8080の代わりに、ノードは次の場所で管理UIを提供します。
// 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-functions
今すぐcockroachdb / tap / cockroachを起動し、ログイン時に再起動します。
醸造サービスはcockroachdb / tap / cockroachを開始します
または、バックグラウンドサービスが必要ない/必要ない場合は、次のコマンドを実行できます。
ゴキブリの開始-安全でない
==>まとめ
==> `brew cleanup`は30日間実行されておらず、現在実行中です...
削除:/Users/martinheller/Library/Caches/Homebrew/node--12.12.0.catalina.bottle.tar.gz ...(14.8MB)
/ usr / localから18個のシンボリックリンクを削除しました
martinheller @ Martins-Retina-MacBook〜%ゴキブリ開始-単一ノード-安全でない
*
*警告:安全でないモードで実行しています!
*
*-クラスターは、にアクセスできるすべてのクライアントに対して開かれています。
* -rootであっても、すべてのユーザーがパスワードを入力しなくてもログインできます。
* -rootとして接続しているすべてのユーザーは、クラスター内の任意のデータを読み書きできます。
*-ネットワークの暗号化や認証がないため、機密性はありません。
*
*クラスターを保護する方法を確認してください://www.cockroachlabs.com/docs/v19.2/secure-a-cluster.html
*
*
*警告:-listen-addrも--advertise-addrも指定されていません。
*サーバーは「Martins-Retina-MacBook.local」を他のノードにアドバタイズしますが、これはルーティング可能ですか?
*
*使用を検討してください:
*-ローカル専用サーバーの場合:-listen-addr = localhost
*-マルチノードクラスターの場合:-advertise-addr =
*
*
*
*情報:このクラスターのレプリケーションは無効になっています。
*将来ノードを追加する場合は、ゾーン構成を更新してレプリケーション係数を増やします。
*
2019-12-30 16:30:35.369965 +0000 UTCから始まるCockroachDBノード(0.6秒かかりました)
ビルド:CCL v19.2.2 @ 2019/12/11 01:27:47(go1.12.12)
webui://Martins-Retina-MacBook.local:8080
sql:postgresql:// root @ Martins-Retina-MacBook.local:26257sslmode = disable
RPCクライアントフラグ:ゴキブリ--host = Martins-Retina-MacBook.local:26257 --insecure
ログ:/ Users / martinheller / cockroach-data / logs
一時ディレクトリ:/ Users / martinheller / cockroach-data / cockroach-temp884406444
外部I / Oパス:/ Users / martinheller / cockroach-data / extern
store [0]:path = / Users / martinheller / cockroach-data
ステータス:初期化された新しいクラスター
clusterID:9f7141f8-d53d-49e3-9a5a-264de8cfa626
nodeID:1
この時点で、上記のWeb UIリンクを開いて、下のスクリーンショットに示されているWebベースの管理インターフェイスを確認することができました。

インストールのスモークテストを行うために、以下に示すように、別のターミナルタブでゴキブリ大学の最初の演習を行いました。テキストではなく短いビデオで表示され、経験豊富なDBAや開発者ではなく初心者向けであるにもかかわらず、チュートリアルは優れていると思いました。実践的な部分は、workload
ツールを使用して小さなデータベースmovrを作成することから始まり、CockroachDBSQLシェルで続行します。
martinheller @ Martins-Retina-MacBook〜%ゴキブリワークロードinit movrI191230 16:55:34.351650 1ワークロード/workloadsql/dataload.go:135インポートされたユーザー(0、50行)
I191230 16:55:34.356751 1ワークロード/workloadsql/dataload.go:135インポートされた車両(0、15行)
I191230 16:55:34.382023 1ワークロード/workloadsql/dataload.go:135インポートされたライド(0、500行)
I191230 16:55:34.404733 1ワークロード/workloadsql/dataload.go:135インポートされたvehicle_location_histories(0、1000行)
I191230 16:55:34.429203 1ワークロード/workloadsql/dataload.go:135インポートされたpromo_codes(0s、1000行)
martinheller @ Martins-Retina-MacBook〜%ゴキブリsql --insecure
#
#CockroachDBSQLシェルへようこそ。
#すべてのステートメントはセミコロンで終了する必要があります。
#終了するには、次のように入力します:\ q。
#
#サーバーバージョン:CockroachDB CCL v19.2.2(x86_64-apple-darwin14、ビルド2019/12/11 01:27:47、go1.12.12)(クライアントと同じバージョン)
#クラスターID:9f7141f8-d53d-49e3-9a5a-264de8cfa626
#
# 入る \?簡単な紹介。
#
root @:26257 / defaultdb> SHOWデータベース;
データベース名
+ --------------- +
defaultdb
movr
postgres
システム
(4行)
時間:2.028ms
root @:26257 / defaultdb> movrからテーブルを表示;
table_name
+ ---------------------------- +
promo_codes
乗り物
user_promo_codes
ユーザー
Vehicle_location_histories
車両
(6行)
時間:2.863ms
root @:26257 / defaultdb> SELECT * FROM movr.users LIMIT 10;
id | 市| 名前| 住所| クレジットカード
+ -------------------------------------- + ---------- -+ --------------------- + -------------------------- ----- + ------------- +
ae147ae1-47ae-4800-8000-000000000022 | アムステルダム| タイラー・ダルトン| 88194アンジェラガーデンスイート94 | 4443538758
b3333333-3333-4000-8000-000000000023 | アムステルダム| ディロン・マーティン| 29590バトラープレーンアパート 25 | 3750897994
b851eb85-1eb8-4000-8000-000000000024 | アムステルダム| デボラ・カーソン| 32768 Eric Divide Suite 88 | 8107478823
bd70a3d7-0a3d-4000-8000-000000000025 | アムステルダム| デビッドスタントン| 80015マークビュースイート96 | 3471210499
c28f5c28-f5c2-4000-8000-000000000026 | アムステルダム| マリア・ウェーバー| 14729カレンラジアル| 5844236997
1eb851eb-851e-4800-8000-000000000006 | ボストン| ブライアンキャンベル| 92025ヤンビレッジ| 9016427332
23d70a3d-70a3-4800-8000-000000000007 | ボストン| カール・マクガイア| 60124パーマーミューズアパート 49 | 4566257702
28f5c28f-5c28-4600-8000-000000000008 | ボストン| ジェニファー・サンダース| 19121 Padilla BrooksApt。12 | 1350968125
2e147ae1-47ae-4400-8000-000000000009 | ボストン| シンディメディナ| 31118アレンゲートウェイアパート 60 | 6464362441
33333333-3333-4400-8000-00000000000a | ボストン| ダニエルヘルナンデスMD | 51438ジャネットバレー| 0904722368
(10行)
時間:2.977ms
チュートリアルはそこから続き、CockroachDBクラスターの基礎や大規模なSQLの実行の基礎など、CockroachDBについて詳しく説明します。
CockroachCloud
先ほど見たように、1つのCockroachDBノードを起動するのはかなり簡単です。3つ以上のノードのクラスターをスピンアップするには、特にマルチリージョンクラスターを作成し、テーブルトポロジを調整する必要がある場合は、少し手間と計画が必要です。サポートが必要な場合は、ゴキブリのセールスエンジニアが喜んで対応します。
一方、CockroachCloudでクラスターを作成するには、以下のスクリーンショットに示すように、Webフォームに入力する必要があります。現在、このセルフサービスインターフェイスからのみ単一リージョンクラスターを作成できます。マルチリージョンクラスター、より大きなノード、またはクラスターあたり24を超えるノードが必要な場合は、Cockroach Labsサポートに連絡して、CockroachCloudでそれらをプロビジョニングする必要があります。

CockroachCloudクラスターは、可能な限り分離され、安全です。これらは単一のテナントであり、それぞれが独自のサブアカウントとVPCにあり、SQLおよびWeb UIポートのホワイトリストに登録されていない限り、VPCは相互におよび他の外部接続からファイアウォールで保護されます。インターネットを介したクラスターへのすべての接続はTLS1.2を使用します。
Cockroach Labsは現在、プライベートクラウドをサポートしていないことに注意してください。しかし、彼らは将来そうする計画を持っています。
経験則として、Cockroach Labsは、各vCPUが約1000TPSを処理できると推定しています。プロビジョニングを行うときにクラスター作成ページに表示される見積もりは、おそらくより正確ですが、異なる単位(TPSではなくIOPS)で表示されます。現在、GCPの2vCPUノードは1800IOPSと推定され、AWSの2vCPUノードは600IOPSと推定されています。
CockroachDBのパフォーマンスの向上
2018年の初めにCockroachDB1.1.3を見たとき、そのSQLJOIN実装はハッシュ結合とヒューリスティックプランナーに限定されていました。クエリのパフォーマンスは直線的にスケーリングされることがよくありましたが、最先端のパフォーマンスとは異なり、SQLiteのパフォーマンスに近かったのです。2018年11月までに、CockroachDB 2.1には、JOINパフォーマンスに関してPostgreSQLと競合するコストベースのクエリオプティマイザが搭載されていました。バージョン19.2の時点で、もう1年の開発(およびカレンダーバージョン管理への切り替え)の後、すべてのSQLクエリは、DDLステートメントやウィンドウ関数も含めて、コストベースのオプティマイザーを使用します。コストベースのオプティマイザをサポートするために、CockroachDBはテーブル統計を自動的に生成します。