Utilice el Tablestore SDK for Go para incrementar o disminuir de forma atómica una columna de atributo INTEGER por fila y obtener el valor actualizado en la misma solicitud.
Requisitos previos
Instale Tablestore SDK for Go e inicialice el cliente.
Descripción
Llame a IncrementColumn para ejecutar una operación de contador atómico en una columna de atributo INTEGER. Un valor positivo incrementa la columna; uno negativo la disminuye. El servidor garantiza la atomicidad por fila y escribe una nueva versión de los datos. Para devolver el valor actualizado en la misma solicitud, llame a AppendIncrementColumnToReturn para especificar la columna y a SetReturnIncrementValue para establecer el tipo de retorno.
func (rowchange *UpdateRowChange) IncrementColumn(columnName string, value int64)
func (rowchange *UpdateRowChange) AppendIncrementColumnToReturn(name string)
func (rowchange *UpdateRowChange) SetReturnIncrementValue()
El ejemplo a continuación incrementa en 10 la columna score de row1 en la tabla example_table y devuelve el valor actualizado.
primaryKey := &tablestore.PrimaryKey{}
primaryKey.AddPrimaryKeyColumn("id", "row1")
change := &tablestore.UpdateRowChange{
TableName: "example_table",
PrimaryKey: primaryKey,
}
change.IncrementColumn("score", int64(10))
change.SetCondition(tablestore.RowExistenceExpectation_EXPECT_EXIST)
change.AppendIncrementColumnToReturn("score")
change.SetReturnIncrementValue()
response, err := client.UpdateRow(&tablestore.UpdateRowRequest{UpdateRowChange: change})
if err != nil {
log.Fatal(err)
}
fmt.Println(response.Columns[0].Value)
Parámetros
UpdateRowChange contiene los parámetros a continuación relacionados con los contadores atómicos.
|
Nombre |
Tipo |
Descripción |
|
TableName (obligatorio) |
|
Nombre de la tabla. |
|
PrimaryKey (obligatorio) |
|
Clave primaria completa de la fila destino. |
|
Columns (obligatorio) |
|
Operaciones de columnas de atributo. Llame a |
|
Condition (obligatorio) |
|
Condición de actualización. Para más información, consulte Use conditional updates. |
|
ReturnType (opcional) |
|
Tipo de retorno. Al llamar a |
|
ColumnNamesToReturn (opcional) |
|
Columnas de contador atómico cuyos valores actualizados se devuelven. Llame a |
|
TransactionId (opcional) |
|
ID de transacción local. Especifique este parámetro solo para operaciones de contador atómico dentro de una transacción local. |
Respuesta
UpdateRowResponse contiene el campo a continuación relacionado con los contadores atómicos.
|
Campo |
Tipo |
Descripción |
|
|
|
Cuando se especifica |
Límites
Solo se admiten columnas de atributo INTEGER. Si la columna destino no existe, el valor inicial es 0. Si la columna existe pero no es de tipo INTEGER, se devuelve un error de parámetro.
El incremento puede ser positivo o negativo, pero el resultado no debe desbordarse.
Un contador atómico opera únicamente sobre la versión más reciente y no admite una marca de tiempo específica. La operación escribe una nueva versión.
En la misma solicitud, no se pueden ejecutar una operación de contador atómico y otra operación, como una sobrescritura o eliminación, en la misma columna.
En una solicitud
BatchWriteRow, una fila que contenga una operación de contador atómico solo puede aparecer una vez.
Un tiempo de espera de red o un error del sistema puede provocar que el cliente reintente y ejecute una operación de contador atómico más de una vez. Si necesita controlar con precisión el valor final de la columna, utilice conditional updates para implementar un bloqueo optimista.