Cassandra插入失败

时间:2014-09-29 12:14:39

标签: cassandra cql3 datastax-enterprise datastax datastax-java-driver

我们遇到了在cassandra表中写入数据的问题。

流程正在跟随..我们使用一些主键删除XXX中的所有记录。 然后在循环中插入新的。

execute("DELETE FROM XXX WHERE key = {SOME_UUID}");

for(int i = 0; i < 5; ++i) {
    execute("INSERT INTO XXX (key, field1, field2) VALUES ({SOME UUID},'field1','field2')";
}

结果:有时并非所有行都插入到表中。查询表后,我们发现并未插入所有行。

我们拥有的环境:

我们使用DataStax企业版(4.5.2)。卡桑德拉2.0.10。 数据中心有4个节点,我们处理的键空间replication_factor设置为3。 查询CONSISTENCY_LEVEL设置为LOCAL_QUORUM

java驱动程序是数据stax enterprise 2.1.1

提前致谢。 任何帮助,将不胜感激。

1 个答案:

答案 0 :(得分:1)

我假设在你的例子中,删除和插入的SOME_UUID是相同的。

这可能是删除(逻辑删除)和传播到所有节点的新插入(根据您的复制因子)之间的竞争条件。如果删除和插入标记有相同的时间戳,则删除将获胜。您可能会遇到某些节点上删除获胜的情况,而其他节点上的插入获胜。

您可以尝试将RF降低到1,正如@ BryceAtNetwork23建议的那样。

另一个测试是在delete和insert for循环之间的示例代码中插入一个延迟(如500ms)。这将为删除在插入过程之前传播提供时间。

根据您的数据模型,此处的最佳解决方案可能是避免删除。