CockroachDB README を訳した

これは、https://github.com/cockroachdb/cockroach/blob/master/README.md の、２０１７年３月時点の全訳です。Apache License, Version 2.0 の下で公開します。
[CockroachDB アーキテクチャ設計](https://sites.google.com/site/kandamotohiro/nosql/cockroachdb-design)も少しずつ訳しています。

![CockroachDB](https://github.com/cockroachdb/cockroach/raw/master/docs/media/cockroach_db.png?raw=true "CockroachDB logo")
=======================================================================

CockroachDB は、スケーラブルで、サバイバル可能で、強一貫性を持つ SQL データベースです。

[![TeamCity CI](https://teamcity.cockroachdb.com/guestAuth/app/rest/builds/buildType:(id:Cockroach_UnitTests)/statusIcon.svg)](https://teamcity.cockroachdb.com/viewLog.html?buildTypeId=Cockroach_UnitTests&buildId=lastFinished&guest=1)[![GoDoc](https://godoc.org/github.com/cockroachdb/cockroach?status.svg)](https://godoc.org/github.com/cockroachdb/cockroach)![Project Status](https://img.shields.io/badge/status-beta-yellow.svg)[![Gitter](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/cockroachdb/cockroach?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge)

- [CockroachDB とはなんですか?](#what-is-cockroachdb)
- [文書](#docs)
- [クイックスタート](#quickstart)
- [クライアントドライバ](#client-drivers)
- [配備](#deployment)
- [助けが必要ですか?](#need-help)
- [貢献](#contributing)
- [設計](#design)
- [他のデータベースとの比較](#comparison-with-other-databases)
- [参考](#see-also)

## What is CockroachDB?

CockroachDB は、スケーラブルで、サバイバル可能で、強一貫性を持つ SQL データベースです。CockroachDB は分散 SQL データベースで、トランザクショナルで強一貫性を持つキーバリューストアの上に構築されています。それは水平に**スケールし**;ディスク、マシン、ラック、そしてデータセンタの障害にさえ、最小限の遅延への影響と、人手による介入なしで**耐えられ**;**強一貫性を持つ** ACID トランザクションをサポートし;そしてなじみのある **SQL** API を使って、データを構造化し、操作し、問い合わせできます。

詳しくは、[FAQ](https://cockroachlabs.com/docs/frequently-asked-questions.html) と、オリジナルの[設計文書](https://github.com/cockroachdb/cockroach#design)を参照下さい。

## Status

CockroachDB は現在、ベータステータスです。[1.0 Roadmap](https://github.com/cockroachdb/cockroach/issues/12854) と[Issues](https://github.com/cockroachdb/cockroach/issues) に、計画されているあるいは開発中の機能の一覧があります。

## Docs

インストール、開発、配備、そして管理のためのガイドは、[User Documentation](https://cockroachlabs.com/docs/) を参照下さい。

## Quickstart

1.  [Cockroach DB をインストール](https://www.cockroachlabs.com/docs/install-cockroachdb.html)します。

2.  [ローカルクラスタを開始](https://www.cockroachlabs.com/docs/start-a-local-cluster.html)します。三つのノードが異なるポートをリスンします。:

    ```shell
    $ ./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
    ```

3.  [ビルトイン SQL クライアントを開始](https://www.cockroachlabs.com/docs/use-the-built-in-sql-client.html)します。これは対話的シェルです。:

    ```shell
    $ ./cockroach sql
    # Welcome to the cockroach SQL interface.
    # All statements must be terminated by a semicolon.
    # To exit: CTRL + D.
    ```

4. いくつかの [CockroachDB SQL 文](https://www.cockroachlabs.com/docs/learn-cockroachdb-sql.html)を実行します。:

    ```shell
    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 |
    +------+----------+
    ```

4. あなたのブラウザを `http://<localhost>:8080` に向けて、管理者 UI を見て下さい。

5. CockroachDB は、 [クラスタをセキュアにする](https://www.cockroachlabs.com/docs/secure-a-cluster.html)
ことが簡単にできます。

## Client Drivers

CockroachDB は PostgreSQL ワイヤプロトコルをサポートします。なので、あなたはいろいろな言語から、使用可能な任意の PostgreSQL クライアントドライバを使って接続できます。私達がテストした推奨ドライバは、[クライアントドライバをインストール](https://www.cockroachlabs.com/docs/install-client-drivers.html)を参照下さい。

## Deployment

-   [マニュアル](https://www.cockroachlabs.com/docs/manual-deployment.html) - CockroachDB を複数のマシンに手作業で配備するステップです。

-   [クラウド](https://github.com/cockroachdb/cockroach/tree/master/cloud/aws) - [Terraform](https://terraform.io/) を使って、GCE あるいは AWS 上にセキュアでない開発あるいはテスト用のクラスタを配備するための設定ファイルと手順です。

## Need Help?

- [CockroachDB Forum](https://forum.cockroachlabs.com/) - 
質問をして、答えを見つけ、他の利用者を助けましょう。

- [Gitter で会いましょう](https://gitter.im/cockroachdb/cockroach) - これが、CockroachDB 技術者に接触するための最も直接的な方法です。

- バグ報告、改善の提案、あるいは新機能の要求は、[イシューをオープン](https://github.com/cockroachdb/cockroach/issues/new)して、ご協力下さい。

## Contributing

これはオープンソースプロジェクトで、私達は貢献を歓迎します。

1.  [CONTRIBUTING.md](https://github.com/cockroachdb/cockroach/blob/master/CONTRIBUTING.md)を読んで、あなたのローカル環境をセットアップして下さい。

2. [open issues](https://github.com/cockroachdb/cockroach/issues/)を見て下さい。特に、[helpwanted label](https://github.com/cockroachdb/cockroach/labels/helpwanted) のもの。

3. [style guide](https://github.com/cockroachdb/cockroach/blob/master/CONTRIBUTING.md#style-guide)を読んで、[code reviews](https://github.com/cockroachdb/cockroach/pulls) に従って、私達のスタイルと慣例を知って下さい。

4. [code review workflow](https://github.com/cockroachdb/cockroach/blob/master/CONTRIBUTING.md#code-review-workflow) に従って、あなたの変更をして下さい。

## Design

これは概要です。設計とアーキテクチャについてのより深い議論は、完全な[設計文書](https://github.com/cockroachdb/cockroach/blob/master/docs/design.md)を見て下さい。

他のクイックな設計概要は、[CockroachDB tech talk slides](https://docs.google.com/presentation/d/1tPPhnpJ3UwyYMe4MT8jhqCrE9ZNrUMqsvXAbd97DZ2E/edit#slide=id.p) を見て下さい。

### Design Goals

CockroachDB は、分散 SQL データベースであり、トランザクショナルで一貫したキーバリューストアの上に作られています。

その主な設計ゴールは、ACID トランザクション、水平スケーラビリティ、そしてサバイバル可能性のサポートです。なので、そういう名前です。

それは、ディスク、マシン、ラック、そしてデータセンタの障害にさえ、最小限の遅延への影響と、人手による介入なしで耐えられることを目指しています。

CockroachDB ノード (RoachNodes) は対称的です。設計ゴールは、均質（一つのバイナリ）で最小限の設定しか必要としない配備です。

### How it Works in a Nutshell

CockroachDB は、単一のモノリシックな、キーから値へのソート済みマップを実装します。キーと値の両方はバイト文字列です（ユニコードではありません）。

マップは一つ以上のレンジから構成され、それぞれのレンジは[RocksDB][0] ([LevelDB][1] の変種) に格納されたデータに対応します。それは全部で三つ以上の CockroachDB サーバの間で複製されます。これによって、CockroachDB は線形にスケールします。理論的には、4 exabytes(4E) の論理的データまで。

レンジは、開始と終了キーで定義されます。レンジは、グローバルに設定可能な、最小／最大バイト長の範囲以内に総バイト数が維持されるようにマージとスプリットされます。レンジ長はデフォルトで目標64Mにされ、素早いスプリットとマージを可能とし、キー範囲のホットスポットへの負荷を分散します。レンジの複製はサバイバル可能性のために離れたデータセンタに置かれることを想定しています (例えば、 `{ US-East, US-West, Japan }`, `{ Ireland, US-East, US-West}` , `{ Ireland, US-East, US-West, Japan, Australia }`)。

レンジへの一つの変更は、分散コンセンサスアルゴリズムの一つのインスタンスで調停され、一貫性を保証します。私たちは [Raft コンセンサスアルゴリズム][2]を使うことを選びました。全てのコンセンサス状態は [RocksDB][0] にも格納されます。

一つの論理的な変更は複数のキーバリュー対に影響することがあります。論理的な変更は、ACID トランザクショナルセマンティクスを持ちます。もし論理的な変更が影響する全てのキーが同じレンジ内にあれば、アトミシティと一貫性は [Raft][2]によって保証されます。これは高速コミットパスです。そうでないときは、影響するレンジの間で、ノンロッキングな分散コミットプロトコルが使われます。

CockroachDB は、snapshot isolation (SI) と serializable snapshot isolation (SSI) セマンティクスを提供します。それは、externally consistent なロックフリーのリードとライトを提供します。どちらも、歴史的スナップショットタイムスタンプから、そして現在の壁時計の時刻からです。SI はロックフリーのリードとライトを提供しますが、ライトスキューが起きることがあります。SSI はライトスキューを除きますが、競合の多いシステムで性能問題を起こします。SSI が、デフォルトのアイソレーションです。クライアントは注意して、正しさと性能をトレードオフしなければいけません。CockroachDB は限定された形の linearalizability を実装します。それは、任意の観測者あるいは観測者の連鎖にオーダリングを提供します。

[Spanner][3] ディレクトリと同様に、CockroachDB はデータの任意のゾーンの構成が可能です。これは、複製ファクター、ストレージデバイスタイプ、そして／あるいは、データセンタの場所を選んで、性能と／あるいは、可用性を最適化することを可能とします。Spanner とは違って、ゾーンはモノリシックであり、エンティティグループのレベルにおいて、細粒度のデータの移動を許しません。

## Comparison with Other Databases

CockroachDB の鍵となる機能が、他のデータベースとどう違うかは、私達の文書サイトにある、[CockroachDB の比較](https://www.cockroachlabs.com/docs/cockroachdb-in-comparison.html)ページをご覧ください。

## See Also

- [Tech Talks](https://www.cockroachlabs.com/docs/tech-talks.html) CockroachDB 創立者と技術者による
- [The CockroachDB User documentation](https://cockroachlabs.com/docs/)
- [The CockroachDB Blog](https://www.cockroachlabs.com/blog/)
- 鍵となる設計文書:
  - [Serializable, Lockless, Distributed: Isolation in CockroachDB](https://www.cockroachlabs.com/blog/serializable-lockless-distributed-isolation-cockroachdb/)
  - [Consensus, Made Thrive](https://www.cockroachlabs.com/blog/consensus-made-thrive/)
  - [Trust, But Verify: How CockroachDB Checks Replication](https://www.cockroachlabs.com/blog/trust-but-verify-cockroachdb-checks-replication/)
  - [Living Without Atomic Clocks](https://www.cockroachlabs.com/blog/living-without-atomic-clocks/)
  - [The CockroachDB Architecture Document](https://github.com/cockroachdb/cockroach/blob/master/docs/design.md)

[0]: http://rocksdb.org/
[1]: https://github.com/google/leveldb
[2]: https://ramcloud.stanford.edu/wiki/download/attachments/11370504/raft.pdf
[3]: http://research.google.com/archive/spanner.html