全部产品
表格存储

多行数据操作

更新时间:2017-09-08 18:54:23   分享:   

表格存储的 SDK 提供了 BatchGetRow、BatchWriteRow、GetRange 和 GetByIterator 等多行操作的接口。

批量读(BatchGetRow)

批量读取一个或多个表中的若干行数据。

BatchGetRow 操作可视为多个 GetRow 操作的集合,各个操作独立执行,独立返回结果,独立计算服务能力单元。

与执行大量的 GetRow 操作相比,使用 BatchGetRow 操作可以有效减少请求的响应时间,提高数据的读取速率。

接口

  1. /**
  2. * 批量读取一个或多个表中的若干行数据。
  3. */
  4. batchGetRow(params, callback)

示例

批量一次读多个表、多行,单行出错时进行重试。

  1. var client = require('./client');
  2. var TableStore = require('../index.js');
  3. var Long = TableStore.Long;
  4. var params = {
  5. tables: [{
  6. tableName: 'sampleTable',
  7. primaryKey: [
  8. [{ 'gid': Long.fromNumber(20013) }, { 'uid': Long.fromNumber(20013) }],
  9. [{ 'gid': Long.fromNumber(20015) }, { 'uid': Long.fromNumber(20015) }]
  10. ],
  11. startColumn: "col2",
  12. endColumn: "col4"
  13. },
  14. {
  15. tableName: 'notExistTable',
  16. primaryKey: [
  17. [{ 'gid': Long.fromNumber(10001) }, { 'uid': Long.fromNumber(10001) }]
  18. ]
  19. }
  20. ],
  21. };
  22. var maxRetryTimes = 3;
  23. var retryCount = 0;
  24. function batchGetRow(params) {
  25. client.batchGetRow(params, function (err, data) {
  26. if (err) {
  27. console.log('error:', err);
  28. return;
  29. }
  30. var isAllSuccess = true;
  31. var retryRequest = { tables: [] };
  32. for (var i = 0; i < data.tables.length; i++) {
  33. var faildRequest = { tableName: data.tables[i][0].tableName, primaryKey: [] };
  34. for (var j = 0; j < data.tables[i].length; j++) {
  35. if (!data.tables[i][j].isOk && null != data.tables[i][j].primaryKey) {
  36. isAllSuccess = false;
  37. var pks = [];
  38. for (var k in data.tables[i][j].primaryKey) {
  39. var name = data.tables[i][j].primaryKey[k].name;
  40. var value = data.tables[i][j].primaryKey[k].value;
  41. var kp = {};
  42. kp[name] = value;
  43. pks.push(kp);
  44. }
  45. faildRequest.primaryKey.push(pks);
  46. } else {
  47. // get success data
  48. }
  49. }
  50. if (faildRequest.primaryKey.length > 0) {
  51. retryRequest.tables.push(faildRequest);
  52. }
  53. }
  54. if (!isAllSuccess && retryCount++ < maxRetryTimes) {
  55. batchGetRow(retryRequest);
  56. }
  57. console.log('success:', data);
  58. });
  59. }
  60. batchGetRow(params, maxRetryTimes);

说明:

  • 批量读也支持通过条件语句过滤。
  • 详细代码可在 BatchGetRow@GitHub 获取。

批量写(BatchWriteRow)

批量插入、修改或删除一个或多个表中的若干行数据。

BatchWriteRow 操作可视为多个 PutRow、UpdateRow、DeleteRow 操作的集合,各个操作独立执行,独立返回结果,独立计算服务能力单元。

接口

  1. /**
  2. * 批量修改行
  3. */
  4. batchWriteRow(params, callback)

示例

批量写入数据。

  1. var client = require('./client');
  2. var TableStore = require('../index.js');
  3. var Long = TableStore.Long;
  4. var params = {
  5. tables: [{
  6. tableName: 'sampleTable',
  7. rows: [{
  8. type: 'PUT',
  9. condition: new TableStore.Condition(TableStore.RowExistenceExpectation.IGNORE, null),
  10. primaryKey: [{ 'gid': Long.fromNumber(8) }, { 'uid': Long.fromNumber(80) }],
  11. attributeColumns: [{ 'attrCol1': 'test1' }, { 'attrCol2': 'test2' }],
  12. returnContent: { returnType: TableStore.ReturnType.Primarykey }
  13. }],
  14. }],
  15. };
  16. client.batchWriteRow(params, function (err, data) {
  17. if (err) {
  18. console.log('error:', err);
  19. return;
  20. }
  21. console.log('success:', data);
  22. });

说明:

范围读(GetRange)

读取指定主键范围内的数据。

接口

  1. /**
  2. * 读取指定主键范围内的数据。
  3. */
  4. getRange(params, callback)

示例

按照范围读取。

  1. var Long = TableStore.Long;
  2. var client = require('./client');
  3. var params = {
  4. tableName: "sampleTable",
  5. direction: TableStore.Direction.FORWARD,
  6. inclusiveStartPrimaryKey: [{ "gid": TableStore.INF_MIN }, { "uid": TableStore.INF_MIN }],
  7. exclusiveEndPrimaryKey: [{ "gid": TableStore.INF_MAX }, { "uid": TableStore.INF_MAX }],
  8. limit: 50
  9. };
  10. client.getRange(params, function (err, data) {
  11. if (err) {
  12. console.log('error:', err);
  13. return;
  14. }
  15. //如果data.next_start_primary_key不为空,说明需要继续读取
  16. if (data.next_start_primary_key) {
  17. }
  18. console.log('success:', data);
  19. });

说明:

  • 按范围读也支持通过条件语句过滤。
  • 按范围读需要注意数据可能会分页。
  • 详细代码可在 GetRange@GitHub 获取。
本文导读目录
本文导读目录
以上内容是否对您有帮助?