我有一个函数可以从Cassandra 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");
}
删除查询如下:
sensordata2NodeDataDelete = session.prepare(
"DELETE FROM "
+ "SENSOR_DATA_2 "
+ "WHERE NODEID = :NODEID AND YYYYMMDD IN :DAYS");
我想确保在执行下一个命令后删除所有上述数据。上面的代码是否具有这种可靠性?
答案 0 :(得分:2)
您必须至少为语句设置 QUORUM 一致性级别。
这意味着只有当足够的节点接受了您的请求(超过复制因子数量的一半)时,您才会得到execute
命令的肯定答案。
然后,如果下一个命令读取或更新具有相同一致性级别的数据,您肯定总是拥有最新数据。