CQL插入和更新之间的区别?

Difference between CQL insert and update?

我是 Cassandra 的新手,我来自关系世界。当我在玩 CQL 时,我发现我没有发现任何区别。例如:

当我执行以下查询时

update product set price=100, currency=USD where productID=12345;

然后 CQL 在 table 中创建新行。在 RDBMS 中,这将不起作用,因为没有 productID = 12345 的产品。

你能提供一些见解吗?

您发现大多数 Cassandra 写入(除了少数例外)都是只写而没有读取。这有很多原因 - 一个是性能(首先读取很慢),但也要考虑到第一个 INSERT 可能发生在另一台服务器上,并且尚未复制到处理 UPDATE 的服务器。

你真正想说的是 "set the price to 0USD for product 12345"。如果不存在这样的产品(还没有?),它仍然在设定价格,因为它不会花时间去查明该产品是否存在。

如果您需要检查该行是否存在,Cassandra 为轻量级事务 ( http://www.datastax.com/dev/blog/lightweight-transactions-in-cassandra-2-0 ) 提供了一个 paxos 实现,它可以为您提供一些 IF [NOT EXISTS] 类型的逻辑(以显着的性能损失) .