Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
CassandraJava驱动程序:如何报告插入、更新和删除结果?_Java_Cassandra_Cql3 - Fatal编程技术网

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

CassandraJava驱动程序:如何报告插入、更新和删除结果?,java,cassandra,cql3,Java,Cassandra,Cql3,我正在编写一个应用程序,我需要能够判断插入和更新是否成功。我使用“INSERT…IF NOT EXISTS”获得轻量级事务行为,并注意到从execute返回的结果集包含一行更新的数据和一个可以查询的“[applicated]”列。那太好了。但是我有一个update语句返回一个空的结果集。看起来好像更新成功了,但我想用一种编程方式来验证这一点 澄清: 我打开了一些由我的突变返回的结果集的日志记录。我发现“INSERT…IF NOT EXIST”返回一个名为“[applicated]”的布尔列的结果

我正在编写一个应用程序,我需要能够判断插入和更新是否成功。我使用“INSERT…IF NOT EXISTS”获得轻量级事务行为,并注意到从execute返回的结果集包含一行更新的数据和一个可以查询的“[applicated]”列。那太好了。但是我有一个update语句返回一个空的结果集。看起来好像更新成功了,但我想用一种编程方式来验证这一点

澄清:

我打开了一些由我的突变返回的结果集的日志记录。我发现“INSERT…IF NOT EXIST”返回一个名为“[applicated]”的布尔列的结果集。如果“[applied]”为false,它还会返回已经存在的行

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

所以我有两个问题:

  • 关于每种突变类型的结果集应该包含什么的文档在哪里?我在CQL文档或Java驱动程序文档中没有看到它。我甚至试图查看其他语言集成的文档,但没有找到任何关于突变结果集内容的描述
  • 有没有办法找出更新修改了多少行或删除了多少行

  • 在Cassandra中,插入/更新/删除的行为相同,它们被称为突变。如果你的客户没有返回任何异常,那么变异就完成了

    如果您担心您的变异调用的一致性,那么添加使用更高级别的一致性


    如果您需要良好的一致性,我建议对读取和突变都使用本地仲裁。这样,您就不必担心以编程方式检查突变,因为它需要后续读取

    就连我也被同样的问题困扰着。我发现的一件事(虽然是一个糟糕的黑客行为)是,如果更新或插入失败,结果集中的列定义不止一个,如果变异成功,则列定义只包含一个列,即“应用”。问题是ResultSet不包含“applied”列的值,该列在变异成功时为“true”,在事务阻止更改数据时为“false”。我现在正在我的应用程序中使用这种黑客技术,但我认为这不是一个好的解决方案,所以即使是我也在寻找更好的解决方案

    有没有办法找出更新修改了多少行或删除了多少行


    据我所知,没有,因为删除或更新最终是一致的。有可能是一致性级别为1或本地_1的插入没有完全复制,并且在插入完全复制之前在其他宿主上进行了突变。突变仍然适用,但您无法知道实际受影响的行数。

    我用来确定插入是否有效的一个解决方法是检查从
    结果集返回的行数据:

    ResultSet rs = session.execute(bs);
    Row row = rs.one();
    boolean insertFailed = row.getColumnDefinitions().contains("ownerid");
    

    这里,
    ownerid
    是主行键。您可以使用各自的列名。

    谢谢,这很有帮助,但不能解决真正的问题。我在问题中添加了一些信息来帮助澄清我的问题。当突变失败时,cassandra会返回什么?是的,这不是真正的黑客行为,因为这是cassandra传达突变结果的唯一方式。我也在做同样的事情。我通过记录结果集的内容发现了这一点,我希望结果集是空的。我希望文档能更清楚地描述这种行为。Cassandra doc:INSERT将一个或多个列以原子方式独立地写入Cassandra表中的记录。是的,在过去的一年里,我学到了更多关于最终一致性的含义。谢谢