java - 如何知道 Cassandra(CQL) 中受影响的行?

标签 java sql cassandra cql datastax-java-driver

似乎没有任何直接的方法可以知道更新和删除语句在 cassandra 中受影响的行。

例如,如果我有这样的查询:

DELETE FROM xyztable WHERE PKEY IN (1,2,3,4,5,6);

现在,当然,因为我已经传递了 6 个键,所以显然有 6 行会受到影响。

但是,就像在 RDBMS 世界中一样,是否有任何方法可以了解 datastax-driver 中更新/删除语句中受影响的行?

我读过 cassandra 没有对写入操作提供反馈 here .

除了我无法通过谷歌看到关于这个主题的任何其他讨论。

如果这不可能,我能否确定使用上面给出的查询类型,它将全部删除或无法全部删除?

最佳答案

在最终一致的世界中,您可以将这些操作看作是在保存删除请求,并根据请求的一致性级别,等待来自多个节点的确认该请求已被接受。然后将请求异步传递到其他节点。 由于不依赖于诸如外键之类的任何东西,因此如果请求被集群成功接受,则没有什么可以阻止数据被删除。

但是,有很多如果。例如,删除一致性级别为 1 的数据,成功地被一个节点接受,然后立即发生节点硬故障,如果在故障之前没有复制它,可能会导致删除丢失。

另一个例子——在删除过程中,一个节点宕机了,并且宕机了很长一段时间,超过了 gc_grace_period,也就是说,超过了用删除的数据删除墓碑所需的时间。然后,如果这个节点恢复了,那么所有突然从集群的其余部分删除的所有数据,但不是从这个节点删除的,都将被带回集群。

因此,为了避免这些情况,并考虑操作成功和最终,cassandra 管理员需要实现一些措施,包括定期修复作业(以确保所有节点都是最新的)。应用程序还需要决定什么是更好的 - 以可能的数据丢失为代价的一致性级别 1 的更快性能与具有更高一致性级别但数据丢失可能性较小的较低性能。

关于java - 如何知道 Cassandra(CQL) 中受影响的行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28611459/

相关文章:

Cassandra:列出最近修改的 10 条记录

java - 从 jsf 中的 java 代码调用警告框

java - 更新 SQLite Android 时出错

php - 表不在同一个顺序 mySQL

hadoop - 如何将Cassandra转换为HDFS文件系统以进行Shark/Hive查询

python - Docker - 将 Cassandra 容器与另一个容器链接

java - 如何在 Parse 中从数组中删除字符串

java - 将 JFrame 与 pack() 结合使用

mysql - 如何根据平均计算对mysql查询结果进行分组?

sql - 如何查找日期之间的状态