Table Store SDK には、BatchGetRow、BatchWriteRow、GetRange および GetRangeIterator の複数行操作インターフェイスがあります。
BatchGetRow
バッチは、1 つ以上のテーブルから複数のデータ行を読み取ります。 これは基本的に複数の GetRow 操作のセットです。 各操作は実行され、結果を返し、容量ユニットを個別に消費します。
多数の GetRow 操作の実行と比較して、BatchGetRow 操作はリクエストの応答時間を短縮し、データ読み取り速度を上げます。
API
/// <summary>
/// <para> BatchGetRow オペレーションは、基本的に複数の GetRow オペレーションのセットです。</para>
/// <para> 各操作は実行され、結果を返し、容量ユニットを個別に消費します。 </para>
/// 多数の GetRow オペレーションの実行と比較して、BatchGetRow オペレーションはリクエストの応答時間を短縮し、データ読み取り速度を上げます。
/// </summary>
/// <param name="request"> リクエストインスタンス </param>
/// <returns> レスポンスインスタンス </returns>
public BatchGetRowResponse BatchGetRow(BatchGetRowRequest request);
/// <summary>
/// BatchGetRow の非同期形式です。
/// </summary>
public Task<BatchGetRowResponse> BatchGetRowAsync(BatchGetRowRequest request);
例
10 データ行をバッチ読み取りします。
// 10 行のプライマリキー値を含む、バッチ読み取り要求オブジェクトを作成します。
List<PrimaryKey> primaryKeys = new List<PrimaryKey>();
for (int i = 0; i < 10; i++)
{
PrimaryKey primaryKey = new PrimaryKey();
primaryKey.Add("pk0", new ColumnValue(i));
primaryKey.Add("pk1", new ColumnValue("abc"));
primaryKeys.Add(primaryKey);
}
try
{
BatchGetRowRequest request = new BatchGetRowRequest();
request.Add(TableName, primaryKeys);
// BatchGetRow を呼び出して 10 データ行を読み取ります。
var response = otsClient.BatchGetRow(request);
var tableRows = response.RowDataGroupByTable;
var rows = tableRows[TableName];
// 行のデータを入力します。 入力データは省略しています。 詳しくは、GitHub のリンクをご参照ください。
// BatchGetRow は部分的に失敗する可能性があります。 したがって、各行の状況を確認する必要があります。 詳しくは、GitHub のリンクをご参照ください。
}
catch (Exception ex)
{
// 例外がスローされてエラーメッセージが表示された場合、実行は失敗します。
Console.WriteLine("Batch get row failed, exception:{0}", ex.Message);
}
コードの詳細は、『BatchGetRow@GitHub』をご参照ください。
BatchWriteRow
BatchWriteRow は、1 つ以上のテーブル内の複数のデータ行を挿入、変更、または削除します。 これは、複数の PutRow、UpdateRow および DeleteRow 操作のセットです。 各操作は実行され、独立して結果を戻し、容量ユニットを独立して消費します。
API
/// <summary>
/// <para>Batch inserts, modifies, or deletes several data rows in one or more tables. </para>
/// <para> BatchWriteRow オペレーションは、基本的に複数の PutRow、UpdateRow、DeleteRow オペレーションのセットです。 各操作は実行され、結果を戻し、容量単位を個別に消費します。 </para>
/// <para> 多数の書き込み操作の実行と比較して、BatchWriteRow 操作はリクエスト応答時間を短縮し、データ書き込み速度を増加させます。 </para>
/// </summary>
/// <param name="request">リクエストインスタンス</param>
/// <returns>レスポンスインスタンス</returns>
public BatchWriteRowResponse BatchWriteRow(BatchWriteRowRequest request);
/// <summary>
/// BatchWriteRow の非同期行です。
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
public Task<BatchWriteRowResponse> BatchWriteRowAsync(BatchWriteRowRequest request);
例
100データ行を一括インポートします。
// 100 行のプライマリキー値を含むバッチインポート要求オブジェクトを作成します。
var request = new BatchWriteRowRequest();
var rowChanges = new RowChanges();
for (int i = 0; i < 100; i++)
{
PrimaryKey primaryKey = new PrimaryKey();
primaryKey.Add("pk0", new ColumnValue(i));
primaryKey.Add("pk1", new ColumnValue("abc"));
// 100 行の属性列を定義します。
UpdateOfAttribute attribute = new UpdateOfAttribute();
attribute.AddAttributeColumnToPut("col0", new ColumnValue(0));
attribute.AddAttributeColumnToPut("col1", new ColumnValue("a"));
attribute.AddAttributeColumnToPut("col2", new ColumnValue(true));
rowChanges.AddUpdate(new Condition(RowExistenceExpectation.IGNORE), primaryKey, attribute);
}
request.Add(TableName, rowChanges);
try
{
// Call BatchWriteRow
var response = otsClient.BatchWriteRow(request);
var tableRows = response.TableRespones;
var rows = tableRows[TableName];
// BatchGetRow の部分的な操作が失敗する可能性があります。したがって、各行の状況を確認する必要があります。 詳しくは、GitHub のリンクをご参照ください。
}
} catch (Exception e) {
{
// 例外がスローされてエラーメッセージが表示された場合、実行は失敗します。
Console.WriteLine("Batch put row failed, exception:{0}", ex.Message);
}
コードの詳細は、『BatchWriteRow@GitHub』をご参照ください。
GetRange
指定したプライマリキー範囲のデータを読み込みます。
API
/// <summary>
/// 指定された範囲の複数の行からデータを取得します。
/// </summary>
/// <param name="request">リクエストインスタンス</param>
/// <returns>レスポンスインスタンス</returns>
public GetRangeResponse GetRange(GetRangeRequest request);
/// <summary>
/// GetRangeの非同期形式です。
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
public Task<GetRangeResponse> GetRangeAsync(GetRangeRequest request);
例
指定された範囲のデータを読み込みます。
// (0, INF_MIN) から (100, INF_MAX) までの範囲のすべての行を読み込みます。
var inclusiveStartPrimaryKey = new PrimaryKey();
inclusiveStartPrimaryKey.Add("pk0", new ColumnValue(0));
inclusiveStartPrimaryKey.Add("pk1", ColumnValue.INF_MIN);
var exclusiveEndPrimaryKey = new PrimaryKey();
exclusiveEndPrimaryKey.Add("pk0", new ColumnValue(100));
exclusiveEndPrimaryKey.Add("pk1", ColumnValue.INF_MAX);
try
{
// 指定された範囲の読み込み要求オブジェクトを作成します。
var request = new GetRangeRequest(TableName, GetRangeDirection.Forward,
inclusiveStartPrimaryKey, exclusiveEndPrimaryKey);
var response = otsClient.GetRange(request);
// 部分的なデータしか返されない場合、読み取り操作を続行します。
var rows = response.RowDataList;
var nextStartPrimaryKey = response.NextPrimaryKey;
while (nextStartPrimaryKey ! = null) {
{
request = new GetRangeRequest(TableName, GetRangeDirection.Forward,
nextStartPrimaryKey, exclusiveEndPrimaryKey);
response = otsClient.GetRange(request);
nextStartPrimaryKey = response.NextPrimaryKey;
foreach (RowDataFromGetRange row in response.RowDataList)
{
rows.Add(row);
}
}
// 行のデータを出力します。 出力データはここでは省略されています。 詳しくは、GitHub のリンクを参照してください。
// 例外がスローされなければ、実行は成功します。
Console.WriteLine("Get range succeeded");
}
} catch (Exception e) {
{
// 例外がスローされてエラーメッセージが表示されると、実行は失敗します。
Console.WriteLine("Get range failed, exception:{0}", ex.Message);
}
コードの詳細は、『GetRange@GitHub』をご参照ください。
GetRangeIterator
指定された範囲の反復子を取得します。
API
/// <summary>
/// 指定された範囲の複数の行からデータを取得します。 システムは、各データ行の反復処理に使用される反復子を返します。
/// </summary>
/// <param name="request"><see cref="GetIteratorRequest"/></param>
/// <returns> 反復子を戻します。 <see cref="RowDataFromGetRange"/> </returns>
public IEnumerable<RowDataFromGetRange> GetRangeIterator(GetIteratorRequest request);
例
反復子を取得します。
// (0, "a") から (1000, "xyz") の範囲のすべての行を読み込みます。
PrimaryKey inclusiveStartPrimaryKey = new PrimaryKey();
inclusiveStartPrimaryKey.Add("pk0", new ColumnValue(0));
inclusiveStartPrimaryKey.Add("pk1", new ColumnValue("a"));
PrimaryKey exclusiveEndPrimaryKey = new PrimaryKey();
exclusiveEndPrimaryKey.Add("pk0", new ColumnValue(1000));
exclusiveEndPrimaryKey.Add("pk1", new ColumnValue("xyz"));
// 反復によって消費された CU を記録するために CapacityUnit を構築します。
var cu = new CapacityUnit(0, 0);
try
{
// GetIteratorRequest を構築します。 フィルタ基準がサポートされています。
var request = new GetIteratorRequest(TableName, GetRangeDirection.Forward, inclusiveStartPrimaryKey,
exclusiveEndPrimaryKey, cu);
var iterator = otsClient.GetRangeIterator(request);
// 走査メソッドでデータを読み込む反復子です。
foreach (var row in iterator)
{
// Processing logic
}
Console.WriteLine("Iterate row succeeded");
}
} catch (Exception e) {
{
Console.WriteLine("Iterate row failed, exception:{0}", ex.Message);
}
コードの詳細は、『GetRangeIterator@GitHub』をご参照ください。