Cassandra批处理隔离保证

Cassandra batch isolation guarantee

我有一个关于 Cassandra 批处理隔离的问题:

我们的集群由一个数据中心组成,复制因子为 3,读写 LOCAL_QUORUM。 我们必须提供类似于 'after' 触发器的新闻提要,以通知客户端有关数据库中数据的 CRUD 事件。 我们考虑执行实际操作,并在批处理中的另一个 table(也在另一个分区中)插入一个事件。异步地,某些进程将从事件 table 中读取事件并通过 MQ 发送它们。

因为我们写的是不同的分区,批量操作不一定要维护操作顺序;有没有可能我们的事件被写入,我们的进程在我们的实际数据被持久化之前读取它?

万一我们的批处理最终失败,是否会发生同样的情况?

此致, 亚历杭德罗

从 ACID 属性来看,Cassandra 可以提供 ACD。因此,不要指望经典意义上的隔离。

批处理记录将为您提供原子性。所以它确实保证写入了批次中的所有或 none 记录。但是,因为它不能保证隔离,您最终可能会保留一些记录,而另一些则不会(例如,写入您的队列 table,但不写入主队列 table)。

Cassandra docs 解释它是如何工作的:

To achieve atomicity, Cassandra first writes the serialized batch to the batchlog system table that consumes the serialized batch as blob data. When the rows in the batch have been successfully written and persisted (or hinted) the batchlog data is removed. There is a performance penalty for atomicity.

最后,考虑使用Cassandra table 作为MQ anti-pattern