Si necesita implementar un contador para su aplicación en línea, utilice la función de contador atómico. Para usar esta función, establezca una columna como contador atómico y ejecute operaciones de contador atómico sobre dicha columna.
Escenarios
Los contadores atómicos son adecuados para escenarios donde se requieren operaciones de conteo rápidas. Por ejemplo, sirven para contar las vistas de página (PV) en tiempo real de diversos temas, los mensajes en ciertas aplicaciones en línea o para incrementar en 1 los valores de una columna específica.
Descripción general
Los contadores atómicos reducen la sobrecarga de rendimiento de escritura que genera la consistencia fuerte. Cuando usted envía una solicitud a un servidor para ejecutar operaciones de lectura, modificación y escritura (RMW), el servidor procesa la fila mediante un bloqueo. Para garantizar una consistencia fuerte de los datos, actualice los contadores atómicos en un servidor de base de datos; así mejorará el rendimiento de escritura.
Puede producirse un error si una operación de contador atómico enfrenta tiempos de espera de red o fallas del sistema. En ese caso, reintente la operación. Sin embargo, el contador atómico podría actualizarse dos veces, lo que generaría un valor menor o mayor al esperado. Se recomienda utilizar la función de actualización condicional para actualizar con precisión el valor del contador atómico. Para obtener más información, consulte Conditional updates.
La función de contador atómico permite recopilar estadísticas en tiempo real sobre los datos de una fila. Para implementarla, llame a la operación UpdateRow y ejecute acciones sobre los contadores atómicos, como incrementar o decrementar un valor y devolver el resultado actualizado.
Por ejemplo, cree una tabla de Tablestore para almacenar metadatos de imágenes y contar su cantidad. Cada fila de la tabla tiene un identificador de usuario. Una columna almacena los metadatos de las imágenes y otra funciona como contador atómico para registrar, en tiempo real, cuántas imágenes tienen sus metadatos guardados en esa fila.
Al llamar a la operación UpdateRow para agregar los metadatos de una imagen a una fila, el valor del contador atómico aumenta en 1.
Al llamar a la operación UpdateRow para eliminar los metadatos de una imagen de una fila, el valor del contador atómico disminuye en 1.
Llame a la operación GetRow para leer el valor del contador atómico y obtener la cantidad de imágenes cuyos metadatos están almacenados en la fila.
Esto garantiza una consistencia fuerte en la base de datos. Cuando agrega los metadatos de una imagen a una fila, el valor del contador atómico aumenta en 1 y no disminuye.
Notas de uso
Los contadores atómicos solo se pueden implementar en columnas de tipo INTEGER.
Si la columna especificada como contador atómico no existe antes de escribir los datos, su valor predeterminado es 0. Si dicha columna no es de tipo INTEGER, se produce el error OTSParameterInvalid.
Actualice un contador atómico con un número positivo o negativo, pero evite el desbordamiento de enteros. Si ocurre un desbordamiento, el sistema devuelve el error OTSParameterInvalid.
De forma predeterminada, la respuesta a una solicitud de actualización de fila no devuelve el valor del contador atómico. No obstante, puede especificar que se devuelva el valor actualizado.
No es posible definir una columna como contador atómico y actualizarla en una misma solicitud. Por ejemplo, si establece la columna A como contador atómico, no puede ejecutar otras operaciones sobre ella al mismo tiempo, como sobrescrituras o eliminaciones.
Mediante una solicitud BatchWriteRow se ejecutan varias operaciones de actualización sobre una misma fila. Sin embargo, si aplica una operación de contador atómico a una fila, solo podrá ejecutar una operación de actualización sobre ella dentro de la solicitud BatchWriteRow.
Solo se actualiza el valor de la versión más reciente de un contador atómico. No es posible modificar el valor de una versión específica. Una vez completada la actualización, se inserta una nueva versión de datos en el contador atómico de la fila.
Métodos
La función de contador atómico solo está available mediante los SDK de Tablestore.
Utilice la función de contador atómico con Tablestore SDK for Java, Tablestore SDK for Go, Tablestore SDK for Python, Tablestore SDK for Node.js, Tablestore SDK for .NET y Tablestore SDK for PHP. En este ejemplo se usa Tablestore SDK for Java.
A continuación se muestra un ejemplo de código sobre cómo usar rowUpdateChange para incrementar el valor de un contador atómico y devolver el resultado:
private static void incrementByUpdateRowApi(SyncClient client) {
// Specify the primary key.
PrimaryKeyBuilder primaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
primaryKeyBuilder.addPrimaryKeyColumn(PRIMARY_KEY_NAME, PrimaryKeyValue.fromString("pk0"));
PrimaryKey primaryKey = primaryKeyBuilder.build();
// Specify the table.
RowUpdateChange rowUpdateChange = new RowUpdateChange(TABLE_NAME, primaryKey);
// Set the price column as an atomic counter and increase the value of the atomic counter by 10. You cannot specify the timestamp.
rowUpdateChange.increment(new Column("price", ColumnValue.fromLong(10)));
// Set the data type of the value to return to ReturnType.RT_AFTER_MODIFY and return the value of the atomic counter.
rowUpdateChange.addReturnColumn("price");
rowUpdateChange.setReturnType(ReturnType.RT_AFTER_MODIFY);
// Initiate a request to update the row.
UpdateRowResponse response = client.updateRow(new UpdateRowRequest(rowUpdateChange));
// Display the updated values.
Row row = response.getRow();
System.out.println(row);
}
Facturación
La implementación de contadores atómicos no afecta las reglas de facturación existentes. Para obtener más información sobre la facturación, consulte Billing overview.