

# DynamoDB で時系列データを処理するベストプラクティス。
<a name="bp-time-series"></a>

Amazon DynamoDB の一般的な設計原則では、使用するテーブルの数を最小限に抑えることをお勧めします。ほとんどのアプリケーションで、必要なテーブルは 1 つだけです。ただし、時系列データでは、期間あたりアプリケーションごとにテーブルを 1 個使用すると、多くの場合最適に処理できます。

## 時系列データの設計パターン
<a name="bp-time-series-pattern"></a>

大容量のイベントを追跡する一般的な時系列シナリオを考えてみます。書き込みアクセスパターンは、記録されているすべてのイベントが今日の日付であることです。お客様の読み込みアクセスパターンでは、今日のイベントは最も頻繁に、昨日のイベントはそれよりはるかに低い頻度で読み込まれ、それ以前の古いイベントはほとんど読み込まれません。これを処理する 1 つの方法として、現在の日時をプライマリキーに構築できます。

次の設計パターンでは、このようなシナリオを効率的に処理します。
+ 必要な読み込みおよび書き込み容量と必要なインデックスでプロビジョニングされたテーブルを 1 つの期間に 1 つ作成します。
+ 各期間が終了する前に、次の期間でテーブルを事前に作成します。現在の期間が終了するように、イベントトラフィックを新しいテーブルにリダイレクトします。これらのテーブルには、記録した期間を指定する名前を割り当てることができます。
+ テーブルに書き込まれなくなったら、プロビジョニングされた書き込み容量を小さい値 (1 WCU など) に減らし、適切な読み込み容量をプロビジョニングします。時間の経過と共に、以前のテーブルのプロビジョニングされた読み込み容量を減らします。コンテンツがほとんど必要ないテーブルやコンテンツがまったく必要ないテーブルをアーカイブまたは削除することもできます。

トラフィックボリュームが最も多くなる現在の期間に必要なリソースを割り当て、アクティブに使用されなくなった以前のテーブルのプロビジョニングをスケールダウンすることでコストを削減できます。ビジネスニーズによっては、トラフィックを論理パーティションキーに均等に分散するために書き込みシャーディングを検討します。詳細については、「[書き込みシャーディングを使用して DynamoDB テーブルでワークロードを均等に分散させる](bp-partition-key-sharding.md)」を参照してください。

## Standard-IA テーブルクラスを使用してストレージコストを最適化する
<a name="bp-time-series-table-class"></a>

DynamoDB には、DynamoDB Standard と DynamoDB Standard-Infrequent Access (DynamoDB Standard-IA) の 2 つのテーブルクラスがあります。Standard-IA テーブルクラスでは、読み取りおよび書き込みスループットのコストは上がりますが、ストレージコストは下がります。このクラスは、ストレージがテーブルのコストの主要な部分で、テーブルへのアクセス頻度が低い場合に適しています。

このトレードオフは、時系列パターンに自然に当てはまります。現在の期間のテーブルは、ほとんどの読み取りトラフィックと書き込みトラフィックを受け取るため、スループットのコストが低い DynamoDB Standard テーブルクラスに保持してください。時間の経過とともにテーブルがアクティブに使用されなくなると、データの保持は継続されますが、ほとんど (またはまったく) 書き込まれず、読み取り頻度が低くなります。このような古いテーブルの場合、ストレージのコストが一般的に最も高くなるため、標準 IA テーブルクラスに切り替えることで、全体的なコストを削減できます。

時系列テーブルにテーブルクラスを適用する場合は、次の点を考慮してください。
+ DynamoDB Standard テーブルクラスで現在の (アクティブな) 期間を維持します。Standard-IA のスループットコストが高いと、大量の読み取りと書き込みを処理するテーブルのストレージ削減額を上回る可能性があります。
+ 期間テーブルがアクティブに書き込まれなくなり、アクセス頻度が低くなった後も、データを保持する必要がある場合 (コンプライアンス目的や、履歴クエリをときどき実行するなど) は、テーブルを Standard-IA に切り替えてください。
+ テーブルクラスはテーブルの作成時に設定でき、後で変更することもできます。切り替え前に各テーブルのストレージ対スループットのコスト比を評価し、変更後のコストをモニタリングします。

テーブルクラスとその選択方法の詳細については、「[DynamoDB テーブルクラス](HowItWorks.TableClasses.md)」および「[DynamoDB テーブルクラスの選択を評価する](CostOptimization_TableClass.md)」を参照してください。

## 時系列テーブルの例
<a name="bp-time-series-examples"></a>

読み込み/書き込み容量が高いときに現在のテーブルがプロビジョニングされ、頻繁にアクセスされないために以前のテーブルが縮小される時系列データの例を以下に示します。

![大容量の時系列データのテーブルスキーマ。](http://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/developerguide/images/TimeSeries.png)
