根据 this datastax doc Cassandra 中的原子性是:
In Cassandra, a write is atomic at the partition-level, meaning inserting or updating columns in a row is treated as one write operation.
而根据 this datastax doc Cassandra 中的原子性是:
In Cassandra, a write operation is atomic at the partition level, meaning the insertions or updates of two or more rows in the same partition are treated as one write operation.
我的困惑是,原子性是在单行基础上看到的,还是可以在分区级别包含表中的多行?
我认为它是两者的组合,具体取决于我们在 Cassandra 中执行的查询类型。
例如:
如果我有一个插入查询,它总是会在分区中插入一行。因此 Cassandra 确保该行在分区级别成功插入。
但是,如果我有更新查询,其 where 子句具有限定多行的条件,则更新操作在分区级别是原子的,意味着根据条件的所有符合条件的行都将被更新,或者不会更新。
我的理解正确吗?
最佳答案
“行”和“分区”被混淆,因为以前行意味着分区,现在行意味着分区的一部分。
它们对于分区来说是原子的。请记住,这是针对单个副本的,因此包含 5 列的批处理中的一行或多行都在一个副本上的单个操作中全部更新(无跨节点隔离)。如果您的设置 (key, value) VALUES ('abc', 'def')
您将永远不会只看到 key
而不是 value
放。但是,您可能进行读取操作,但只有 1 个副本已设置,而其他副本则没有。这意味着根据您所要求的复制因子和一致性级别,您要么会看到整个内容,要么什么也看不到。这也适用于分区内的多行,但您无法在没有批处理(已记录或未记录)的情况下使用单个更新语句更新 2 行。
关于cassandra - 如何可视化 Cassandra 中的原子性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52767210/