表格存储的 SDK 提供了 BatchGetRow、BatchWriteRow、GetRange 和 GetByIterator 等多行操作的接口。
批量读(BatchGetRow)
批量读取一个或多个表中的若干行数据。
BatchGetRow 操作可视为多个 GetRow 操作的集合,各个操作独立执行,独立返回结果,独立计算服务能力单元。
与执行大量的 GetRow 操作相比,使用 BatchGetRow 操作可以有效减少请求的响应时间,提高数据的读取速率。
接口//返回表(Table)中的多行数据。
//
// @param BatchGetRowRequest 执行BatchGetRow操作所需参数的封装。
// @return BatchGetRowResponse BatchGetRow操作的响应内容。
BatchGetRow(request *BatchGetRowRequest) (*BatchGetRowResponse, error)
示例
批量一次读 10 行。
batchGetReq := &tablestore.BatchGetRowRequest{}
mqCriteria := &tablestore.MultiRowQueryCriteria{}
for i := 0; i < 10; i++ {
pkToGet := new(tablestore.PrimaryKey)
pkToGet.AddPrimaryKeyColumn("pk1", "pk1value1")
pkToGet.AddPrimaryKeyColumn("pk2", int64(i))
pkToGet.AddPrimaryKeyColumn("pk3", []byte("pk3"))
mqCriteria.AddRow(pkToGet)
mqCriteria.MaxVersion = 1
}
mqCriteria.TableName = tableName
batchGetReq.MultiRowQueryCriteria = append(batchGetReq.MultiRowQueryCriteria, mqCriteria)
batchGetResponse, err := client.BatchGetRow(batchGetReq)
if err != nil {
fmt.Println("batachget failed with error:", err)
} else {
fmt.Println("batchget finished")
}
[backcolor=transparent]说明:
- 批量读也支持通过条件语句过滤。
- 详细代码可在 BatchGetRow@GitHub 获取。
// 对多张表(Table)中的多行数据进行增加、删除或者更改操作。
//
// @param BatchWriteRowRequest 执行BatchWriteRow操作所需参数的封装。
// @return BatchWriteRowResponse BatchWriteRow操作的响应内容。
BatchWriteRow(request *BatchWriteRowRequest) (*BatchWriteRowResponse,error)
batchWriteReq := &tablestore.BatchWriteRowRequest{}
for i := 0; i < 100; i++ {
putRowChange := new(tablestore.PutRowChange)
putRowChange.TableName = tableName
putPk := new(tablestore.PrimaryKey)
putPk.AddPrimaryKeyColumn("pk1", "pk1value1")
putPk.AddPrimaryKeyColumn("pk2", int64(i))
putPk.AddPrimaryKeyColumn("pk3", []byte("pk3"))
putRowChange.PrimaryKey = putPk
putRowChange.AddColumn("col1", "fixvalue")
putRowChange.SetCondition(tablestore.RowExistenceExpectation_IGNORE)
batchWriteReq.AddRowChange(putRowChange)
}
response, err := client.BatchWriteRow(batchWriteReq)
if err != nil {
fmt.Println("batch request failed with:", response)
} else {
fmt.Println("batch write row finished")
}
[backcolor=transparent]说明:
- 批量写也支持条件语句。
- 详细代码可在 BatchWriteRow@GitHub 获取。
// 从表(Table)中查询一个范围内的多行数据。。
//
// @param GetRangeRequest 执行GetRange操作所需参数的封装。
// @return GetRangeResponse GetRange操作的响应内容。
GetRange(request *GetRangeRequest) (*GetRangeResponse,error)
getRangeRequest := &tablestore.GetRangeRequest{}
rangeRowQueryCriteria := &tablestore.RangeRowQueryCriteria{}
rangeRowQueryCriteria.TableName = tableName
startPK := new(tablestore.PrimaryKey)
startPK.AddPrimaryKeyColumnWithMinValue("pk1")
startPK.AddPrimaryKeyColumnWithMinValue("pk2")
startPK.AddPrimaryKeyColumnWithMinValue("pk3")
endPK := new(tablestore.PrimaryKey)
endPK.AddPrimaryKeyColumnWithMaxValue("pk1")
endPK.AddPrimaryKeyColumnWithMaxValue("pk2")
endPK.AddPrimaryKeyColumnWithMaxValue("pk3")
rangeRowQueryCriteria.StartPrimaryKey = startPK
rangeRowQueryCriteria.EndPrimaryKey = endPK
rangeRowQueryCriteria.Direction = tablestore.FORWARD
rangeRowQueryCriteria.MaxVersion = 1
rangeRowQueryCriteria.Limit = 10
getRangeRequest.RangeRowQueryCriteria = rangeRowQueryCriteria
getRangeResp, err := client.GetRange(getRangeRequest)
fmt.Println("get range result is " ,getRangeResp)
for ; ; {
if err != nil {
fmt.Println("get range failed with error:", err)
}
if (len(getRangeResp.Rows) > 0) {
for _, row := range getRangeResp.Rows {
fmt.Println("range get row with key", row.PrimaryKey.PrimaryKeys[0].Value, row.PrimaryKey.PrimaryKeys[1].Value, row.PrimaryKey.PrimaryKeys[2].Value)
}
if getRangeResp.NextStartPrimaryKey == nil {
break
} else {
fmt.Println("next pk is :", getRangeResp.NextStartPrimaryKey.PrimaryKeys[0].Value, getRangeResp.NextStartPrimaryKey.PrimaryKeys[1].Value, getRangeResp.NextStartPrimaryKey.PrimaryKeys[2].Value)
getRangeRequest.RangeRowQueryCriteria.StartPrimaryKey = getRangeResp.NextStartPrimaryKey
getRangeResp, err = client.GetRange(getRangeRequest)
}
} else {
break
}
fmt.Println("continue to query rows")
}
fmt.Println("putrow finished")
[backcolor=transparent]说明:
- 按范围读也支持通过条件语句过滤。
- 按范围读需要注意数据可能会分页。
- 详细代码可在 GetRange@GitHub 获取。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。