これは、https://github.com/cockroachdb/cockroach/blob/master/README.md の、2017年3月時点の全訳です。Apache License, Version 2.0 の下で公開します。
CockroachDB アーキテクチャ設計も少しずつ訳しています。
CockroachDB は、スケーラブルで、サバイバル可能で、強一貫性を持つ SQL データベースです。
What is CockroachDB?
CockroachDB は、スケーラブルで、サバイバル可能で、強一貫性を持つ SQL データベースです。CockroachDB は分散 SQL データベースで、トランザクショナルで強一貫性を持つキーバリューストアの上に構築されています。それは水平にスケールし;ディスク、マシン、ラック、そしてデータセンタの障害にさえ、最小限の遅延への影響と、人手による介入なしで耐えられ;強一貫性を持つ ACID トランザクションをサポートし;そしてなじみのある SQL API を使って、データを構造化し、操作し、問い合わせできます。
Status
CockroachDB は現在、ベータステータスです。1.0 Roadmap とIssues に、計画されているあるいは開発中の機能の一覧があります。
Docs
インストール、開発、配備、そして管理のためのガイドは、User Documentation を参照下さい。
Quickstart
-
ローカルクラスタを開始します。三つのノードが異なるポートをリスンします。:
$ ./cockroach start --background $ ./cockroach start --store=cockroach-data2 --port=26258 --http-port=8081 --join=localhost:26257 --background $ ./cockroach start --store=cockroach-data3 --port=26259 --http-port=8082 --join=localhost:26257 --background
-
ビルトイン SQL クライアントを開始します。これは対話的シェルです。:
$ ./cockroach sql # Welcome to the cockroach SQL interface. # All statements must be terminated by a semicolon. # To exit: CTRL + D.
-
いくつかの CockroachDB SQL 文を実行します。:
root@:26257> CREATE DATABASE bank; CREATE DATABASE root@:26257> SET DATABASE = bank; SET root@:26257> CREATE TABLE accounts (id INT PRIMARY KEY, balance DECIMAL); CREATE TABLE root@26257> INSERT INTO accounts VALUES (1234, 10000.50); INSERT 1 root@26257> SELECT * FROM accounts; +------+----------+ | id | balance | +------+----------+ | 1234 | 10000.50 | +------+----------+
あなたのブラウザを
http://<localhost>:8080
に向けて、管理者 UI を見て下さい。CockroachDB は、 クラスタをセキュアにする
ことが簡単にできます。
Client Drivers
CockroachDB は PostgreSQL ワイヤプロトコルをサポートします。なので、あなたはいろいろな言語から、使用可能な任意の PostgreSQL クライアントドライバを使って接続できます。私達がテストした推奨ドライバは、クライアントドライバをインストールを参照下さい。
Deployment
マニュアル - CockroachDB を複数のマシンに手作業で配備するステップです。
クラウド - Terraform を使って、GCE あるいは AWS 上にセキュアでない開発あるいはテスト用のクラスタを配備するための設定ファイルと手順です。
Need Help?
CockroachDB Forum -
質問をして、答えを見つけ、他の利用者を助けましょう。Gitter で会いましょう - これが、CockroachDB 技術者に接触するための最も直接的な方法です。
バグ報告、改善の提案、あるいは新機能の要求は、イシューをオープンして、ご協力下さい。
Contributing
これはオープンソースプロジェクトで、私達は貢献を歓迎します。
CONTRIBUTING.mdを読んで、あなたのローカル環境をセットアップして下さい。
open issuesを見て下さい。特に、helpwanted label のもの。
style guideを読んで、code reviews に従って、私達のスタイルと慣例を知って下さい。
code review workflow に従って、あなたの変更をして下さい。
Design
これは概要です。設計とアーキテクチャについてのより深い議論は、完全な設計文書を見て下さい。
他のクイックな設計概要は、CockroachDB tech talk slides を見て下さい。
Design Goals
CockroachDB は、分散 SQL データベースであり、トランザクショナルで一貫したキーバリューストアの上に作られています。
その主な設計ゴールは、ACID トランザクション、水平スケーラビリティ、そしてサバイバル可能性のサポートです。なので、そういう名前です。
それは、ディスク、マシン、ラック、そしてデータセンタの障害にさえ、最小限の遅延への影響と、人手による介入なしで耐えられることを目指しています。
CockroachDB ノード (RoachNodes) は対称的です。設計ゴールは、均質(一つのバイナリ)で最小限の設定しか必要としない配備です。
How it Works in a Nutshell
CockroachDB は、単一のモノリシックな、キーから値へのソート済みマップを実装します。キーと値の両方はバイト文字列です(ユニコードではありません)。
マップは一つ以上のレンジから構成され、それぞれのレンジはRocksDB (LevelDB の変種) に格納されたデータに対応します。それは全部で三つ以上の CockroachDB サーバの間で複製されます。これによって、CockroachDB は線形にスケールします。理論的には、4 exabytes(4E) の論理的データまで。
レンジは、開始と終了キーで定義されます。レンジは、グローバルに設定可能な、最小/最大バイト長の範囲以内に総バイト数が維持されるようにマージとスプリットされます。レンジ長はデフォルトで目標64Mにされ、素早いスプリットとマージを可能とし、キー範囲のホットスポットへの負荷を分散します。レンジの複製はサバイバル可能性のために離れたデータセンタに置かれることを想定しています (例えば、 { US-East, US-West, Japan }
, { Ireland, US-East, US-West}
, { Ireland, US-East, US-West, Japan, Australia }
)。
レンジへの一つの変更は、分散コンセンサスアルゴリズムの一つのインスタンスで調停され、一貫性を保証します。私たちは Raft コンセンサスアルゴリズムを使うことを選びました。全てのコンセンサス状態は RocksDB にも格納されます。
一つの論理的な変更は複数のキーバリュー対に影響することがあります。論理的な変更は、ACID トランザクショナルセマンティクスを持ちます。もし論理的な変更が影響する全てのキーが同じレンジ内にあれば、アトミシティと一貫性は Raftによって保証されます。これは高速コミットパスです。そうでないときは、影響するレンジの間で、ノンロッキングな分散コミットプロトコルが使われます。
CockroachDB は、snapshot isolation (SI) と serializable snapshot isolation (SSI) セマンティクスを提供します。それは、externally consistent なロックフリーのリードとライトを提供します。どちらも、歴史的スナップショットタイムスタンプから、そして現在の壁時計の時刻からです。SI はロックフリーのリードとライトを提供しますが、ライトスキューが起きることがあります。SSI はライトスキューを除きますが、競合の多いシステムで性能問題を起こします。SSI が、デフォルトのアイソレーションです。クライアントは注意して、正しさと性能をトレードオフしなければいけません。CockroachDB は限定された形の linearalizability を実装します。それは、任意の観測者あるいは観測者の連鎖にオーダリングを提供します。
Spanner ディレクトリと同様に、CockroachDB はデータの任意のゾーンの構成が可能です。これは、複製ファクター、ストレージデバイスタイプ、そして/あるいは、データセンタの場所を選んで、性能と/あるいは、可用性を最適化することを可能とします。Spanner とは違って、ゾーンはモノリシックであり、エンティティグループのレベルにおいて、細粒度のデータの移動を許しません。
Comparison with Other Databases
CockroachDB の鍵となる機能が、他のデータベースとどう違うかは、私達の文書サイトにある、CockroachDB の比較ページをご覧ください。
See Also
- Tech Talks CockroachDB 創立者と技術者による
- The CockroachDB User documentation
- The CockroachDB Blog
- 鍵となる設計文書: