DynamoDBContext クラス
DynamoDBContext
クラスは Amazon DynamoDB データベースのエントリポイントです。このクラスから DynamoDB に接続して、各種のテーブル内のデータにアクセスし、さまざまな CRUD オペレーションとクエリを実行することができます。DynamoDBContext
クラスでは次のメソッドを使用できます。
CreateMultiTableBatchGet
複数の個々の MultiTableBatchGet
オブジェクトで構成される BatchGet
オブジェクトを作成します。これらの各 BatchGet
オブジェクトは、単一の DynamoDB テーブルから項目を取り出す場合に使用します。
1 つ以上のテーブルから項目を取得するには、ExecuteBatchGet
メソッドを使用し、MultiTableBatchGet
オブジェクトをパラメータとして渡します。
CreateMultiTableBatchWrite
複数の個々の MultiTableBatchWrite
オブジェクトで構成される BatchWrite
オブジェクトを作成します。これらの各 BatchWrite
オブジェクトは、単一の DynamoDB テーブルに項目を書き込んだり、それを削除したりするために使用します。
テーブルに書き込むには、ExecuteBatchWrite
メソッドを使用し、MultiTableBatchWrite
オブジェクトをパラメータとして渡します。
CreateBatchGet
テーブルから複数の項目を取り出すために使用できる BatchGet
オブジェクトを作成します。詳細については、「バッチ取得: 複数の項目の取得 」を参照してください。
CreateBatchWrite
テーブルに複数の項目を入力する、またはテーブルから複数の項目を削除するために使用できる BatchWrite
オブジェクトを作成します。詳細については、「バッチ書き込み: 複数の項目の置換および削除 」を参照してください。
Delete
テーブルから項目を削除します。このメソッドでは、削除する項目のプライマリキーが必要になります。プライマリキーの値、またはこのメソッドのパラメータとしてプライマリキーの値を使用するクライアント側オブジェクトを入力できます。
-
クライアント側オブジェクトをパラメータとして指定し、オプティミスティックロックを有効にすると、クライアント側とサーバー側のオブジェクトのバージョンが一致する場合のみ、削除が成功します。
-
プライマリキーの値だけをパラメータとして指定すると、オプティミスティックロックを有効にしているかどうかにかかわらず、削除が成功します。
注記
このオペレーションをバックグラウンドで実行するには、DeleteAsync
メソッドを使用します。
Dispose
すべてのマネージドリソースとアンマネージドリソースを破棄します。
ExecuteBatchGet
1 つ以上のテーブルからデータを読み込みます。BatchGet
内のすべての MultiTableBatchGet
オブジェクトを処理します。
注記
このオペレーションをバックグラウンドで実行するには、ExecuteBatchGetAsync
メソッドを使用します。
ExecuteBatchWrite
1 つ以上のテーブルにデータを書き込むまたは削除します。BatchWrite
内のすべての MultiTableBatchWrite
オブジェクトを処理します。
注記
このオペレーションをバックグラウンドで実行するには、ExecuteBatchWriteAsync
メソッドを使用します。
FromDocument
Document
のインスタンスと仮定すると、FromDocument
メソッドは、クライアント側のクラスのインスタンスを返します。
これは、オブジェクト永続性モデルと合わせてドキュメントモデルクラスを使用してデータオペレーションを行う場合に役立ちます。AWS SDK for .NET で使用されるドキュメントモデルクラスの詳細については、「.NET ドキュメントモデル」を参照してください。
Document
という名前の doc
オブジェクトがあり、Forum
項目の表現を含んでいるとします。(このオブジェクトの構成方法については、下の ToDocument
メソッドの説明を参照してください)。次の C# サンプルコードに示すように、FromDocument
を使用して Forum
から Document
項目を取得することができます。
例
forum101 = context.FromDocument<Forum>(101);
注記
Document
オブジェクトで IEnumerable
インターフェイスを実装している場合、FromDocuments
メソッドを使用できます。これにより、Document
のすべてのクラスインスタンスを反復的に処理できます。
FromQuery
QueryOperationConfig
オブジェクトに定義されたクエリパラメータを使用して、Query
オペレーションを実行します。
注記
このオペレーションをバックグラウンドで実行するには、FromQueryAsync
メソッドを使用します。
FromScan
ScanOperationConfig
オブジェクトに定義されたスキャンパラメータを使用して、Scan
オペレーションを実行します。
注記
このオペレーションをバックグラウンドで実行するには、FromScanAsync
メソッドを使用します。
GetTargetTable
指定した型のターゲットテーブルを取り出します。これは、任意データを DynamoDB テーブルにマッピングするためのカスタムコンバーターを記述していて、カスタムデータ型に関連付けられているテーブルを特定する必要がある場合に役立ちます。
Load
テーブルから項目を取り出します。このメソッドでは、取り出す項目のプライマリキーだけが必要になります。
DynamoDB のデフォルトでは、結果整合性のある値が含まれる項目が返されます。結果整合性モデルの詳細については、「読み込み整合性」を参照してください。
注記
このオペレーションをバックグラウンドで実行するには、LoadAsync
メソッドを使用します。
Query
指定したクエリパラメータに基づいてテーブルのクエリが実行されます。
複合プライマリキー (パーティションキーおよびソートキー) が存在する場合にのみ、テーブルにクエリを実行できます。クエリを実行する場合は、パーティションキーと、ソートキーに適用される条件を指定する必要があります。
ここで、クライアント側の Reply
クラスが、DynamoDB の Reply
テーブルにマッピングされている場合を考えてみます。次の C# サンプルコードでは、Reply
テーブルのクエリを実行し、過去 15 日間に投稿されたフォーラムスレッドの返信を検索しています。Reply
テーブルには、Id
パーティションキーと ReplyDateTime
ソートキーを持つプライマリキーがあります。Reply
テーブルの詳細については、「DynamoDB でのコード例用のテーブルの作成とデータのロード」を参照してください。
例
DynamoDBContext context = new DynamoDBContext(client); string replyId = "DynamoDB#DynamoDB Thread 1"; //Partition key DateTime twoWeeksAgoDate = DateTime.UtcNow.Subtract(new TimeSpan(14, 0, 0, 0)); // Date to compare. IEnumerable<Reply> latestReplies = context.Query<Reply>(replyId, QueryOperator.GreaterThan, twoWeeksAgoDate);
これにより、Reply
オブジェクトのコレクションが返されます。
Query
メソッドでは、「遅延ロード」された IEnumerable
コレクションが返ります。最初に結果が 1 ページのみ返され、必要に応じて、さらに次ページを要求するサービス呼び出しが行われます。一致する項目をすべて取得するには、IEnumerable
を反復的に処理します。
テーブルにシンプルなプライマリキー (パーティションキー) がある場合は、Query
メソッドを使用できません。代わりに Load
メソッドを使用して、パーティションキーを入力して項目を取り出すことができます。
注記
このオペレーションをバックグラウンドで実行するには、QueryAsync
メソッドを使用します。
保存
指定したオブジェクトがテーブルに保存されます。入力オブジェクトで指定されたプライマリキーがテーブル内に存在しない場合は、このメソッドによって新しい項目がテーブルに追加されます。プライマリキーが存在する場合は、このメソッドによって既存の項目が更新されます。
オプティミスティックロックを設定している場合には、クライアント側とサーバー側で項目のバージョンが一致する場合のみ、更新が正常に実行されます。詳細については、「DynamoDB で AWS SDK for .NET のオブジェクト永続性モデルを使用した、バージョン番号による楽観的ロック」を参照してください。
注記
このオペレーションをバックグラウンドで実行するには、SaveAsync
メソッドを使用します。
Scan
テーブル全体のスキャンを実行します。
スキャン結果をフィルタリングするには、スキャン条件を指定します。この条件は、テーブル内の任意の属性に適用することができます。例えば、クライアント側の Book
クラスが、DynamoDB の ProductCatalog
テーブルにマッピングされているとします。次の C# コード例では、テーブルがスキャンされ、価格が 0 未満の書籍項目だけが返されています。
例
IEnumerable<Book> itemsWithWrongPrice = context.Scan<Book>( new ScanCondition("Price", ScanOperator.LessThan, price), new ScanCondition("ProductCategory", ScanOperator.Equal, "Book") );
Scan
メソッドでは、「遅延ロード」された IEnumerable
コレクションが返ります。最初に結果が 1 ページのみ返され、必要に応じて、さらに次ページを要求するサービス呼び出しが行われます。一致するすべての項目は、IEnumerable
を反復的に処理するだけで取得できます。
パフォーマンス上の理由から、テーブルについてはスキャンを避け、クエリを行うようにしてください。
注記
このオペレーションをバックグラウンドで実行するには、ScanAsync
メソッドを使用します。
ToDocument
クラスインスタンスから、Document
ドキュメントモデルクラスのインスタンスが返されます。
これは、オブジェクト永続性モデルと合わせてドキュメントモデルクラスを使用してデータオペレーションを行う場合に役立ちます。AWS SDK for .NET で使用されるドキュメントモデルクラスの詳細については、「.NET ドキュメントモデル」を参照してください。
クライアント側のクラスが Forum
サンプルテーブルにマッピングされているとします。その場合は次の C# サンプルコードに示すように、DynamoDBContext
を使用して、Document
テーブルから項目を Forum
オブジェクトとして取得することができます。
例
DynamoDBContext context = new DynamoDBContext(client); Forum forum101 = context.Load<Forum>(101); // Retrieve a forum by primary key. Document doc = context.ToDocument<Forum>(forum101);
DynamoDBContext でのオプションパラメータの指定
オブジェクト永続性モデルを使用する場合は、DynamoDBContext
に次のオプションパラメータを指定できます。
-
ConsistentRead
-Load
、Query
、またはScan
オペレーションを使用してデータを取得する場合、このオプションパラメータを追加して、データの最新の値をリクエストすることができます。 -
IgnoreNullValues
-このパラメータにより、Save
オペレーション時に属性の null 値を無視するようにDynamoDBContext
に指示できます。このパラメータが false の場合 (または設定されていない場合)、null 値は、特定の属性を削除するディレクティブと見なされます。 -
SkipVersionCheck
–このパラメータは、項目の保存または削除を実行する際、バージョンの比較を行わないようにDynamoDBContext
に指示します。バージョニングの詳細については、「DynamoDB で AWS SDK for .NET のオブジェクト永続性モデルを使用した、バージョン番号による楽観的ロック」を参照してください。 -
TableNamePrefix
-すべてのテーブル名に特定の文字列をプレフィックスします。このパラメータが null の場合(または設定されていない場合)、プレフィックスは使用されません。
次の C# サンプルコードでは、前述のオプションパラメータのうち 2 つを指定して、新しい DynamoDBContext
を作成します。
例
AmazonDynamoDBClient client = new AmazonDynamoDBClient(); ... DynamoDBContext context = new DynamoDBContext(client, new DynamoDBContextConfig { ConsistentRead = true, SkipVersionCheck = true});
DynamoDBContext
では、このコンテキストを使用して送信した各リクエストに、これらのオプションパラメータが含められます。
次の C# サンプルコードに示すように、これらのパラメータを DynamoDBContext
レベルで設定する代わりに、DynamoDBContext
を使用して実行するオペレーションに対して個別に指定することもできます。この例では特定の書籍項目がロードされています。Load
の DynamoDBContext
メソッドでは、前述のオプションパラメータを指定します。
例
AmazonDynamoDBClient client = new AmazonDynamoDBClient(); ... DynamoDBContext context = new DynamoDBContext(client); Book bookItem = context.Load<Book>(productId,new DynamoDBContextConfig{ ConsistentRead = true, SkipVersionCheck = true });
この場合 DynamoDBContext
には、Get
リクエストを送信する場合のみ、これらのパラメータが含まれます。