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』をご参照ください。