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』をご参照ください。