2016-01-25 105 views
0

我有一个关于卡桑德拉分批分离一个问题:卡桑德拉分批分离保证

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

因为我们正在写入不同的分区,并且操作顺序不一定保持在批处理操作中;我们的事件是否有机会写入,并且我们的过程在我们的实际数据持续之前将其读取?

如果我们的批次最终失败,情况会不会发生同样的情况?

问候, 亚历

回答

0

从ACID属性,卡桑德拉可以提供ACD。因此,不要指望经典意义上的隔离。

批处理记录将为您提供原子性。所以它可以确保批量中的全部或全部记录都不会写入。但是,因为它不能保证隔离,所以最终可能会保留一些记录,而其他记录则不会(例如写入队列表,但不写入主表)。

卡桑德拉docs解释它是如何工作的:

为了实现原子性,卡桑德拉第一写入序列化批量消耗序列化批量为BLOB数据batchlog系统表。当批处理中的行成功写入并保留(或暗示)时,批处理日志数据将被删除。原子性有一个性能损失。

最后,使用卡桑德拉表作为MQ被认为是anti-pattern

+0

非常感谢! – AQ1