Fuente de cambios en Azure Cosmos DB for Apache Cassandra
SE APLICA A: Cassandra
La compatibilidad de la fuente de cambios en Azure Cosmos DB for Apache Cassandra está disponible mediante los predicados de consulta del lenguaje de consulta de Cassandra (CQL). Con estas condiciones de predicado, puede consultar la API de la fuente de cambios. Las aplicaciones pueden obtener los cambios realizados en una tabla mediante la clave principal (también conocida como clave de partición), tal y como se requiere en CQL. Más adelante, puede realizar otras acciones en función de los resultados. Los cambios en las filas de la tabla se capturan por orden según su hora de modificación y el criterio de ordenación por clave de partición.
En el ejemplo siguiente se muestra cómo obtener una fuente de cambios en todas las filas en una API para la tabla de Cassandra Keyspace mediante .NET. El predicado COSMOS_CHANGEFEED_START_TIME() se utiliza directamente en CQL para consultar elementos en la fuente de cambios a partir de una hora de inicio especificada (en este caso la fecha y hora actuales). Puede descargar aquí el ejemplo completo de C# y aquí el de Java.
En cada iteración, la consulta se reanuda en el último punto en el que se leyeron los cambios mediante el estado de paginación. Se observa un flujo continuo de nuevos cambios en la tabla del espacio de claves. Se pueden ver cambios en las filas que se han insertado o actualizado. Actualmente no se admite la inspección de operaciones de eliminación mediante la fuente de cambios en la API de Cassandra.
Nota
La reutilización de un token después de anular una colección y volver a crearla con el mismo nombre produce un error. Le recomendamos que establezca pageState en NULL al crear una nueva colección y reutilizar el nombre de la colección.
Session cassandraSession = utils.getSession();
try {
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
LocalDateTime now = LocalDateTime.now().minusHours(6).minusMinutes(30);
String query="SELECT * FROM uprofile.user where COSMOS_CHANGEFEED_START_TIME()='"
+ dtf.format(now)+ "'";
byte[] token=null;
System.out.println(query);
while(true)
{
SimpleStatement st=new SimpleStatement(query);
st.setFetchSize(100);
if(token!=null)
st.setPagingStateUnsafe(token);
ResultSet result=cassandraSession.execute(st) ;
token=result.getExecutionInfo().getPagingState().toBytes();
for(Row row:result)
{
System.out.println(row.getString("user_name"));
}
}
} finally {
utils.close();
LOGGER.info("Please delete your table after verifying the presence of the data in portal or from CQL");
}
Para obtener los cambios realizados en una sola fila por clave principal, puede agregar esa clave a la consulta. En el ejemplo siguiente se muestra cómo realizar un seguimiento de los cambios realizados en la fila en la que "user_id = 1"
String query="SELECT * FROM uprofile.user where user_id=1 and COSMOS_CHANGEFEED_START_TIME()='"
+ dtf.format(now)+ "'";
SimpleStatement st=new SimpleStatement(query);
Limitaciones actuales
Se aplican las siguientes limitaciones al usar la fuente de cambios con la API de Cassandra:
- Actualmente, se admiten las inserciones y las actualizaciones. Aún no se admite la operación de eliminación. Como solución alternativa, puede agregar un marcador flexible en las filas que se van a eliminar. Por ejemplo, agregue un campo en la fila denominada "deleted" y establézcalo en "true".
- Se conserva la última actualización como en la API de NoSQL y las actualizaciones intermedias de la entidad no están disponibles.
Control de errores
Se admiten los siguientes mensajes y códigos de error cuando se utiliza la fuente de cambios en la API de Cassandra:
- Código de error HTTP 429: cuando se limita la frecuencia de la fuente de cambios, devuelve una página vacía.