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

Cassandra 如何在卡桑德拉形象化原子性?,cassandra,nosql,cassandra-3.0,atomicity,Cassandra,Nosql,Cassandra 3.0,Atomicity,根据卡桑德拉的原子性: 在Cassandra中,写入是分区级别的原子操作,这意味着插入或更新行中的列被视为一个写入操作 鉴于根据卡桑德拉的原子性: 在Cassandra中,写入操作是分区级别的原子操作,这意味着同一分区中两行或多行的插入或更新被视为一个写入操作 我的困惑是,原子性是以单行为基础,还是可以在分区级别包含一个表中的多行? 我假设这是两者的结合,具体取决于我们在Cassandra中执行的查询类型 例如: 如果我有一个insert查询,它将始终在分区中插入一行。因此,Cassandra确

根据卡桑德拉的原子性:

在Cassandra中,写入是分区级别的原子操作,这意味着插入或更新行中的列被视为一个写入操作

鉴于根据卡桑德拉的原子性:

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

我的困惑是,原子性是以单行为基础,还是可以在分区级别包含一个表中的多行?

我假设这是两者的结合,具体取决于我们在Cassandra中执行的查询类型

例如:

如果我有一个insert查询,它将始终在分区中插入一行。因此,Cassandra确保在分区级别成功插入此行

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

我的理解正确吗?

由于先前的行表示分区,而现在的行表示分区的一部分,所以“行”和“分区”被混为一谈


它们是分区的原子。请记住,这是针对单个副本的,因此一个包含5列的批处理中的一行或多行在一个副本上的单个操作中全部更新(无跨节点隔离)。如果您的设置
(键,值)值('abc','def')
,您将永远不会只看到
,而不会看到
设置。但是,您可以进行读取,并且只有一个副本设置了该副本,而另一个副本没有。这意味着,根据您的复制因子和所请求的一致性级别,您将看到整个过程,或者什么也看不到。这也适用于分区内的多行,但如果没有批处理(已记录或未记录),则无法使用单个update语句更新2行。

谢谢您的回答。但我对最后一句话感到困惑。当您要在分区内的多个表上执行查询时,不使用批处理。此外,考虑查询<代码>更新表名称集指定=“SSE”,其中YOE>5;<代码>如果此查询选择多行,则此查询不需要更新所有被视为原子的行吗?例如,如果3行的YOE>5,并且只有一行被更新,然后出现一些故障,并且无法对rem执行写入。两行,那么该操作在分区中如何是原子的?“如果此查询选择多行”,它将返回一个错误。update语句只影响一行。Deletes可以创建范围逻辑删除,但无法创建范围值我尝试了一个查询
更新表\u name set column\u name='c1',其中primary\u key='p1'和cluster\u key in('c1','c2')
。此查询更新了多行。但是它与语句
相矛盾,但是在没有批处理(记录或未记录)的情况下,不能使用单个update语句更新2行。
。你能解释一下吗?将
IN
Where
子句一起使用是否与
batch
有关?是的,对于equality和IN子句,这是正确的,您可以在分区内执行行。它构建分区生成器的方式仍然是一个单一的应用变种。但是,您将无法执行YOE>5(UpdateStatement中的切片抛出UnsupportedOperationException)。甚至可以使用in子句进行多个分区。但它们将是不同的突变,除非分批进行,否则不会以原子方式应用。请记住,更新和插入的其他语义基本相同。