我对Cassandra批处理隔离有疑问:
我们的集群由一个数据中心组成,复制因子为3,在LOCAL_QUORUM中读写。 我们必须提供类似“后”触发器的新闻源,以通知客户有关数据库中数据的CRUD事件。 我们考虑执行实际操作,并在批处理中的另一个表(也在另一个分区中)插入事件。异步地,某些进程将从事件表中读取事件并通过MQ发送它们。
因为我们正在写入不同的分区,并且操作顺序不一定在批处理操作中维护;我们的事件是否有可能被写入,我们的过程会在我们的实际数据被保留之前读取它?
如果我们的批次最后失败,会发生同样的情况吗?
此致 亚历杭德罗
答案 0 :(得分:1)
从ACID属性,Cassandra可以提供ACD。因此,不要期望隔离在其经典意义上。
批处理记录将为您提供原子性。因此,它确保保证批次中的所有记录都被写入。但是,因为它不能保证隔离,所以最终可能会保留一些记录而其他记录不会保留(例如写入队列表,而不是写入主表)。
Cassandra docs解释它是如何运作的:
为了实现原子性,Cassandra首先将序列化批处理写入批处理系统表,该表使用序列化批处理作为blob数据。成功编写并保留(或提示)批处理中的行后,将删除批处理日志数据。原子性会对性能造成损失。
最后,将Cassandra表用作MQ被视为anti-pattern。