Table Store SDK には、BatchGetRow、BatchWriteRow、GetRange および GetByIterator の複数行操作 API が用意されています。

BatchGetRow

1 つ以上のテーブルから複数のデータ行をバッチで読み取ります。

BatchGetRow 操作は、複数の GetRow 操作のセットと見なすことができます。 各操作が実行され、結果が返され、容量ユニットが個別に消費されます。

多数の GetRow 操作の実行と比較して、BatchGetRow 操作はリクエストの応答時間を効果的に短縮し、データ読み取り速度を向上させます。

API

    // テーブル内の複数のデータ行を返します。
    //
    // @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 は、条件付きステートメントを使用したフィルタリングをサポートしています。
  • 完全なサンプルコードは、『BatchGetRow@GitHub』をご参照ください。

BatchWriteRow

1 つ以上のテーブル内の複数のデータ行をまとめて挿入、変更、または削除します。

基本的には、複数の PutRow、UpdateRow および DeleteRow 操作のセットです。 各操作は実行され、結果は独立して返され、容量ユニットは独立して消費されます。

API

    // 複数のテーブルの複数のデータ行を追加、削除、または修正します。
    //
    // @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 supports filtering using conditional statements.
  • 完全なサンプルコードは、『BatchWriteRow@GitHub』をご参照ください。

GetRange

この API は、指定されたプライマリキー範囲内のデータを読み取ります。

API

    // テーブル内の指定された範囲内の複数のデータ行を読み込みます。
    //
    // @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")
			
  • GetRange は、条件文を使用したフィルタリングをサポートしています。
  • GetRange 操作を実行すると、データがページングされることがあります。
  • 完全なサンプルコードは、『GetRange@GitHub』をご参照ください。