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 は、条件文を使用したフィルタをサポートしています。

コードの詳細は、『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 は、条件文を使用したフィルタをサポートしています。

コードの詳細は、『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 は条件文を使ったフィルタをサポートしています。

コードの詳細は、『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 は条件文を使ったフィルタをサポートしています。

コードの詳細は、『GetRangeIterator@GitHub』をご参照ください。