簡體   English   中英

使用Java在Cassandra中將數據從一個表復制到另一個表

[英]Copy data from one table to other in Cassandra using Java

我正在嘗試將所有數據從一個列族(表)移至另一列族。 由於兩個表都有不同的描述,因此我必須從表1中提取所有數據,並為表2創建一個新對象,然后進行批量aync插入。 我的表1有數百萬條記錄,因此我無法直接在我的數據結構中獲取所有數據並進行計算。 我正在尋找使用Spring Data Cassandra和Java輕松實現此目的的解決方案。

我最初計划首先將所有數據移動到臨時表,然后創建一些復合鍵關系,然后查詢回我的主表。 但是,這似乎對我不利。 誰能建議一個好的策略來做到這一點? 任何線索將不勝感激。 謝謝!

我的表1有數百萬條記錄,因此我無法直接在我的數據結構中獲取所有數據並進行計算。

使用datastax java驅動程序,您可以按令牌范圍獲取所有數據,並從每個令牌范圍計算出數據。 例如:

Set<TokenRange> tokenRanges = cassandraSession.getCluster().getMetadata().getTokenRanges();

for(TokenRange tr: tokenRanges) {
    List<Row> rows = new ArrayList<>();
    for(TokenRange sub: tr.unwrap()){
        String query = "SELECT * FROM keyspace.table WHERE token(pk) > ? AND token(pk) <= ?";
        SimpleStatement st = new SimpleStatement( query, sub.getStart(), sub.getEnd() );
        rows.addAll( session.execute( st ).all() );
    }
    transformAndWriteToNewTable(rows); 
}

每個令牌范圍僅包含所有數據的一部分,並且可以由一台物理機處理。 您可以獨立(並行或異步)處理每個令牌范圍,以獲得更高的性能。

您可以使用Apache Spark Streaming
從技術上講,您將從第一個表讀取數據,進行即時轉換並寫入第二個表。
請注意,我更喜歡Spark scala API,因為它具有更優雅的API,並且流作業代碼更簡潔。 但是,如果您想使用純Java來做,那就是您的選擇。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM