Cassandra的更新不是反模式吗?

时间:2017-08-03 17:59:15

标签: cassandra cassandra-2.0 cassandra-3.0

根据Datastax文档,在Cassandra中写入之前的读取是一种反模式。

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

P.S我不是在谈论单纯的UPSERTS,而是在特定栏目上更新。

TIA!

1 个答案:

答案 0 :(得分:4)

不,更新不是反模式。

在Cassandra中,update是一个类似于insert的upsert操作。

  

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

但是在写操作之前会读取Lightweight transactions。实际上是以四次往返为代价的。

轻量级交易示例:

#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’; 

以上两种陈述都是轻量级交易

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