我是 Cassandra 的新手,我来自关系世界。当我在玩 CQL 时,我观察到我没有发现任何区别。例如:
当我执行以下查询时
更新产品设置价格=100,货币=美元,其中产品ID=12345;
然后 CQL 在表中创建新行。在 RDBMS 中这不起作用,因为没有 productID = 12345 的产品。
你能提供一些见解吗?
我是 Cassandra 的新手,我来自关系世界。当我在玩 CQL 时,我观察到我没有发现任何区别。例如:
当我执行以下查询时
更新产品设置价格=100,货币=美元,其中产品ID=12345;
然后 CQL 在表中创建新行。在 RDBMS 中这不起作用,因为没有 productID = 12345 的产品。
你能提供一些见解吗?
您发现大多数 Cassandra 写入(除了少数例外)都是写入而不读取。造成这种情况的原因有很多——一个是性能(首先读取速度很慢),但还要考虑到第一个 INSERT 可能发生在另一台服务器上,并且尚未复制到处理 UPDATE 的服务器上。
您真正要说的是“将产品 12345 的价格设置为 100 美元”。如果不存在这样的产品(还没有?),它仍在设定价格,因为它不会花时间找出产品是否存在。
如果您需要检查该行是否存在,Cassandra 为轻量级事务(http://www.datastax.com/dev/blog/lightweight-transactions-in-cassandra-2-0)提供了一个 paxos 实现,可以提供某种IF [NOT EXISTS]
类型你的逻辑(在显着的性能损失)。