首页 文章

Cassandra插入失败

提问于
浏览
1

我们在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 Enterprise Edition(4.5.2) . Cassandra 2.0.10 . 数据中心有4个节点,我们处理的键空间 replication_factor 设置为3.查询 CONSISTENCY_LEVEL 设置为 LOCAL_QUORUM .

java驱动程序是数据stax enterprise 2.1.1

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

1 回答

  • 1

    我假设在您的示例中,删除和插入的SOME_UUID是相同的 .

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

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

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

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

相关问题