我了解 Cassandra 中 LOGGED 和 UNLOGGED 批次在原子性方面的基本区别。本质上,LOGGED 批次是原子的,而 UNLOGGED 不是。这意味着 LOGGED 批处理中的所有语句都一起执行(或不执行)。
在 UNLOGGED 批处理的情况下,如果在编写语句的写入操作期间出现问题,我知道已执行的语句不会回滚,但是 Cassandra 是否将整个批处理的失败通知给驱动程序?
最佳答案
所以日志批处理使用日志来记录批处理操作然后执行它,当它成功时将它从日志中删除。 Unlogged 仍然是一个批处理操作,但没有日志的开销。少量记录是可以的,但是随着您的扩展,此批处理日志可能会增长并成为问题点。 Datastax 文档实际上涵盖了批处理和一些示例:
https://docs.datastax.com/en/dse/6.0/cql/cql/cql_using/useBatch.html
good batches 的示例
bad batches 的示例
一般来说,批处理有其用途,但我已经看到它们在过度使用时会导致性能问题,因为您将它们分组到协调器节点上会付出代价。我经常向人们指出这个 well known blog也概述了有关批次的一些有用信息
关于cassandra - 负情况下未记录和已记录的 Cassandra 批处理之间的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27659444/