大きな項目と属性を格納するベストプラクティス - Amazon DynamoDB

大きな項目と属性を格納するベストプラクティス

Amazon DynamoDB では現在、テーブルに格納する各項目のサイズを制限しています (「Amazon DynamoDB のサービス、アカウント、およびテーブルのクォータ」を参照)。アプリケーションで DynamoDB のサイズ制限よりも多くのデータを格納する必要がある場合は、1 つ以上の大きな属性を圧縮するか、項目を複数の項目に分割することができます (ソートキーによって効率的にインデックス付けされます)。Amazon Simple Storage Service (Amazon S3) にオブジェクトとして項目を保存して、Amazon S3 オブジェクト識別子を DynamoDB 項目に格納することもできます。

大量の属性値を圧縮する

大きな属性値を圧縮すると、DynamoDB の項目制限に収まり、ストレージコストが削減されます。GZIP や LZO などの圧縮アルゴリズムはバイナリ出力を生成し、これを Binary 属性タイプに格納することができます。

例えば、「DynamoDB でのコード例用のテーブルの作成とデータのロード」セクションの Reply テーブルはフォーラムユーザーの書いたメッセージを保存します。これらのユーザー応答は、長い文字列で構成される場合があるため、圧縮の適切な候補と考えられます。

DynamoDB で長いメッセージを圧縮する方法を示すサンプルコードについては、次のトピックを参照してください。

大きな属性値を Amazon S3 に保存する

前述のように、Amazon S3 を使用して、DynamoDB 項目に収まらない大きな属性値を格納することもできます。Amazon S3 のオブジェクトとして保存してから、DynamoDB 項目にオブジェクト識別子を格納することができます。

また、Amazon S3 のオブジェクトメタデータサポートを使用して、DynamoDB の親項目にリンクを戻すこともできます。項目の主キーバリューを Amazon S3 のオブジェクトの Amazon S3 メタデータとして格納します。この操作は、Amazon S3 オブジェクトのメンテナンスに役立ちます。

例えば、「DynamoDB でのコード例用のテーブルの作成とデータのロード」セクションの ProductCatalog テーブルを考えてみます。このテーブル内の項目は、価格、説明、書籍の著者、その他の製品の寸法に関する情報を格納します。大きすぎて項目に収まらない各製品のイメージを保存する場合は、DynamoDB ではなく、Amazon S3 にイメージを保存できます。

この戦略を実装するときは、次の制限事項に注意してください。

  • DynamoDB は、Amazon S3 と DynamoDB 間のトランザクションをサポートしていません。このため、アプリケーションでは失敗が発生する状況に対処する必要があります。例えば、孤立した Amazon S3 オブジェクトのクリーンアップなどがあります。

  • Amazon S3 では、オブジェクト ID の長さが制限されます。そのため、過度に長いオブジェクト識別子を生成したり、他の Amazon S3 制約に違反しないようにデータを整理する必要があります。

Amazon S3 の使用方法の詳細については、Amazon Simple Storage Service デベロッパーガイドを参照してください。