根据Datastax文档,在Cassandra中写入之前的读取是一种反模式。
每当我们在CQLSH中使用UPDATE或使用Datastax驱动程序设置几列(使用IF和集合更新)时,它是否在写入之前不进行读取?这不是反模式吗?我错过了什么吗?
P.S我不是在谈论单纯的UPSERTS,而是在特定栏目上更新。
TIA!
答案 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