Udostępnij za pośrednictwem


Zestawienie zmian w usłudze Azure Cosmos DB dla bazy danych Apache Cassandra

DOTYCZY: Kasandra

Obsługa zestawienia zmian w usłudze Azure Cosmos DB dla systemu Apache Cassandra jest dostępna za pośrednictwem predykatów zapytań w języku Cassandra Query Language (CQL). Korzystając z tych warunków predykatu, możesz wykonać zapytanie dotyczące interfejsu API zestawienia zmian. Aplikacje mogą pobierać zmiany wprowadzone w tabeli przy użyciu klucza podstawowego (znanego również jako klucz partycji), co jest wymagane w języku CQL. Następnie możesz podjąć dalsze działania na podstawie wyników. Zmiany wierszy w tabeli są przechwytywane w kolejności ich czasu modyfikacji i kolejności sortowania na klucz partycji.

W poniższym przykładzie pokazano, jak uzyskać zestawienie zmian dla wszystkich wierszy w tabeli Cassandra Keyspace dla interfejsu API przy użyciu platformy .NET. Predykat COSMOS_CHANGEFEED_START_TIME() jest używany bezpośrednio w języku CQL do wykonywania zapytań o elementy w kanale zmian z określonej godziny rozpoczęcia (w tym przypadku bieżąca data/godzina). Pełny przykład dla języka C# można pobrać tutaj i dla języka Java tutaj.

W każdej iteracji zapytanie jest wznawiane w ostatnim punkcie, które zostały odczytane, przy użyciu stanu stronicowania. W przestrzeni kluczy można zobaczyć ciągły strumień nowych zmian w tabeli. Zobaczymy zmiany w wstawionych lub zaktualizowanych wierszach. Obserwowanie operacji usuwania przy użyciu zestawienia zmian w interfejsie API dla rozwiązania Cassandra nie jest obecnie obsługiwane.

Uwaga

Ponowne użycie tokenu po usunięciu kolekcji, a następnie ponowne utworzenie jej o tej samej nazwie powoduje wystąpienie błędu. Zalecamy ustawienie parametru pageState na wartość null podczas tworzenia nowej kolekcji i ponownego korzystania z nazwy kolekcji.

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

Aby uzyskać zmiany w jednym wierszu według klucza podstawowego, możesz dodać klucz podstawowy w zapytaniu. W poniższym przykładzie pokazano, jak śledzić zmiany dla wiersza, w którym "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);

Bieżące ograniczenia

Następujące ograniczenia mają zastosowanie w przypadku używania zestawienia zmian z interfejsem API dla rozwiązania Cassandra:

  • Wstawianie i aktualizacje są obecnie obsługiwane. Operacja usuwania nie jest jeszcze obsługiwana. Aby obejść ten problem, można dodać znacznik miękki do wierszy, które są usuwane. Na przykład dodaj pole w wierszu o nazwie "deleted" i ustaw je na wartość "true".
  • Ostatnia aktualizacja jest utrwalana, ponieważ w podstawowym interfejsie API dla bazy danych NoSQL i aktualizacji pośrednich dla jednostki nie są dostępne.

Obsługa błędów

Następujące kody błędów i komunikaty są obsługiwane w przypadku używania zestawienia zmian w interfejsie API dla rozwiązania Cassandra:

  • Kod błędu HTTP 429 — gdy zestawienie zmian jest ograniczone, zwraca pustą stronę.

Następne kroki