petachの日記スマートフォン用の表示で見るpetachの日記この広告は、90日以上更新していないブログに表示しています。使ってみる(高レベルAPI編)AWSこの記事は2012年に書かれたものです。最新情報はAWS公式ドキュメントを参照してください。Javaの低レベルAPIからDynamoDBを利用する方法を紹介しました。今日はもう1つのAPI「高レベルAPI」をDynamoDBのドキュメントに掲載されているサンプルプログラムに沿って使ってみた時のメモを載せます。高レベルAPIの概要やサンプルプログラムはこちらから。高レベルAPIではクラスとDynamoDBのテーブルをマッピングすることができます。個別のオブジェクトのインスタンスはテーブルに含まれるアイテムに該当します。高レベルAPIではCRUD操作、クエリとスキャンの実行をサポートしています。テーブルの追加・削除・変更はできません。これらの操作は低レベルAPIでのみサポートされています。JavaのオブジェクトとDynamoDBのテーブルのマッピングマッピングにはアノテーションとDynamoDBMapperクラスがポイントになります。アノテーションJavaのオブジェクトとDynamoDBのテーブルをマッピングするにはJavaのアノテーションを使います。必須のアノテーションはDynamoDBTableとDynamoDBHashKeyの2つです。デフォルトでは、クラスのプロパティはDynamoDBのテーブルの同じ名前の属性にマッピングされます。アノテーションを使います。アノテーションを付けます。整数型や文字列型のような型以外をマッピングする場合は、任意の型をAmazonDynamoDBで利用可能な型に変換するためのConverterを用意する必要があります。DynamoDBでは楽観的ロックのためのversionフィールドをサポートしています。アノテーションの例はこんな感じ。アノテーションで対応するDynamoDBのテーブル名や属性を指定します。//http://docs.amazonwebservices.com/amazondynamodb/latest/developerguide/JavaSDKHighLevel.htmlアノテーションの詳細http://docs.amazonwebservices.com/amazondynamodb/latest/developerguide/JavaSDKHighLevel.html#JavaDeclarativeTagsListDynamoDBMapperクラスDynamoDBMapperクラスはDynamoDBのデータベースへのエントリポイントになるクラスです。このクラスのメソッドを利用してCRUD操作をしたり、クエリやスキャンを実行できます。saveメソッドを使って新しいアイテムをDynamoDBに登録する時はこんな感じ。Reply)を作成し、データも投入しておきます。高レベルAPIではテーブルを作成できないので、予め作っておきます。高レベルAPIを使ってみるドキュメントにあるサンプルプログラムを動かしてみましょう。Delete)操作CRUD操作のサンプルプログラムはこちら。コピー&ペーストして実行できます。このサンプルプログラムは、まずCatalogItemテーブルに新しいアイテムを登録し(Create)、そのアイテムを更新(Update)します。続いて更新後のアイテムを読み取り(Read)、削除する(Delete)という流れになっています。DynamoDBMapperConfigでDynamoDBMapperConfig.ConsistentReads.CONSISTENTを指定するともっとも新しいデータが返ってくることが保証されます(読み取り一貫性)。指定をしない場合、結果整合性が保証されています。}//サンプルプログラムはドキュメントより抜粋//http://docs.amazonwebservices.com/amazondynamodb/latest/developerguide/JavaCRUDHighLevelExample1.htmlQueryとScanQueryとScanのサンプルプログラムはこちら。こちらもコピー&ペーストして実行できます。サンプルプログラムでは、内部クラスを使って親子関係があるデータを表現しています。前回のエントリで紹介したように、QueryとScanでは検索スピードが異なります。プライマリキーで検索するQueryの方が高速です。DynamoDBMapperクラスのqueryメソッドが使えない、ということがあります。この場合はloadメソッドを使います。プライマリキーがレンジキーの時はqueryメソッドを使います。コレクションを返します。最初に1件だけ検索結果を返し、次の検索結果が必要になった時に読み込みを行います。レンジキーでqueryする時の例。//プライマリキーのレンジ属性を15日前の日付と比較します。コレクションで返ってきます。}//サンプルプログラムはドキュメントより抜粋//http://docs.amazonwebservices.com/amazondynamodb/latest/developerguide/JavaQueryScanORMModelExample.htmlScanの例。高レベルAPIの解説ドキュメントにあるコードスニペットが分かりやすいのでこちらを紹介します。検索条件と、それを適用する属性をMapに保存し、検索を行う例です。指定できるパラメータDynamoDBMapperのインスタンスにパラメータを指定すると、オブジェクトをDynamoDBのアイテムにマッピングするときの振る舞いを設定できます。設定にはDynamoDBMapperConfigクラスのインスタンスを利用します。指定すると、オブジェクトで変更された属性のみ更新されます。更新していない属性は影響を受けません。デフォルトではこちらが使用されます。指定すると、オブジェクトで変更された属性以外も影響を受けます。オブジェクトで指定された値ですべて上書きされるので、オブジェクトで設定されていない値は削除されます。楽観的ロックで使用されるバージョン属性は影響を受けません。指定すると、もっとも新しいデータが返ってくることが保証されます(読み取り一貫性)。指定すると、結果整合性が保証されます。DynamoDBMapperConfig.TableNameOverrideDynamoDBTableアノテーションで指定したテーブル名を無視することができます。まとめ高レベルAPIを使えばクラスとDynamoDBのテーブルを簡単にマッピングすることができます。マッピングにはアノテーションを使用します。テーブルの作成・変更・削除はできないので注意が必要です。Javaから使ってみる(低レベルAPI編)この記事は2012年に書かれたものです。)はてなブログをはじめよう!petachさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。