表格存储的 SDK 提供了 BatchGetRow、BatchWriteRow、GetRange 和 GetByIterator 等多行操作的接口。
批量读(BatchGetRow)
批量读取一个或多个表中的若干行数据。
BatchGetRow 操作可视为多个 GetRow 操作的集合,各个操作独立执行,独立返回结果,独立计算服务能力单元。
与执行大量的 GetRow 操作相比,使用 BatchGetRow 操作可以有效减少请求的响应时间,提高数据的读取速率。
接口/**
* 批量读取一个或多个表中的若干行数据。
*/
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[0].tableName, primaryKey: [] };
for (var j = 0; j < data.tables.length; j++) {
if (!data.tables[j].isOk && null != data.tables[j].primaryKey) {
isAllSuccess = false;
var pks = [];
for (var k in data.tables[j].primaryKey) {
var name = data.tables[j].primaryKey[k].name;
var value = data.tables[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);
[backcolor=transparent]说明:
- 批量读也支持通过条件语句过滤。
- 详细代码可在 BatchGetRow@GitHub 获取。
/**
* 批量修改行
*/
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);
});
[backcolor=transparent]说明:
- 批量写也支持条件语句。
- 详细代码可在 BatchWriteRow@GitHub 获取。
/**
* 读取指定主键范围内的数据。
*/
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;
}
//如果data.next_start_primary_key不为空,说明需要继续读取
if (data.next_start_primary_key) {
}
console.log('success:', data);
});
[backcolor=transparent]说明:
- 按范围读也支持通过条件语句过滤。
- 按范围读需要注意数据可能会分页。
- 详细代码可在 GetRange@GitHub 获取。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。