cassandra için Azure Cosmos DB apı 'sindeki akışı değiştirme

Uygulama hedefı: Cassandra API

cassandra için Azure Cosmos DB apı 'sindeki akış desteğini değiştirme , cassandra sorgu dilindeki (cql) sorgu koşulları aracılığıyla kullanılabilir. Bu koşul koşullarını kullanarak, değişiklik akışı API 'sini sorgulayabilirsiniz. Uygulamalar, birincil anahtarı (bölüm anahtarı olarak da bilinir) kullanarak, CQL 'de gerekli olduğu gibi, bir tabloda yapılan değişiklikleri alabilir. Daha sonra sonuçlara göre daha fazla eylem gerçekleştirebilirsiniz. Tablodaki satırlarda yapılan değişiklikler, değiştirilme zamanı sırasına ve bölüm anahtarı başına sıralama sırasına göre yakalanır.

Aşağıdaki örnek .NET kullanarak bir Cassandra API keyspace tablosundaki tüm satırlarda nasıl değişiklik akışı alınacağını göstermektedir. COSMOS_CHANGEFEED_START_TIME () koşulu doğrudan CQL içinde, değişiklik akışındaki öğeleri belirli bir başlangıç zamanından (Bu durumda geçerli DateTime) sorgulamak için kullanılır. Burada C# ve Java içintam örneği indirebilirsiniz.

Her yinelemede sorgu, sayfalama durumu kullanılarak yapılan son noktada devam ediyor. Keyspace 'teki tabloda yeni değişikliklerin sürekli akışını görebiliriz. Eklenen veya güncellenen satırlardaki değişiklikleri görüyoruz. Cassandra API değişiklik akışını kullanarak silme işlemleri için izleme şu anda desteklenmiyor.

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

Birincil anahtara göre tek bir satırdaki değişiklikleri almak için sorguya birincil anahtar ekleyebilirsiniz. Aşağıdaki örnek, "user_id = 1" olduğu satırdaki değişikliklerin nasıl izleneceğini gösterir

    String query="SELECT * FROM uprofile.user where user_id=1 and COSMOS_CHANGEFEED_START_TIME()='" 
                       + dtf.format(now)+ "'";
    SimpleStatement st=new  SimpleStatement(query);

Geçerli sınırlamalar

Cassandra API ile değişiklik akışı kullanılırken aşağıdaki sınırlamalar geçerlidir:

  • Ekler ve güncelleştirmeler şu anda destekleniyor. Silme işlemi henüz desteklenmiyor. Geçici bir çözüm olarak, silinmekte olan satırlara yumuşak bir işaretleyici ekleyebilirsiniz. Örneğin, "Deleted" adlı satıra bir alan ekleyin ve "true" olarak ayarlayın.
  • son güncelleştirme, çekirdek SQL apı 'sinde olduğu gibi kalıcı hale getirilir ve varlık için ara güncelleştirmeler kullanılabilir değildir.

Hata işleme

Aşağıdaki hata kodları ve iletileri Cassandra API içindeki değişiklik akışı kullanılırken desteklenir:

  • Http hata kodu 429 -değişiklik akışı hız sınırlı olduğunda boş bir sayfa döndürür.

Sonraki adımlar