我是Cassandra的新手,我来自一个关系世界。当我玩CQL时,我发现我没有发现任何差异。例如:
当我执行以下查询
时更新产品套装价格= 100,货币=美元,其中productID = 12345;
然后CQL在表中创建新行。在RDBMS中,由于没有productID = 12345的产品,因此无法工作。
你能提供一些见解吗?
答案 0 :(得分:1)
你发现的是大多数Cassandra写的(除了少数例外)写没有读取。这有很多原因 - 一个是性能(首先读取很慢),但也考虑到第一个INSERT可能发生在另一个服务器上,还没有复制到处理UPDATE的服务器。
你真正说的是“将产品12345的价格设定为100美元”。如果没有这样的产品(但是?),它仍然会设定价格,因为它不会花时间来确定产品是否存在。
如果您需要检查该行是否存在,Cassandra为轻量级事务(http://www.datastax.com/dev/blog/lightweight-transactions-in-cassandra-2-0)提供了一个paxos实现,它可以为您提供一些IF [NOT EXISTS]
类型逻辑(性能显着下降)。