Cassandra 的更新不是反模式吗?
Is an update in Cassandra not an anti pattern?
根据 Datastax 文档,在 Cassandra 中先读后写是一种反模式。
每当我们在 CQLSH 中使用 UPDATE 或使用 Datastax 驱动程序设置一些列(使用 IF 和集合更新)时,它不会先读后写吗?那不是反模式吗?我错过了什么吗?
P.S 我说的不是单纯的 UPSERTS,而是特定列的更新。
TIA!
不,更新不是反模式。
在Cassandra中update是一个类似insert的upsert操作
UPDATE writes one or more column values to a row in a Cassandra table. Like INSERT, UPDATE is an upsert operation: if the specified row does not exist, the command creates it. All UPDATEs within the same partition key are applied atomically and in isolation.
但是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
根据 Datastax 文档,在 Cassandra 中先读后写是一种反模式。
每当我们在 CQLSH 中使用 UPDATE 或使用 Datastax 驱动程序设置一些列(使用 IF 和集合更新)时,它不会先读后写吗?那不是反模式吗?我错过了什么吗?
P.S 我说的不是单纯的 UPSERTS,而是特定列的更新。
TIA!
不,更新不是反模式。
在Cassandra中update是一个类似insert的upsert操作
UPDATE writes one or more column values to a row in a Cassandra table. Like INSERT, UPDATE is an upsert operation: if the specified row does not exist, the command creates it. All UPDATEs within the same partition key are applied atomically and in isolation.
但是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