Feed wijzigen in de Azure Cosmos DB API voor Cassandra

VAN TOEPASSING OP: Cassandra-API

Ondersteuning voor wijzigingsfeeds in Azure Cosmos DB API voor Cassandra is beschikbaar via de querypredicaten in de Cassandra Query Language (CQL). Aan de hand van deze predicaatvoorwaarden kunt u een query uitvoeren op de API voor de wijzigingsfeed. Toepassingen kunnen de wijzigingen in een tabel krijgen met behulp van de primaire sleutel (ook wel de partitiesleutel genoemd) zoals vereist in CQL. U kunt vervolgens verdere acties uitvoeren op basis van de resultaten. Wijzigingen in de rijen in de tabel worden vastgelegd in de volgorde van de wijzigingstijd en de sorteer volgorde per partitiesleutel.

In het volgende voorbeeld ziet u hoe u een wijzigingsfeed op alle rijen in een Cassandra-API keyspacetabel kunt krijgen met behulp van .NET. Het predicaat COSMOS_CHANGEFEED_START_TIME() wordt rechtstreeks in CQL gebruikt om query's uit te voeren op items in de wijzigingsfeed vanaf een opgegeven begintijd (in dit geval huidige datum/tijd). U kunt het volledige voorbeeld voor C# hier en voor Java hier downloaden.

In elke iteratie wordt de query hervat op het laatste moment dat wijzigingen zijn gelezen, met behulp van de pagineringstoestand. We zien een continue stroom van nieuwe wijzigingen in de tabel in de Keyspace. We zien wijzigingen in rijen die worden ingevoegd of bijgewerkt. Het zoeken naar verwijderbewerkingen met behulp van de Cassandra-API wordt momenteel niet ondersteund.

    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");
    }

Als u de wijzigingen in één rij per primaire sleutel wilt opvragen, kunt u de primaire sleutel toevoegen aan de query. In het volgende voorbeeld ziet u hoe u wijzigingen bij kunt houden voor de rij waarin '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);

Huidige beperkingen

De volgende beperkingen zijn van toepassing bij het gebruik van de wijzigingsfeed met Cassandra-API:

  • Invoegingen en updates worden momenteel ondersteund. Verwijderbewerking wordt nog niet ondersteund. Als tijdelijke oplossing kunt u een zachte markering toevoegen aan rijen die worden verwijderd. Voeg bijvoorbeeld een veld toe in de rij met de naam 'verwijderd' en stel dit in op 'true'.
  • De laatste update wordt persistent gemaakt als in SQL API en tussenliggende updates voor de entiteit zijn niet beschikbaar.

Foutafhandeling

De volgende foutcodes en berichten worden ondersteund bij het gebruik van de wijzigingsfeed in Cassandra-API:

  • HTTP-foutcode 429: wanneer de wijzigingsfeed een snelheids beperkt is, wordt er een lege pagina weergegeven.

Volgende stappen