Todos los productos
Search
Centro de documentos

Tablestore:Uso de contadores atómicos

Última actualización: Sep 03, 2026

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)

string

Nombre de la tabla.

PrimaryKey (obligatorio)

*PrimaryKey

Clave primaria completa de la fila destino.

Columns (obligatorio)

[]ColumnToUpdate

Operaciones de columnas de atributo. Llame a IncrementColumn para agregar una operación de contador atómico. Un incremento positivo aumenta la columna INTEGER; uno negativo la disminuye. Si la columna no existe, el valor inicial es 0.

Condition (obligatorio)

*RowCondition

Condición de actualización. Para más información, consulte Use conditional updates.

ReturnType (opcional)

ReturnType

Tipo de retorno. Al llamar a SetReturnIncrementValue, este parámetro se establece en ReturnType_RT_AFTER_MODIFY.

ColumnNamesToReturn (opcional)

[]string

Columnas de contador atómico cuyos valores actualizados se devuelven. Llame a AppendIncrementColumnToReturn para agregar una columna.

TransactionId (opcional)

*string

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

Columns

[]*AttributeColumn

Cuando se especifica ReturnType_RT_AFTER_MODIFY, este campo contiene los valores actualizados de las columnas indicadas mediante AppendIncrementColumnToReturn.

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.

Importante

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.