如果不存在,我会为同一分区批量插入多行。从我的测试看,如果任何行都是重复的,则所有插入都会失败,并且不会插入任何行。我想保留if not exists行为,但如果有重复项并且仍然插入非重复行,则不会使批处理失败。如果有重复的话,有没有办法告诉Cassandra不要让批次失败?
答案 0 :(得分:2)
请注意以下文档,这些文档最有可能适用于您的Cassandra版本。
在Cassandra 2.0.6及更高版本中,您可以批量处理在Cassandra 2.0中作为轻量级事务引入的条件更新。只有对同一分区所做的更新才能包含在批处理中,因为底层Paxos实现在分区的粒度下工作。您可以将具有条件的更新分组,但是当批次中的单个语句使用条件时,将使用单个Paxos提议提交整个批次,就好像批处理中包含的所有条件都适用一样。
这证实了您正在经历的行为。鉴于底层批处理机制,通过CQL执行您想要的操作并不容易。
在不知道用例的详细信息的情况下,我最初的想法是质疑你是否真的需要使用这样的BATCH语句。如果需要根据应用程序中的一个事件更新多个表,仍可以基于相同的IF NOT EXISTS条件将语句批处理。