我们应该使用Cassandra NoSQL计数器还是LWT来生成自动增量整数密钥?

时间:2015-01-16 15:23:59

标签: cassandra nosql

我们想在Cassandra中生成自动增量整数键。这在传统数据库中是微不足道的任务,但在Cassandra中并不复杂。

我尝试过Counter数据类型,可以使用

递增
value=value+1

并尝试使用

进行LWT
UPDATE myTable SET value=newValue  IF value=oldValue.
(where newValue=oldValue+1 for auto increment)

我一直强烈反对反变量。我不知道为什么。能否帮助我了解上述两种方法的优缺点?

1 个答案:

答案 0 :(得分:3)

从免责声明开始, 您很可能不希望在C *中使用自动递增的整数键。更有可能是你想要的UUID或TimeUUID。但如果您确实需要读取自动递增值。

State and Distributed Systems不喜欢混合。一般来说,无论什么时候你想制作“真的”。确定您的分布式系统的状态,您必须检查所有副本,从而牺牲可用性/分区容差。 LWT使用Paxos来允许检查和设置操作但是为了做到这一点,它们需要一定数量的节点,并且比正常的Cassandra操作慢得多。 LWT应仅用于应用程序中使用的一小部分操作。只要对计数器变量几乎没有争用,并且每次写入都不需要它,你应该没问题。

C *中的计数器是一种非常不同的实现。在较旧版本的C *中,由于失去追踪价值的能力,它们有点臭名昭着。它们的实施已被重写以大大提高稳定性,但需要在应用程序方面进行仔细规划以保证独特的操作。你可以想象两个客户同时递增一个计数器,每个人都认为他们已经收到了一个唯一的值。因此,我认为你应该使用LWT,如果你真的需要确保唯一性。