1

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

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

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

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

问候,亚历杭德罗

4

1 回答 1

1

根据 ACID 属性,Cassandra 可以提供 ACD。因此,不要指望古典意义上的孤立。

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

Cassandra文档解释了它是如何工作的:

为了实现原子性,Cassandra 首先将序列化批处理写入批处理日志系统表,该系统表将序列化批处理作为 blob 数据使用。当批处理中的行已成功写入并持久化(或提示)后,将删除批处理日志数据。原子性会降低性能。

最后,使用 Cassandra 表作为 MQ 被认为是反模式

于 2016-01-25T16:01:09.403 回答