Table Store SDK には、BatchGetRow、BatchWriteRow、GetRange および GetByIterator の複数行操作 API が用意されています。

BatchGetRow

1つ 以上のテーブルから複数のデータ行をバッチで読み取ります。

BatchGetRow 操作は、基本的に複数の GetRow 操作のセットです。 各操作が実行され、結果が返され、容量ユニットが個別に消費されます。

多数の GetRow 操作の実行と比較して、BatchGetRow 操作はリクエストの応答時間を効率的に短縮し、データ読み取り速度を向上させます。

API

  /**
   *   1つ以上のテーブルからバッチでいくつかのデータ行を読みます。
   */
  batchGetRow(params, callback)
			

複数のテーブルと複数のデータ行をまとめて読み取り、単一行にエラーが発生した場合は操作を再試行します。

var client = require('./client');
var TableStore = require('../index.js');
var Long = TableStore.Long;

var params = {
    tables: [{
        tableName: 'sampleTable',
        primaryKey: [
            [{ 'gid': Long.fromNumber(20013) }, { 'uid': Long.fromNumber(20013) }],
            [{ 'gid': Long.fromNumber(20015) }, { 'uid': Long.fromNumber(20015) }]
        ],
        startColumn: "col2",
        endColumn: "col4"
    },
    {
        tableName: 'notExistTable',
        primaryKey: [
            [{ 'gid': Long.fromNumber(10001) }, { 'uid': Long.fromNumber(10001) }]
        ]
    }
    ],
};

var maxRetryTimes = 3;
var retryCount = 0;

function batchGetRow(params) {
    client.batchGetRow(params, function (err, data) {
        if (err) {
            console.log('error:', err);
            return;
        }

        var isAllSuccess = true;
        var retryRequest = { tables: [] };
        for (var i = 0; i < data.tables.length; i++) {
            var faildRequest = { tableName: data.tables[i][0].tableName, primaryKey: [] };

            for (var j = 0; j < data.tables[i].length; j++) {
                if (! data.tables[i][j].isOk && null ! = data.tables[i][j].primaryKey) {
                    isAllSuccess = false;
                    var pks = [];
                    for (var k in data.tables[i][j].primaryKey) {
                        var name = data.tables[i][j].primaryKey[k].name;
                        var value = data.tables[i][j].primaryKey[k].value;
                        var kp = {};
                        kp[name] = value;
                        pks.push(kp);
                    }
                    faildRequest.primaryKey.push(pks);

                } else {
                    // get success data
                }
            }

            if (faildRequest.primaryKey.length > 0) {
                retryRequest.tables.push(faildRequest);
            }
        }

        if (! isAllSuccess && retryCount++ < maxRetryTimes) {
            batchGetRow(retryRequest);
        }

        console.log('success:', data);
    });
}

batchGetRow(params, maxRetryTimes);

			
  • BatchGetRow は、条件付きステートメントを使用したフィルタリングをサポートしています。
  • 完全なサンプルコードは、『BatchGetRow@GitHub』をご参照ください。

BatchWriteRow

1 つ以上のテーブル内の複数のデータ行をまとめて挿入、変更、または削除します。

BatchWriteRow 操作は、基本的に複数の PutRow、UpdateRow および DeleteRow 操作のセットです。 各操作が実行され、結果が返され、容量ユニットが個別に消費されます。

API

  /**
   * データ行をまとめて変更します。
   */
  batchWriteRow(params, callback)
			

データ行をまとめて書き込みます。

var client = require('./client');
var TableStore = require('../index.js');
var Long = TableStore.Long;

var params = {
    tables: [{
        tableName: 'sampleTable',
        rows: [{
            type: 'PUT',
            condition: new TableStore.Condition(TableStore.RowExistenceExpectation.IGNORE, null),
            primaryKey: [{ 'gid': Long.fromNumber(8) }, { 'uid': Long.fromNumber(80) }],
            attributeColumns: [{ 'attrCol1': 'test1' }, { 'attrCol2': 'test2' }],
            returnContent: { returnType: TableStore.ReturnType.Primarykey }
        }],
    }],
};

client.batchWriteRow(params, function (err, data) {

    if (err) {
        console.log('error:', err);
        return;
    }

    console.log('success:', data);
});

			
  • BatchWriteRow は、条件文を使用したフィルタリングをサポートしています。
  • 完全なサンプルコードは、『BatchWriteRow@GitHub』をご参照ください。

GetRange

指定されたプライマリキー範囲内のデータを読み取ります。

API

  /**
   * 指定されたプライマリキー範囲内のデータを読み取ります。
   */
  getRange(params, callback)
			

指定範囲内のデータを読み込みます。

var Long = TableStore.Long;
var client = require('./client');

var params = {
  tableName: "sampleTable",
  direction: TableStore.Direction.FORWARD,
  inclusiveStartPrimaryKey: [{ "gid": TableStore.INF_MIN }, { "uid": TableStore.INF_MIN }],
  exclusiveEndPrimaryKey: [{ "gid": TableStore.INF_MAX }, { "uid": TableStore.INF_MAX }],
  limit: 50
};

client.getRange(params, function (err, data) {
  if (err) {
    console.log('error:', err);
    return;
  }

  //If the value of data.next_start_primary_key is not empty, continue to read the data
  if (data.next_start_primary_key) {

  }

  console.log('success:', data);
});

			
  • GetRange は、条件文を使用したフィルタリングをサポートしています。
  • GetRange 操作を実行すると、データがページングされる可能性があることにご注意ください。
  • 完全なサンプルコードは、『GetRange@GitHub』をご参照ください。