インスピレーションと洞察から生成されました 10 ソースから

img6

img7

img8

img9

img10

img11

はじめに

  • DynamoDbEnhancedClient: JavaでDynamoDbTableを操作するために、DynamoDbEnhancedClientをインスタンス化します。クライアントは標準のDynamoDbClientを使用し、その上にエンハンスクライアントを構築します。

  • DynamoDbTableの作成: DynamoDbTableインスタンスは、DynamoDbEnhancedClientのtable()ファクトリメソッドを使用して作成され、TableSchemaによって提供されるマッピング機能を活用します。

  • クエリメソッド: DynamoDbTableのquery()メソッドは、プライマリキー値に基づいてアイテムを検索します。@DynamoDbPartitionKeyとそれに続くオプションの@DynamoDbSortKeyを使用してデータクラスのプライマリキーを定義します。

  • スキャンとクエリの違い: scanメソッドはTable内の全アイテムを取得する手段を提供し、queryメソッドは指定の条件に一致するアイテムのみを取得します。

  • 非同期オプション: 非同期バージョンのメソッドもあり、PagePublisherを利用したり、Consumerを通して結果を処理することが可能です。

DynamoDbEnhancedClientの設定 [1]

  • 設定方法: DynamoDbEnhancedClientは標準のDynamoDbClientから派生します。このクライアントを使用するには、まずDynamoDbClientを設定してからbuilderメソッドを利用します。

  • プロバイダー: Credentialプロバイダーを使用して認証情報を設定します。

  • クライアントのメソッド: enhancedClientのcreateメソッドでデフォルト設定のインスタンスを作成します。

  • APIのエントリポイント: DynamoDB Enhanced APIは、このクライアントをエントリポイントとして使用します。

  • リージョンの設定: クライアントを初期化する際は、適切なAWS Regionを設定します。

img6

img7

DynamoDbTableの作成 [1]

  • セットアップ方法: DynamoDbEnhancedClientを用いてDynamoDbTableを作成できます。table()メソッドを使ってこのテーブルをインスタンス化します。

  • テーブルスキーマ: TableSchemaを使ってテーブルとカスタムクラスのマッピングを定義します。

  • インメモリ表現: DynamoDbTableはテーブルのインメモリ表現を提供し、CRUDオペレーションが可能です。

  • シングルトンクラス: 不変であり、アプリケーションの全体で使用できるため、シングルトンとして適しています。

  • テーブル生成のコード例: customerTable = [enhancedClient](prompt://ask_markdown?question=enhancedClient).table("Customer", [TableSchema](prompt://ask_markdown?question=TableSchema).fromBean(Customer.class));

img6

スキャンとクエリの活用方法 [2]

  • スキャンメソッド: scanメソッドによりDynamoDbのすべてのレコードを取得し、[PageIterable](prompt://ask_markdown?question=PageIterable)でページ単位にレスポンスを得ます。

  • クエリメソッド: プライマリキーに基づいてフィルタリングを行い、複数の条件に基づいて結果を微調整することが可能です。

  • ページ分割された結果の処理: クエリ結果はPageIterableまたは[PagePublisher](prompt://ask_markdown?question=PagePublisher)を使用して処理され、非同期操作にも対応しています。

  • 例: query()メソッドを使用して、プライマリキーと部分的なフィルター式を組み合わせてデータを取得します。

  • 非同期処理例: PagePublisher.subscribeを用いて非同期結果の処理を行うことができます。

img6

img7

img8

非同期処理の実装 [2]

  • 非同期クライアント: DynamoDbEnhancedAsyncClientを使用すると、非同期APIを通じてデータベースへのクエリやスキャンを行うことができます。

  • データのサブスクリプション: Subscribeメソッドを使用して非同期データ処理を実施します。

  • スレッドブロック: join()メソッドにより、サブスクリプションが完了するまでブロックする設定が可能です。

  • 例: [ProductCatalogSubscriber](prompt://ask_markdown?question=ProductCatalogSubscriber)を用いて結果を非同期で集約し、処理します。

  • フィルタリングとソート: 取得したデータをリアクティブストリームでフィルタリングし、ソートした状態で処理できます。

img6

V1とV2の違い [3]

  • アノテーションの変更: v1の@DynamoDBTableは削除され、v2では@DynamoDbBeanを使用します。

  • キー指定方法: v1は@DynamoDBHashKey/@DynamoDBRangeKeyを使用していたが、v2では@DynamoDbPartitationKey/@DynamoDbSortKeyに変更。

  • Getter利用: v2ではGetterにアノテーションを付ける方式へと変わり、lombokのgetterが使えなくなる。

  • テーブル名の指定: @Tableアノテーションを利用し、Entity内でテーブル名を指定できるよう対応する例があります。

  • 移行の難易度: v2への移行はそれほど困難ではないと指摘されており、エンハンストDynamoDBの利用が推奨されています。

関連動画

<br><br>