日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

文檔

寫入數據

更新時間:

表格存儲提供了單行插入、單行更新和批量寫入的寫入方式用于寫入數據到數據表。當要寫入數據到數據表時,您需要指定完整主鍵以及要增刪改的屬性列。在高并發應用中寫入數據時,您可以配置行存在性條件或者列條件實現按照指定條件更新數據。

如果需要了解表格存儲各場景的應用案例,請參見快速玩轉Tablestore入門與實戰

前提條件

  • 已初始化Client,詳情請參見初始化OTSClient
  • 已創建數據表并寫入數據。

插入單行數據

調用PutRow接口新寫入一行數據。如果該行已存在,則先刪除原行數據(原行的所有列以及所有版本的數據),再寫入新行數據。

接口

// @param PutRowRequest    執行PutRow操作所需參數的封裝。
// @return PutRowResponse
PutRow(request *PutRowRequest) (*PutRowResponse, error)                    

參數

參數

說明

TableName

數據表名稱。

PrimaryKey

行的主鍵。主鍵包括主鍵列名、主鍵類型和主鍵值。

重要
  • 設置的主鍵個數和類型必須和數據表的主鍵個數和類型一致。

  • 當主鍵為自增列時,只需將相應主鍵指定為自增主鍵。更多信息,請參見主鍵列自增

Columns

行的屬性列。每一項的順序是屬性名、屬性值ColumnValue、屬性類型ColumnType(可選)、時間戳(可選)。

  • 屬性名即屬性列的名稱,屬性類型即屬性列的數據類型。更多信息,請參見命名規則和數據類型

    屬性類型可以是INTEGER、STRING(UTF-8編碼字符串)、BINARY、BOOLEAN和DOUBLE五種,分別用ColumnType.INTEGERColumnType.STRINGColumnType.BINARYColumnType.BOOLEANColumnType.DOUBLE表示,其中BINARY不可省略,其他類型均可省略。

  • 時間戳即數據的版本號,可以由系統自動生成或者自定義,如果不設置此參數,則默認由系統自動生成。更多信息,請參見數據版本和生命周期

    • 當由系統自動生成數據的版本號時,系統默認將當前時間的毫秒單位時間戳(從1970-01-01 00:00:00 UTC計算起的毫秒數)作為數據的版本號。

    • 當自定義數據的版本號時,版本號需要為64位的毫秒單位時間戳且在有效版本范圍內。

Condition

使用條件更新,可以設置原行的存在性條件或者原行中某列的列值條件。更多信息,請參見條件更新

示例

以下示例用于插入一行數據。

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

更新單行數據

調用UpdateRow接口更新一行數據,可以增加和刪除一行中的屬性列,刪除屬性列指定版本的數據,或者更新已存在的屬性列的值。如果更新的行不存在,則新增一行數據。

說明

當UpdateRow請求中只包含刪除指定的列且該行不存在時,則該請求不會新增一行數據。

接口

// 更新表中的一行數據。
// @param UpdateRowRequest      執行UpdateRow操作所需參數的封裝。
// @return UpdateRowResponse    UpdateRow操作的響應內容。
UpdateRow(request *UpdateRowRequest) (*UpdateRowResponse, error)                    

參數

參數

說明

TableName

數據表名稱。

PrimaryKey

行的主鍵。主鍵包括主鍵列名、主鍵類型和主鍵值。

重要

設置的主鍵個數和類型必須和數據表的主鍵個數和類型一致。

Columns

行的屬性列。

  • 增加或更新數據時,需要設置屬性名、屬性值、屬性類型(可選)、時間戳(可選)。

    屬性名即屬性列的名稱,屬性類型即屬性列的數據類型。更多信息,請參見命名規則和數據類型

    時間戳即數據的版本號,可以由系統自動生成或者自定義,如果不設置此參數,則默認由系統自動生成。更多信息,請參見數據版本和生命周期

    • 當由系統自動生成數據的版本號時,系統默認將當前時間的毫秒單位時間戳(從1970-01-01 00:00:00 UTC計算起的毫秒數)作為數據的版本號。

    • 當自定義數據的版本號時,版本號需要為64位的毫秒單位時間戳且在有效版本范圍內。

  • 刪除屬性列特定版本的數據時,只需要設置屬性名和時間戳。

    時間戳是64位整數,單位為毫秒,表示某個特定版本的數據。

  • 刪除屬性列時,只需要設置屬性名。

    說明

    刪除一行的全部屬性列不等同于刪除該行,如果需要刪除該行,請使用DeleteRow操作。

Condition

使用條件更新,可以設置原行的存在性條件或者原行中某列的列值條件。更多信息,請參見條件更新

示例

以下示例用于更新一行數據。

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接口在一次請求中進行批量寫入操作或者一次對多張表進行寫入。

BatchWriteRow操作由多個PutRow、UpdateRow、DeleteRow子操作組成,構造子操作的過程與使用PutRow接口、UpdateRow接口和DeleteRow接口時相同。

BatchWriteRow的各個子操作獨立執行,表格存儲會分別返回各個子操作的執行結果。

注意事項

  • 由于批量寫入可能存在部分行失敗的情況,失敗行的Index及錯誤信息在返回的BatchWriteRowResponse中,但并不拋出異常。因此調用BatchWriteRow接口時,需要檢查返回值,判斷每行的狀態是否成功;如果不檢查返回值,則可能會忽略掉部分操作的失敗。

    當服務端檢查到某些操作出現參數錯誤時,BatchWriteRow接口可能會拋出參數錯誤的異常,此時該請求中所有的操作都未執行。

  • BatchWriteRow操作單次支持寫入的最大行數為200行,且所有行的數據量總和不能超過4 MB。

接口

// 對多個數據表中的多行數據進行增加、刪除或者更新操作。
// @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

常見問題

相關文檔

  • 當要在高并發應用中實現按照指定條件更新數據時,您可以通過條件更新實現。更多信息,請參見條件更新

  • 當要為在線應用提供實時統計功能時,例如統計帖子的PV(實時瀏覽量)等,您可以通過原子計數器實現。更多信息,請參見原子計數器

  • 當要進行單行寫或多行寫的原子操作,您可以通過局部事務實現。更多信息,請參見局部事務

  • 寫入數據后,即可根據需要讀取或者刪除表中數據。更多信息,請參見讀取數據刪除數據