El Tablestore SDK for Java incrementa o decrementa atómicamente una columna de atributo de tipo entero por fila y puede devolver el valor actualizado en la misma solicitud.
Requisitos previos
Instale Tablestore SDK for Java e inicialice el cliente.
Descripción
Llame a increment(Column) para actualizar atómicamente la columna de enteros especificada. Un valor positivo incrementa el contador y uno negativo lo decrementa. Tablestore garantiza la atomicidad por fila y escribe una nueva versión de los datos después de la actualización. Para obtener el valor actualizado en la misma solicitud, llame a addReturnColumn(String) y establezca returnType como RT_AFTER_MODIFY.
public UpdateRowResponse updateRow(UpdateRowRequest updateRowRequest) throws TableStoreException, ClientException
public RowUpdateChange increment(Column column)
public void addReturnColumn(String columnName)
public void setReturnType(ReturnType returnType)
En el ejemplo a continuación se incrementa en 10 la columna price de la fila con clave principal pk0 en la tabla counter_demo y se lee el valor actualizado en la misma solicitud.
PrimaryKey primaryKey = PrimaryKeyBuilder.createPrimaryKeyBuilder()
.addPrimaryKeyColumn("id", PrimaryKeyValue.fromString("pk0"))
.build();
RowUpdateChange rowUpdateChange = new RowUpdateChange("counter_demo", primaryKey);
// Increment the price column by 10 (use a negative value to decrement)
rowUpdateChange.increment(new Column("price", ColumnValue.fromLong(10)));
// Return the updated column value in the same request
rowUpdateChange.addReturnColumn("price");
rowUpdateChange.setReturnType(ReturnType.RT_AFTER_MODIFY);
UpdateRowResponse response = client.updateRow(new UpdateRowRequest(rowUpdateChange));
Row row = response.getRow();
System.out.println("Updated price: " + row.getLatestColumn("price").getValue().asLong());
Parámetros
Configuración de la solicitud
UpdateRowRequest contiene los parámetros a continuación.
|
Nombre |
Tipo |
Descripción |
|
rowChange (obligatorio) |
RowUpdateChange |
La configuración de actualización de una sola fila. |
|
transactionId (opcional) |
String |
El ID de la transacción local. Especifique este parámetro solo cuando ejecute la operación de contador atómico dentro de una transacción local. Para obtener información sobre cómo obtener y usar el ID, consulte Use local transactions. |
Configuración de actualización de fila
El parámetro rowChange de UpdateRowRequest es del tipo RowUpdateChange.
|
Nombre |
Tipo |
Descripción |
|
tableName (obligatorio) |
String |
El nombre de la tabla de datos. |
|
primaryKey (obligatorio) |
PrimaryKey |
La clave principal de la fila destino. |
|
columnsToUpdate (obligatorio) |
List<Pair<Column, Type>> |
Las columnas de atributos por actualizar. Llame a |
|
condition (opcional) |
Condition |
La configuración de actualización condicional. La operación de contador atómico se ejecuta solo si la fila cumple la condición. Para obtener información sobre cómo configurar la condición, consulte Use conditional updates. |
|
returnType (opcional) |
ReturnType |
El tipo de retorno. Valor predeterminado: |
|
returnColumnNames (opcional) |
Set<String> |
Las columnas de contador atómico cuyos valores actualizados se devuelven. Agregue nombres de columna mediante |
Columna de contador
Cada elemento agregado a UpdateRowRequest.rowChange.columnsToUpdate mediante increment() contiene un objeto Column.
|
Nombre |
Tipo |
Descripción |
|
name (obligatorio) |
String |
El nombre de la columna de atributo donde se ejecutará la operación de contador atómico. |
|
value (obligatorio) |
ColumnValue |
El incremento de tipo entero. Un valor positivo incrementa el contador y uno negativo lo decrementa. El resultado no debe desbordarse. Si la columna destino no existe, su valor inicial se considera 0. |
Respuesta
|
Nombre |
Tipo |
Descripción |
|
row |
Row |
Si se especifica |
Límites
Las operaciones de contador atómico solo admiten columnas de tipo entero. Si la columna existe pero no es de tipo entero, la operación devuelve el error
OTSParameterInvalid.Las operaciones de contador atómico se aplican únicamente a la versión más reciente y no aceptan una marca de tiempo especificada por el usuario.
En una misma solicitud de actualización, no es posible combinar una operación de contador atómico con otras operaciones en la misma columna, como sobrescritura o eliminación.
En una solicitud
BatchWriteRow, una fila con una operación de contador atómico solo puede aparecer una vez.
Las operaciones de contador atómico pueden fallar debido a tiempos de espera de red o errores del sistema. Un reintento podría aplicar el incremento dos veces, lo que dejaría el contador con un valor mayor (o menor) al previsto. Para evitar conteos duplicados, utilice conditional update para actualizar el valor según su estado actual.