代码之家  ›  专栏  ›  技术社区  ›  YK S

如何在卡桑德拉形象化原子性?

  •  0
  • YK S  · 技术社区  · 6 年前

    this datastax doc 卡桑德拉的原子性是:

    在一行 被视为一个写入操作。

    鉴于根据 this datastax doc 卡桑德拉的原子性是:

    在Cassandra中,写操作是分区级别的原子操作,意味着数据的插入或更新 两行或更多行 在同一分区中,被视为一个写操作。

    我的困惑是,原子性是在单行的基础上看到的,还是它可以在分区级别的表中包含多行?

    我假设它是两者的组合,这取决于我们在Cassandra中执行的查询类型。

    例如:

    如果我有一个insert查询,它总是在分区中插入一行。所以Cassandra确保在分区级别成功插入这一行。

    但是如果我有一个update查询,它的where子句有一个限定多行的条件,那么update操作在分区级别是原子的,这意味着所有符合条件的行都将被更新,或者没有一行将被更新。

    1 回复  |  直到 6 年前
        1
  •  3
  •   Chris Lohfink    6 年前

    “row”和“partition”混淆了,因为以前的row表示分区,而现在的row表示分区的一部分。

    它们是分区的原子。请记住,这是指单个副本,因此一个包含5列的批处理中的一行或多行在一个副本上的单个操作中全部更新(没有跨节点隔离)。如果你的设置 (key, value) VALUES ('abc', 'def') key value 设置。但是,您可以创建一个只读副本,并且只有一个副本设置了它,而其他副本没有。也就是说,根据您的复制因子和所请求的一致性级别,您要么看到整个过程,要么什么也看不到。这也可以应用于分区中的多个行,但是如果没有批处理(已记录或未记录),则不能使用单个update语句更新2行。