翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
DynamoDB マッピング/ドキュメントのバージョン 1 APIsからバージョン 2 への変更
このトピックでは、Amazon DynamoDB APIs用の Java SDKの高レベルの バージョン 1.x (v1) から AWS SDK for Java 2.x (v2) への変更について詳しく説明します。最初に object-to-table マッピングについて説明APIし、次に JSONスタイルのドキュメントAPIを操作するためのドキュメントについて説明します。
高レベル変更
各ライブラリのマッピングクライアントの名前は、v1 と v2 で異なります。
-
v1 - DynamoDBMapper
-
v2 - DynamoDB 拡張クライアント
2 つのライブラリの操作方法はほぼ同じです。マッパー/クライアントをインスタンス化し、これらの項目を読み書きPOJOAPIsする DynamoDB テーブルに Java を提供します。どちらのライブラリも のクラスに注釈POJOを提供し、クライアントが をどのように処理するかを指示しますPOJO。
v2 に移行するときの顕著な違いは次のとおりです。
-
V2 と v1 は、低レベルの DynamoDB オペレーションに異なるメソッド名を使用します。例:
v1 v2 load getItem save putItem batchLoad batchGetItem -
V2 には、テーブルスキーマを定義し、テーブルPOJOsにマッピングする複数の方法があります。ビルダーを使用して、コードから生成された注釈またはスキーマの使用から選択できます。V2 は、可変および不変のスキーマバージョンも提供します。
-
v2 では、最初のステップの 1 つとしてテーブルスキーマを具体的に作成しますが、v1 では、テーブルスキーマは必要に応じて注釈付きクラスから推測されます。
-
V2 には拡張APIクライアント にドキュメント
クライアント が含まれますがAPI、v1 は別の APIを使用します。 -
すべて APIs v2 の同期バージョンと非同期バージョンで使用できます。
v2 拡張クライアントの詳細については、このガイドの DynamoDB マッピングセクションを参照してください。
依存関係をインポートする
v1 | v2 |
---|---|
|
|
* 最新バージョン
v1 では、1 つの依存関係に低レベルの DynamoDB APIとマッピング/ドキュメント の両方が含まれますがAPI、v2 では、dynamodb-enhanced
アーティファクト依存関係を使用してマッピング/ドキュメント にアクセスしますAPI。dynamodb-enhanced
モジュールには、低レベルdynamodb
モジュールへの推移的な依存関係が含まれています。
API 変更
クライアントの作成
ユースケース | v1 | v2 |
---|---|---|
通常のインスタンス化 |
|
|
最小限のインスタンス化 |
|
|
属性トランスフォーマーを使用* |
|
|
* v2 の拡張機能は、v1 の属性トランスフォーマーにほぼ対応しています。拡張機能を使用する セクションには、v2 の拡張機能に関する詳細情報が含まれています。
DynamoDB テーブル/インデックスへのマッピングを確立する
v1 では、Bean 注釈を使用して DynamoDB テーブル名を指定します。v2 では、ファクトリメソッド はtable()
、リモート DynamoDB テーブルDynamoDbTable
を表す のインスタンスを生成します。table()
メソッドの最初のパラメータは、DynamoDB テーブル名です。
ユースケース | v1 | v2 |
---|---|---|
Java POJO クラスを DynamoDB テーブルにマッピングする |
|
|
DynamoDB セカンダリインデックスへのマッピング |
v1 メソッドについて説明する DynamoDB デベロッパーガイドの セクションは、完全な例を示しています。 |
このガイドのセカンダリインデックスを使用する「」セクションでは、詳細情報を提供します。 |
Table operations
このセクションではAPIs、ほとんどの標準ユースケースで v1 と v2 が異なるオペレーションについて説明します。
v2 では、1 つのテーブルを含むすべてのオペレーションが、拡張クライアントではなくDynamoDbTable
インスタンスで呼び出されます。拡張クライアントには、複数のテーブルをターゲットにできるメソッドが含まれています。
以下のテーブルのテーブルオペレーションでは、POJOインスタンスは item
または を などの特定のタイプと呼びますcustomer1
。という名前の v2 の例では、 table
は、DynamoDbTable
インスタンスへの参照を返enhancedClient.table()
す を以前に呼び出した結果です。
ほとんどの v2 オペレーションは、表示されていない場合でも流暢なコンシューマーパターンで呼び出すことができることに注意してください。例えば、 などです
Customer customer = table.getItem(r → r.key(key));
or
Customer customer = table.getItem(r → r.key(k -> k.partitionValue("id").sortValue("email")))
v1 オペレーションの場合、テーブルには一般的に使用されるフォームの一部が含まれており、オーバーロードされたフォームがすべて含まれているわけではありません。例えば、 load()
メソッドには次のオーバーロードがあります。
mapper.load(Customer.class, hashKey)
mapper.load(Customer.class, hashKey, rangeKey)
mapper.load(Customer.class, hashKey, config)
mapper.load(Customer.class, hashKey, rangeKey, config)
mapper.load(item)
mapper.load(item, config)
この表は、一般的に使用される形式を示しています。
mapper.load(item) mapper.load(item, config)
ユースケース | v1 | DynamoDB オペレーション | v2 |
---|---|---|---|
Java を DynamoDB テーブルPOJOに書き込む |
v1 では、 |
PutItem , UpdateItem |
|
DynamoDB テーブルから Java への項目の読み取り POJO |
|
GetItem |
|
DynamoDB テーブルから項目を削除する |
|
DeleteItem |
|
DynamoDB テーブルまたはセカンダリインデックスをクエリし、ページ分割されたリストを返す |
|
Query |
同期レスポンスと非同期レスポンス |
DynamoDB テーブルまたはセカンダリインデックスをクエリしてリストを返す |
|
Query |
同期レスポンスと非同期レスポンス |
DynamoDB テーブルまたはセカンダリインデックスをスキャンし、ページ分割されたリストを返します。 |
|
Scan |
同期レスポンスと非同期レスポンス |
DynamoDB テーブルまたはセカンダリインデックスをスキャンしてリストを返す |
|
Scan |
同期レスポンスと非同期レスポンス |
バッチ内の複数のテーブルから複数の項目を読み取る |
|
BatchGetItem |
|
バッチ内の複数のテーブルに複数の項目を書き込む |
|
BatchWriteItem |
|
バッチ内の複数のテーブルから複数の項目を削除する |
|
BatchWriteItem |
|
バッチ内の複数の項目を書き込み/削除 |
|
BatchWriteItem |
|
トランザクション書き込みを実行する |
|
TransactWriteItems |
|
トランザクション読み取りを実行する |
|
TransactGetItems |
|
スキャンまたはクエリの一致する項目の数を取得する |
|
Query 、 Scan 付き Select.COUNT |
サポートされていません |
POJO クラスに対応するテーブルを DynamoDB に作成する |
前のステートメントでは、低レベルのテーブル作成リクエストを生成します。ユーザーは DynamoDB クライアント |
CreateTable |
|
DynamoDB で並列スキャンを実行する |
|
Scan Segment および TotalSegments パラメータを使用する |
ユーザーはワーカースレッドを処理し、各セグメント
|
Amazon S3 を DynamoDB と統合してインテリジェントな S3 リンクを保存する |
|
- |
Amazon S3 と DynamoDB が結合されているため、サポートされていません。 |
マップクラスとプロパティ
v1 と v2 の両方で、Bean スタイルの注釈を使用してクラスをテーブルにマッピングします。V2 には、イミュータブルクラスの使用など、特定のユースケースのスキーマを定義する他の方法もあります。
Bean 注釈
次の表は、v1 および v2 で使用される特定のユースケースに対応する Bean 注釈を示しています。Customer
クラスシナリオは、パラメータを説明するために使用されます。
v2 の注釈、クラス、列挙はキャメルケース規則に従いDynamoDb、DynamoDB」ではなく「」を使用します。
ユースケース | v1 | v2 |
---|---|---|
クラスをテーブルにマップする |
|
テーブル名は、 DynamoDbEDnhancedClient#table() メソッドを呼び出すときに定義されます。 |
クラスメンバーをテーブル属性として指定する |
|
|
クラスメンバーをハッシュ/パーティションキーとして指定する |
|
|
クラスメンバーを範囲/ソートキーとして指定する |
|
|
クラスメンバーをセカンダリインデックスのハッシュ/パーティションキーとして指定する |
|
|
クラスメンバーをセカンダリインデックス範囲/ソートキーとして指定する |
|
|
テーブルにマッピングするときにこのクラスメンバーを無視する |
|
|
自動生成されたUUIDキー属性としてクラスメンバーを指定する |
|
これを提供する拡張機能はデフォルトではロードされません。拡張機能をクライアントビルダーに追加する必要があります。 |
自動生成されたタイムスタンプ属性としてクラスメンバーを指定する |
|
これを提供する拡張機能はデフォルトではロードされません。拡張機能をクライアントビルダーに追加する必要があります。 |
クラスメンバーを自動増分バージョン属性として指定する |
|
これを提供する拡張機能は自動ロードされます。 |
クラスメンバーをカスタム変換を要求するものとして指定する |
|
|
別の属性タイプとして保存するクラスメンバーを指定する |
|
同等物なし |
DynamoDB ドキュメント (JSONスタイルのドキュメント) またはサブドキュメントにシリアル化できるクラスを指定する |
|
直接同等の注釈はありません。拡張ドキュメント を使用しますAPI。 |
V2 の追加注釈
ユースケース | v1 | v2 |
---|---|---|
Java 値が null の場合、NULL属性として保存されないクラスメンバーを指定する | 該当なし |
|
すべての属性が null の場合は、クラスメンバーを空のオブジェクトに指定します。 | 該当なし |
|
クラスメンバーの特別な更新アクションを指定する | 該当なし |
|
イミュータブルクラスを指定する | 該当なし |
|
クラスメンバーを自動増分カウンター属性として指定する | 該当なし |
この機能を提供する拡張機能は自動ロードされます。 |
構成
v1 では、通常、 のインスタンスを使用して特定の動作を制御しますDynamoDBMapperConfig
。設定オブジェクトは、マッパーの作成時またはリクエスト時に指定できます。v2 では、設定は オペレーションのリクエストオブジェクトに固有です。
ユースケース | v1 | v1 のデフォルト | v2 |
---|---|---|---|
|
|||
バッチロードの再試行戦略 |
|
失敗した項目を再試行する | |
バッチ書き込み再試行戦略 |
|
失敗した項目を再試行する | |
整合性のある読み取り |
|
EVENTUAL |
デフォルトでは、整合性のある読み取りは読み取りオペレーションでは false です。リクエストオブジェクト.consistentRead(true) で をオーバーライドします。 |
マーシャラー/アンマーシャラーのセットを含む変換スキーマ |
静的実装は、古いバージョンとの下位互換性を提供します。 |
V2_COMPATIBLE |
該当しません。これは、DynamoDB (v1) の最も古いバージョンがデータ型をどのように保存したかを参照するレガシー機能であり、この動作は拡張クライアントでは保持されません。DynamoDB v1 の動作の例は、ブール値ではなく数値としてブール値を格納することです。 |
テーブル名 |
静的実装は、古いバージョンとの下位互換性を提供します。 |
クラスから注釈または推測を使用する |
テーブル名は、 |
ページ分割ロード戦略 |
オプションは次のとおりです: LAZY_ |
LAZY_LOADING |
イテレーションのみがデフォルトです。他の v1 オプションはサポートされていません。 |
リクエストメトリクスの収集 |
|
null |
標準 DynamoDB クライアントを構築するClientOverrideConfiguration ときは、 metricPublisher() で を使用します。 |
保存動作 |
オプションは |
UPDATE |
v2 では、
|
タイプコンバータファクトリ |
|
標準タイプコンバータ |
を使用して Bean に を設定する
|
オペレーションごとの設定
v1 では、 などの一部のオペレーションはquery()
、オペレーションに送信された「式」オブジェクトを使用して高度に設定できます。例:
DynamoDBQueryExpression<Customer> emailBwQueryExpr = new DynamoDBQueryExpression<Customer>() .withRangeKeyCondition("Email", new Condition() .withComparisonOperator(ComparisonOperator.BEGINS_WITH) .withAttributeValueList( new AttributeValue().withS("my"))); mapper.query(Customer.class, emailBwQueryExpr);
v2 では、設定オブジェクトを使用する代わりに、ビルダーを使用してリクエストオブジェクトにパラメータを設定します。例:
QueryEnhancedRequest emailBw = QueryEnhancedRequest.builder() .queryConditional(QueryConditional .sortBeginsWith(kb -> kb .sortValue("my"))).build(); customerTable.query(emailBw);
条件付き
v2 では、条件式とフィルタリング式は、条件と名前とフィルターのマッピングをカプセル化する Expression
オブジェクトを使用して表現されます。
ユースケース | オペレーション | v1 | v2 |
---|---|---|---|
予想される属性条件 | save()、delete()、query()、Scan() |
|
廃止されました。ConditionExpression 代わりに を使用してください。 |
条件式 | delete() |
|
|
フィルター式 | query(), scan() |
|
|
クエリの条件式 | query() |
|
|
型変換
デフォルトコンバータ
v2 では、 はすべての一般的なタイプのデフォルトコンバータのセットSDKを提供します。タイプコンバータは、プロバイダーレベル全体と単一の属性の両方で変更できます。使用可能なコンバータのリストは、 AttributeConverter
属性のカスタムコンバーターを設定する
v1 では、getter メソッドに で注釈を付けて@DynamoDBTypeConverted
、Java 属性タイプと DynamoDB 属性タイプの間で変換するクラスを指定できます。例えば、Java Currency
タイプと DynamoDB 文字列を変換CurrencyFormatConverter
する は、次のスニペットに示すように適用できます。
@DynamoDBTypeConverted(converter = CurrencyFormatConverter.class)
public Currency getCurrency() { return currency; }
前のスニペットに相当する v2 を以下に示します。
@DynamoDbConvertedBy(CurrencyFormatConverter.class)
public Currency getCurrency() { return currency; }
注記
v1 では、属性自体、タイプ、またはユーザー定義の注釈に注釈を適用できます。v2 では、ゲッターにのみ注釈を適用できます。
タイプコンバーターファクトリまたはプロバイダーを追加する
v1 では、独自のタイプコンバーターのセットを提供するか、タイプコンバーターファクトリを設定に追加することで、関心のあるタイプをオーバーライドできます。タイプコンバータファクトリは を拡張しDynamoDBTypeConverterFactory
、オーバーライドはデフォルトセットへの参照を取得して拡張することによって行われます。次のスニペットは、これを行う方法を示しています。
DynamoDBTypeConverterFactory typeConverterFactory =
DynamoDBTypeConverterFactory.standard().override()
.with(String.class, CustomBoolean.class, new DynamoDBTypeConverter<String, CustomBoolean>() {
@Override
public String convert(CustomBoolean bool) {
return String.valueOf(bool.getValue());
}
@Override
public CustomBoolean unconvert(String string) {
return new CustomBoolean(Boolean.valueOf(string));
}}).build();
DynamoDBMapperConfig config =
DynamoDBMapperConfig.builder()
.withTypeConverterFactory(typeConverterFactory)
.build();
DynamoDBMapper mapperWithTypeConverterFactory = new DynamoDBMapper(dynamo, config);
V2 は、 @DynamoDbBean
アノテーションを通じて同様の機能を提供します。1 つの AttributeConverterProvider
または順序付けられた のチェーンを指定できますAttributeConverterProvider
。独自の属性コンバータープロバイダーチェーンを指定する場合、デフォルトのコンバータープロバイダーをオーバーライドし、その属性コンバーターを使用するにはチェーンに含める必要があることに注意してください。
@DynamoDbBean(converterProviders = {
ConverterProvider1.class,
ConverterProvider2.class,
DefaultAttributeConverterProvider.class})
public class Customer {
...
}
このガイドの属性変換に関するセクションには、v2 の完全な例が含まれています。
ドキュメント API
ドキュメントは、DynamoDB テーブルでの JSONスタイルのドキュメントの単一項目としての使用APIをサポートします。v1 ドキュメントAPIは v2 APIで対応する を持っていますが、v1 APIのようにドキュメントに別のクライアントを使用する代わりに、v2 は DynamoDB 拡張クライアントにドキュメントAPI機能を組み込みます。
v1 では、 Item
クラスは DynamoDB テーブルの非構造化レコードを表します。v2 では、非構造化レコードは EnhancedDocument
次の表は、v1 と v2 APIsのドキュメントの違いを比較したものです。
ユースケース | v1 | v2 |
---|---|---|
ドキュメントクライアントを作成する |
|
|
テーブルを参照する |
|
|
Work with semi-structured data | ||
項目を配置する |
|
|
項目を取得する |
|
|
Work with JSON items | ||
JSON 構造を変換してドキュメントで使用する API |
|
|
配置 JSON |
|
|
読み取り JSON |
|
|
API ドキュメントのリファレンスとガイド APIs
v1 | v2 | |
---|---|---|
API リファレンス | Javadoc | Javadoc |
ドキュメントガイド | Amazon DynamoDB デベロッパーガイド | 拡張ドキュメント API (このガイド) |
FAQ
Q: バージョン番号を使用したオプティミスティックロックは、v2 でも v1 と同じように機能しますか?
A. 動作は似ていますが、v2 は削除オペレーションの条件を自動的に追加しません。削除動作を制御する場合は、条件式を手動で追加する必要があります。