我们想在Cassandra中生成自动增量整数键。这在传统数据库中是微不足道的任务,但在Cassandra中并不复杂。
我尝试过Counter数据类型,可以使用
递增value=value+1
并尝试使用
进行LWTUPDATE myTable SET value=newValue IF value=oldValue.
(where newValue=oldValue+1 for auto increment)
我一直强烈反对反变量。我不知道为什么。能否帮助我了解上述两种方法的优缺点?
答案 0 :(得分:3)
从免责声明开始, 您很可能不希望在C *中使用自动递增的整数键。更有可能是你想要的UUID或TimeUUID。但如果您确实需要读取自动递增值。
State and Distributed Systems不喜欢混合。一般来说,无论什么时候你想制作“真的”。确定您的分布式系统的状态,您必须检查所有副本,从而牺牲可用性/分区容差。 LWT使用Paxos来允许检查和设置操作但是为了做到这一点,它们需要一定数量的节点,并且比正常的Cassandra操作慢得多。 LWT应仅用于应用程序中使用的一小部分操作。只要对计数器变量几乎没有争用,并且每次写入都不需要它,你应该没问题。
C *中的计数器是一种非常不同的实现。在较旧版本的C *中,由于失去追踪价值的能力,它们有点臭名昭着。它们的实施已被重写以大大提高稳定性,但需要在应用程序方面进行仔细规划以保证独特的操作。你可以想象两个客户同时递增一个计数器,每个人都认为他们已经收到了一个唯一的值。因此,我认为你应该使用LWT,如果你真的需要确保唯一性。