在Cassandra DB上同时删除和插入

时间:2017-08-14 05:54:51

标签: cassandra

我有一个函数可以从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");

我想确保在执行下一个命令后删除所有上述数据。上面的代码是否具有这种可靠性?

1 个答案:

答案 0 :(得分:2)

您必须至少为语句设置 QUORUM 一致性级别。

这意味着只有当足够的节点接受了您的请求(超过复制因子数量的一半)时,您才会得到execute命令的肯定答案。

然后,如果下一个命令读取或更新具有相同一致性级别的数据,您肯定总是拥有最新数据。