0

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

当我执行以下查询时

更新产品设置价格=100,货币=美元,其中产品ID=12345;

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

你能提供一些见解吗?

4

1 回答 1

1

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

您真正要说的是“将产品 12345 的价格设置为 100 美元”。如果不存在这样的产品(还没有?),它仍在设定价格,因为它不会花时间找出产品是否存在。

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

于 2016-02-24T02:45:43.407 回答