Cassandra 中的更新不是反模式吗?

Tan*_*nvi 5 cassandra cassandra-2.0 cassandra-3.0

根据 Datastax 文档,在 Cassandra 中先读后写是一种反模式。

每当我们在 CQLSH 中使用 UPDATE 或使用 Datastax 驱动程序设置几列(带有 IF 和集合更新)时,它是否先在写入前进行读取?这不是反模式吗?我错过了什么吗?

PS 我不是在谈论纯粹的 UPSERTS,而是在特定列上的更新。

蒂亚!

Ash*_*lam 5

不,更新不是反模式。

在 Cassandra 中,更新是一种类似于插入的 upsert 操作。

UPDATE 将一个或多个列值写入 Cassandra 表中的一行。与 INSERT 一样,UPDATE 是一个 upsert 操作:如果指定的行不存在,则该命令创建它。同一分区键内的所有 UPDATE 都以原子方式独立应用。

但是轻量级事务在写操作之前被读取。实际上以四次往返为代价。

轻量级交易示例:

#Lightweight transaction Insert
INSERT INTO customer_account (customerID, customer_email) 
VALUES (‘LauraS’, ‘lauras@gmail.com’)
IF NOT EXISTS;

#Lightweight transaction Update
UPDATE customer_account
SET    customer_email=’laurass@gmail.com’
IF     customerID=’LauraS’; 
Run Code Online (Sandbox Code Playgroud)

以上两种说法都是轻量级交易

来源:http : //docs.datastax.com/en/cql/3.3/cql/cql_reference/cqlUpdate.html#cqlUpdate__description