

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# Amazon DocumentDB のエラスティッククラスター
<a name="elastic-how-it-works"></a>

このセクションのトピックでは、Amazon DocumentDB エラスティッククラスターを支えているメカニズムと機能について説明します。

**Topics**
+ [Amazon DocumentDB エラスティッククラスターのシャーディング](#elastic-how-it-works.sharding)
+ [エラスティッククラスターの移行](#elastic-how-it-works-migration)
+ [エラスティッククラスターのスケーリング](#elastic-how-it-works-scaling)
+ [エラスティッククラスターの信頼性](#elastic-reliability)
+ [エラスティッククラスターのストレージと可用性](#how-it-works-storage)
+ [Amazon DocumentDB 4.0 と Elastic クラスター の機能上の違い](#elastic-functional-differences)

## Amazon DocumentDB エラスティッククラスターのシャーディング
<a name="elastic-how-it-works.sharding"></a>

Amazon DocumentDB エラスティッククラスターは、ハッシュベースのシャーディングを使用して、分散型ストレージシステム全体にデータをパーティショニングします。シャーディングはパーティショニングとも呼ばれ、大きなデータセットを複数のノードにまたがる小さなデータセットに分割し、垂直スケーリングの限界を超えてデータベースをスケールアウトできるようにします。エラスティッククラスターでは、Amazon DocumentDB のコンピューティングとストレージを分離、つまり「デカップリング」することで、互いを別々にスケーリングできます。エラスティッククラスターは、コンピューティングノード間で小さなデータを移動してコレクションを再分割するのではなく、分散型ストレージシステム内でデータを効率的にコピーします。

![\[Amazon DocumentDB エラスティッククラスターには、大きなデータセットを小さなデータセットに分割するための複数のシャードが含まれており、データベースのスケーリングを改善できます。\]](http://docs.aws.amazon.com/ja_jp/documentdb/latest/developerguide/images/shard-architecture.png)


### シャードの定義
<a name="w2aac37c23b7b7"></a>

以下はシャード命名法の定義です。
+ **シャード**: - シャードは エラスティッククラスターのコンピューティング能力を提供します。1 つのライターインスタンスと 0～15 個のリードレプリカがあります。デフォルトでは、シャードにはライターと 1 つのリードレプリカの 2 つのインスタンスがあります。最大 32 個のシャードを設定でき、各シャードインスタンスには最大 64 個の vCPU を設定できます。
+ **シャードキー** - シャードキーは、エラスティッククラスターが読み取りと書き込みトラフィックを分散するために使用する、シャードコレクション内の JSON ドキュメントの必須フィールドです。
+ **シャードコレクション** - シャードコレクションは、データがデータパーティション内の 1 つのエラスティッククラスター全体に分散されるコレクションです。
+ **パーティション** - パーティションはシャードされたデータの論理的な部分です。シャードコレクションを作成すると、データはシャードキーに基づいて各シャード内のパーティションに自動的に編成されます。1 つのシャードには複数のパーティションがあります。

### 設定された複数のシャードに対するデータの分散
<a name="w2aac37c23b7b9"></a>

多数の一意の値を持つシャードキーを作成します。シャードキーが適切であると、その土台のシャード間でデータが均等にパーティショニングされ、ワークロードに最高のスループットとパフォーマンスを提供されます。次の例は、「user\$1id」という名前のシャードキーを使用する従業員名のデータです。

![\[データセットからのデータは、多数のシャードに均等に分散されます。\]](http://docs.aws.amazon.com/ja_jp/documentdb/latest/developerguide/images/sharding-detail-1.png)


DocumentDB はハッシュシャーディングを使用して、土台のシャードの間でデータをパーティショニングします。追加データも同じ方法で挿入および分散されます。

![\[新しいデータセットのデータは、ハッシュシャーディングを介してシャードに分散されます。\]](http://docs.aws.amazon.com/ja_jp/documentdb/latest/developerguide/images/sharding-detail-2.png)


シャードが追加されてデータベースがスケールアウトされると、Amazon DocumentDB はデータを自動的に再分散します。

![\[データセットからのデータは、データベースに追加のシャードが追加されると再分散されます。\]](http://docs.aws.amazon.com/ja_jp/documentdb/latest/developerguide/images/sharding-detail-3.png)


## エラスティッククラスターの移行
<a name="elastic-how-it-works-migration"></a>

Amazon DocumentDB では、シャードされた MongoDB のデータをエラスティッククラスターに移行することができます。オフライン、オンライン、ハイブリッドの移行方法がサポートされています。詳細については、「[Amazon DocumentDB への移行](docdb-migration.md)」を参照してください。

## エラスティッククラスターのスケーリング
<a name="elastic-how-it-works-scaling"></a>

Amazon DocumentDB エラスティッククラスターでは、エラスティッククラスター内のシャードの数を増やしたり (スケールアウト)、各シャードに適用される vCPU の数を増やしたり (スケールアップ) することができます。必要に応じてシャードの数とコンピューティング能力 (vCPU) を減らすこともできます。

スケーリングのベストプラクティスについては、「[エラスティッククラスターのスケーリング](elastic-best-practices.md#scaling)」を参照してください。

**注記**  
クラスターレベルのスケーリングもできます。詳細については、「[Amazon DocumentDB クラスターのスケーリング](db-cluster-manage-performance.md)」を参照してください。

## エラスティッククラスターの信頼性
<a name="elastic-reliability"></a>

Amazon DocumentDB は、信頼性、耐久性、および耐障害性を持つように設計されています。可用性を向上させるため、エラスティッククラスターは異なるアベイラビリティーゾーンに配置されたシャードごとに 2 つのノードを展開します。Amazon DocumentDB には、信頼性の高いデータベースソリューションとなるいくつかの自動機能も含まれています。詳細については、「[Amazon DocumentDB の信頼性](how-it-works.md#how-it-works.reliability)」を参照してください。

## エラスティッククラスターのストレージと可用性
<a name="how-it-works-storage"></a>

Amazon DocumentDB のデータは クラスターボリューム に保存されます。これは、SSD (Solid State Drive) を使用する単一の仮想ボリュームです。クラスターボリュームは、データの 6 つのコピーで構成され、1 つの AWS リージョン内の複数のアベイラビリティーゾーンに自動的にレプリケートされます。このレプリケーションにより、データの高い耐久性が保証され、データ損失の可能性が低くなります。また、データのコピーが他のアベイラビリティーゾーンにすでに存在するため、フェイルオーバー中のクラスターの可用性が高まります。ストレージ、高可用性、レプリケーションの詳細については、「[Amazon DocumentDB の 仕組み](how-it-works.md)」を参照してください。

## Amazon DocumentDB 4.0 と Elastic クラスター の機能上の違い
<a name="elastic-functional-differences"></a>

Amazon DocumentDB 4.0 と エラスティッククラスターの間には、次のような機能上の違いがあります。
+ `top` および `collStats` の結果はシャード別にパーティショニングされます。シャードコレクションの場合、データは複数のパーティションに分散され、`collStats` は、各パーティションから集約された `collScans` のレポートを作成します。
+ シャードされたコレクションの `top` と `collStats` からコレクション統計は、クラスターのシャード数が変更されるとリセットされます。
+ バックアップビルトインロールが `serverStatus` をサポートするようになりました。アクション - バックアップロールを持つデベロッパーおよびアプリケーションは、Amazon DocumentDB クラスターの状態に関する統計を収集できます。
+ `replSetGetConfig` 出力では `SecondaryDelaySecs` フィールドが `slaveDelay` を置き換えます。
+ `hello` コマンドは `isMaster` を置き換え、`hello` は エラスティッククラスターの役割を説明したドキュメント返します。
+ エラスティッククラスターでは、 `$elemMatch` 演算子は配列の最初の入れ子レベルのドキュメントのみを一致検索します。Amazon DocumentDB 4.0 では、この演算子はすべてのレベルを横断して、一致したドキュメントを返します。例えば、次のようになります。

```
db.foo.insert(
[
    {a: {b: 5}},
    {a: {b: [5]}},
    {a: {b: [3, 7]}},
    {a: [{b: 5}]},
    {a: [{b: 3}, {b: 7}]},
    {a: [{b: [5]}]},
    {a: [{b: [3, 7]}]},
    {a: [[{b: 5}]]},
    {a: [[{b: 3}, {b: 7}]]},
    {a: [[{b: [5]}]]},
    {a: [[{b: [3, 7]}]]}
]);
// Elastic clusters
> db.foo.find({a: {$elemMatch: {b: {$elemMatch: {$lt: 6, $gt: 4}}}}}, {_id: 0})
{ "a" : [ { "b" : [ 5 ] } ] }

// Docdb 4.0: traverse more than one level deep
> db.foo.find({a: {$elemMatch: {b: {$elemMatch: {$lt: 6, $gt: 4}}}}}, {_id: 0})
{ "a" : [ { "b" : [ 5 ] } ] }
{ "a" : [ [ { "b" : [ 5 ] } ] ] }
```
+ Amazon DocumentDB 4.0 では、「\$1」プロジェクションはすべてのドキュメントとすべてのフィールドを返します。エラスティッククラスターでは、「\$1」プロジェクションが指定された `find` コマンドは、「\$1」プロジェクションと一致するフィールドのみを含むクエリパラメータに一致するドキュメントを返します。
+ エラスティッククラスターでは、`$regex` および `$options` クエリパラメーターが指定された `find` コマンドは、「\$1regex と \$1options の両方にオプションを設定することはできません」というエラーを返します。
+ エラスティッククラスターの場合、`$indexOfCP` は以下のいずれかの場合に 「-1」を返します。
  + `string expression` でサブ文字列が見つからない。
  + 数値 `start` は `end` より大きい。
  + 数値 `start` は文字列のバイト長より大きい。

  Amazon DocumentDB 4.0 の場合、`$indexOfCP` は位置 `start` の数値が `end` または文字列のバイト長よりも大きい場合に「0」を返します。
+ エラスティッククラスターの場合、`_id fields` プロジェクトオペレーション (例: `{"_id.nestedField" : 1}`) はプロジェクトされたフィールドのみを含むドキュメントを返します。一方、Amazon DocumentDB 4.0 の場合、入れ子にされたフィールドプロジェクトコマンドではどのドキュメントも除外しません。