Cassandra Java 驱动程序:如何报告插入、更新和删除结果?

2022-09-04 22:09:41

我正在编写一个应用程序,我需要能够判断插入和更新是否成功。我正在使用“插入...IF NOT EXISTS“以获取轻量级事务行为,并注意到从 execute 返回的结果集包含一行,其中包含一行和一个可以查询的”[applied]“列。真棒。但是我有一个更新语句返回一个空的结果集。看起来更新似乎正在成功,但我想要一种编程方法来验证这一点。

澄清:

我已经打开了我的突变返回的结果集的一些日志记录。我发现“插入...如果不存在“,则返回一个结果集,其中包含一个名为”[applied]“的布尔列。如果 “[applied]” 为 false,它还返回已退出的行。

使用 UPDATE,我总是看到一个空的结果集。

所以我有两个问题:

  1. 关于每种类型的突变的结果集应包含哪些内容的文档在哪里?我没有在CQL文档或Java驱动程序文档中看到它。我甚至尝试查看其他语言集成的文档,但没有找到任何关于突变的ResultSet内容的描述。
  2. 有没有办法找出有多少行被 UPDATE 修改或被 DELETE 删除?

答案 1

即使我也陷入了同样的问题。我发现的一件事(虽然是一个糟糕的技巧)是,如果更新或插入失败,结果集中的列定义是多个,如果突变成功,列定义只包含一列,即“应用”。问题是 ResultSet 不包含“已应用”列的值,如果突变成功,则为“true”,当事务阻止更改数据时,该值为“false”。到目前为止,我正在我的应用程序中使用此黑客,但我不认为这是一个好的解决方案,所以即使我正在寻找更好的解决方案。


答案 2

在Cassandra中,插入/更新/删除的行为相同,它们被称为突变。如果您的客户端未返回任何异常,则突变已完成。

如果您担心突变调用的一致性,请在较高级别添加 USING CONSISTENCY。

http://www.datastax.com/docs/1.0/references/cql/index http://www.datastax.com/docs/1.1/dml/data_consistency

如果你追求良好的一致性,我建议对读取和突变使用LOCAL_QUORUM。这样,您就不必担心以编程方式检查突变,因为它需要随后的读取。


推荐