

# ソートキーを使用してデータを DynamoDB で整理するためのベストプラクティス
<a name="bp-sort-keys"></a>

Amazon DynamoDB テーブルでは、テーブルの各アイテムを一意に識別するプライマリキーは、パーティションキーとソートキーで構成することができます。

設計が優れたソートキーには、2 つの主な利点があります。
+ 関連情報を 1 つの場所にまとめて、効率的にクエリを実行することができます。ソートキーを慎重に設計することで、`begins_with`、`between`、`>`、`<` などの演算子による範囲のクエリを使用して、一般的に必要な関連項目のグループを検索することができます。
+ 複合ソートキーを作成すれば、データの階層的 (1 対多) な関係を定義して、任意の階層レベルでクエリを実行することができます。

  例えば、地理的場所を示すテーブルでは、次のようにソートキーを構成できます。

  ```
  [country]#[region]#[state]#[county]#[city]#[neighborhood]
  ```

  これにより、これらの集計レベルのいずれかの場所のリスト (`country` から `neighborhood`、またその間にあるすべてのもの) に対して、範囲のクエリを効率的に行うことができます。

## バージョンコントロールにソートキーを使用する
<a name="bp-sort-keys-version-control"></a>

多くのアプリケーションでは、監査またはコンプライアンス目的で項目レベルのリビジョン履歴を保持し、最新バージョンを簡単に取得できる必要があります。ソートキープレフィックスを使用してこれを実現する効果的な設計パターンがあります。
+ 新しい項目ごとに、コピーを 2 つ作成します。一方は、ソートキーの冒頭にバージョン番号 0 のプレフィックス (`v0_` など) を、もう一方には、バージョン番号 1 のプレフィックス (`v1_` など) を付加します。
+ 項目が更新されるたびに、更新されたバージョンのソートキーの次の上位バージョンプレフィックスを使用して、更新後の内容をバージョンのプレフィックス 0 の項目にコピーします。つまり、任意の項目の最新バージョンは、0 のプレフィックスを使用して簡単に見つけることができます。

例えば、部品メーカーは、以下に示すようなスキーマを使用する場合があります。

![\[主キーとデータ項目の属性を持つテーブルを示すバージョン管理の例。\]](http://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/developerguide/images/VersionControl.png)


`Equipment_1` 項目は、さまざまな監査人によって、一連の監査が行われます。新しい各監査の結果は、テーブルの新しい項目に取り込まれます。バージョン番号 1 から始まり、その後のリビジョンごとに番号が増えます。

新しいリビジョンが追加されるたびに、アプリケーション層でゼロバージョンの項目 (`v0_Audit` のソートキー) の内容が、新しいリビジョンの内容に置き換えられます。

アプリケーションで最新の監査ステータスを取得する必要がある場合は、ソートキープレフィックス `v0_` をクエリできます。

アプリケーションでリビジョン履歴全体を取得する必要がある場合は、その項目のパーティションキーの下にあるすべての項目をクエリして、`v0_` 項目をフィルターで除外することができます。

この設計では、ソートキープレフィックスの後にソートキーの各部品 ID が含まれている場合、機器の複数の部分を監査することもできます。