Tablestore では、異なる操作を呼び出すことで、単一行のデータの書き込み、単一行のデータの更新、複数行のデータの同時書き込みを行うことができます。データテーブルにデータを書き込むには、完全なプライマリキー情報と、追加、削除、または変更する属性列を指定する必要があります。高並列アプリケーションにデータを書き込むには、行存在条件または列条件を設定して、指定された条件に基づいてデータを更新できます。
前提条件
OTSClient インスタンスが初期化されていること。詳細については、OTSClient インスタンスの初期化を参照してください。
データテーブルが作成され、データがデータテーブルに書き込まれていること。
単一行のデータの書き込み
API 操作
// @param PutRowRequest PutRow 操作の呼び出しに必要なパラメータをカプセル化します。
// @return PutRowResponse
PutRow(request *PutRowRequest) (*PutRowResponse, error)
パラメータ
パラメータ | 説明 |
TableName | データテーブルの名前。 |
PrimaryKey | 行に関するプライマリキー情報。プライマリキー情報には、プライマリキー列の名前、タイプ、値が含まれます。 重要
|
Columns | 行の属性列。属性列は、属性列名、属性列値 (ColumnValue)、属性列タイプ (ColumnType)、タイムスタンプの順にパラメータで指定されます。属性列タイプとタイムスタンプはオプションです。
|
Condition | PutRow 操作の呼び出しに設定できる条件。行存在条件または列値に基づく条件を設定できます。詳細については、条件付き更新の設定を参照してください。 |
例
次のサンプルコードは、単一行のデータを書き込む方法の例を示しています。
putRowRequest := new(tablestore.PutRowRequest)
putRowChange := new(tablestore.PutRowChange)
putRowChange.TableName = tableName
putPk := new(tablestore.PrimaryKey)
putPk.AddPrimaryKeyColumn("pk1", "pk1value1")
putPk.AddPrimaryKeyColumn("pk2", int64(2))
putPk.AddPrimaryKeyColumn("pk3", []byte("pk3"))
putRowChange.PrimaryKey = putPk
putRowChange.AddColumn("col1", "col1data1")
putRowChange.AddColumn("col2", int64(3))
putRowChange.AddColumn("col3", []byte("test"))
putRowChange.SetCondition(tablestore.RowExistenceExpectation_IGNORE)
putRowRequest.PutRowChange = putRowChange
_, err := client.PutRow(putRowRequest)
if err != nil {
fmt.Println("putrow failed with error:", err)
} else {
fmt.Println("putrow finished")
}
詳細なサンプルコードを表示するには、PutRow@GitHub にアクセスしてください。
単一行のデータの更新
API 操作
// テーブル内のデータ行を更新します。
// @param UpdateRowRequest UpdateRow 操作の呼び出しに必要なパラメータをカプセル化します。
// @return UpdateRowResponse UpdateRow 操作へのレスポンスの内容。
UpdateRow(request *UpdateRowRequest) (*UpdateRowResponse, error)
パラメータ
パラメータ | 説明 |
TableName | データテーブルの名前。 |
PrimaryKey | 行に関するプライマリキー情報。プライマリキー情報には、プライマリキー列の名前、タイプ、値が含まれます。 重要 指定するプライマリキー列の数とタイプは、テーブル内のプライマリキー列の実際の数とタイプと同じである必要があります。 |
Columns | 行の属性列。 |
Condition | UpdateRow 操作の呼び出しに設定できる条件。行存在条件または列値に基づく条件を設定できます。詳細については、条件付き更新の設定を参照してください。 |
例
次のサンプルコードは、単一行のデータを更新する方法の例を示しています。
updateRowRequest := new(tablestore.UpdateRowRequest)
updateRowChange := new(tablestore.UpdateRowChange)
updateRowChange.TableName = tableName
updatePk := new(tablestore.PrimaryKey)
updatePk.AddPrimaryKeyColumn("pk1", "pk1value1")
updatePk.AddPrimaryKeyColumn("pk2", int64(2))
updatePk.AddPrimaryKeyColumn("pk3", []byte("pk3"))
updateRowChange.PrimaryKey = updatePk
updateRowChange.DeleteColumn("col1")
updateRowChange.PutColumn("col2", int64(77))
updateRowChange.PutColumn("col4", "newcol3")
updateRowChange.SetCondition(tablestore.RowExistenceExpectation_EXPECT_EXIST)
updateRowRequest.UpdateRowChange = updateRowChange
_, err := client.UpdateRow(updateRowRequest)
if err != nil {
fmt.Println("update failed with error:", err)
} else {
fmt.Println("update row finished")
}
詳細なサンプルコードを表示するには、UpdateRow@GitHub にアクセスしてください。
複数行のデータの同時書き込み
使用上の注意
BatchWriteRow 操作を呼び出して複数行のデータを同時に書き込む場合、一部の行の書き込みに失敗することがあります。この場合、Tablestore は例外を返しません。Tablestore は、失敗した行のインデックスとエラーメッセージを含む BatchWriteRowResponse を返します。そのため、BatchWriteRow 操作を呼び出すときは、戻り値をチェックしてすべての行が書き込まれたかどうかを確認してください。戻り値をチェックしないと、書き込みに失敗した行が無視される可能性があります。
BatchWriteRow 操作を呼び出して、最大 200 行の最大 4 MB のデータを同時に書き込むことができます。
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@GitHub にアクセスしてください。
FAQ
関連情報
指定された条件に基づいて高並列アプリケーションのデータを更新するには、条件付き更新機能を使用できます。詳細については、条件付き更新の設定を参照してください。
さまざまなトピックのページビュー (PV) 数など、オンラインアプリケーションに関するリアルタイム統計を収集するには、アトミックカウンター機能を使用できます。詳細については、アトミックカウンターの設定を参照してください。
1 つ以上のデータ行を書き込むためのアトミック操作を実行するには、ローカルトランザクション機能を使用できます。詳細については、ローカルトランザクションの設定を参照してください。
データがテーブルに書き込まれた後、ビジネス要件に基づいてテーブル内のデータを読み取ったり削除したりできます。詳細については、データの読み取りとデータの削除を参照してください。