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

批量读(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")
    }
    					

    详细代码请参见BatchGetRow@GitHub

批量写(BatchWriteRow)

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

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

  • 接口
        // 对多张表中的多行数据进行增加、删除或者更改操作。
        //
        // @param BatchWriteRowRequest             执行BatchWriteRow操作所需参数的封装。
        // @return  BatchWriteRowResponse          BatchWriteRow操作的响应内容。
        BatchWriteRow(request *BatchWriteRowRequest) (*BatchWriteRowResponse,error)
    					
  • 示例

    批量写入100行数据。

    说明 批量写也支持通过条件语句过滤。
        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")
        }
    					

    详细代码请参见BatchWriteRow@GitHub

范围读(GetRange)

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

  • 接口
        // 从表中查询一个范围内的多行数据。
        //
        // @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)
            }
            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)
            }
            fmt.Println("continue to query rows")
        }
        fmt.Println("putrow finished")

    详细代码请参见GetRange@GitHub