【问题标题】:Cassandra batch isolation guaranteeCassandra 批量隔离保证
【发布时间】:2016-05-01 23:20:14
【问题描述】:

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

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

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

万一我们的批次最终失败了,也会发生同样的情况吗?

问候, 亚历杭德罗

【问题讨论】:

    标签: cassandra datastax cassandra-2.2


    【解决方案1】:

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-31
      • 2019-03-29
      • 2019-05-24
      • 2017-05-10
      • 2011-07-03
      • 1970-01-01
      相关资源
      最近更新 更多