2017-08-14 31 views
1

我有刪除從卡桑德拉DB一些節點如下功能:併發刪除和插入的卡珊德拉DB

public void deleteNodeDataFromSensordata2(String nodeId, long startTime, long endTime) { 
    logger.info("Star : delete Sensordata2 of node [" + nodeId + "] " + "start [" + startTime + "] " + "end [" 
      + endTime + "] data"); 
    try { 
     BoundStatement stmt = sensordata2NodeDataDelete.bind(); 
     stmt.setList(DAYS, getDaysAsList(startTime, endTime)); 
     stmt.setString(NODEID, nodeId); 
     session.execute(stmt); 
    } catch (Exception e) { 
     logger.error("Error from cassandra", e); 
    } 
    logger.info("End : delete of [" + nodeId + "] Sensordata2 data"); 
} 

刪除查詢將如下:

我想確保上述所有數據在下一個命令執行後被刪除。上面的代碼是否具有這種可靠性?

回答

2

您必須至少設置一個QUORUM一致性級別到您的語句。

這意味着只有當足夠多的節點接受了您的請求(超過複製因子數量的一半)時,您纔會對execute命令得到肯定回答。

然後如果下一個命令讀取或更新具有相同一致性級別的數據,您肯定會始終擁有最新的數據。

+0

但這裏(https://stackoverflow.com/questions/21442717/how-do-i-set-the-consistency-level-of-an-individual-cql-query-in-cql3)他們建議不要使用一致性水平。 – Luckylukee

+0

那麼這個答案是指這些查詢中的'USING CONSISTENCY'部分,而不是設置一致性級別。他們將CL移到了協議中,以便驅動程序不對查詢進行設置。你應該肯定使用你的用例的一致性水平,托馬斯的答案是正確的。 –