我阅读了很多 Cassandras 文档并检查了 Counter 的更改等。但很明显,Cassandra 没有提供默认和标准的方式来动态生成增量序列。
我发现的只是通过比较和设置来使用 IF 语句/子句。
这种方式可以检查文档是否存在,如果不存在则生成一个。由于这是通过将集群视为集群的仲裁算法完成的,因此它应该易于使用且安全,但延迟很高。
为了避免这种延迟,可以通过将 nextSequenceId 增加一千而不是一来生成(保留)一千个 ID。这样一来,只有在生成一千个中的第一个时才为延迟付费(或者如果它过早完成,它将几乎没有延迟)。
我知道这样做会造成热点或拥堵。
避免这种拥塞的一种方法是使用更多的序列号生成器,它们都具有不同的偏移量(模数),并通过选择模数随机选择某个序列生成器来限制冲突的机会。
所以这将是我天真的实现。
自从 Cassandra 3.0 上市以来,我只想知道三件事:
- Cassandra 是否提供了一种更智能的实现序列的方式。
- Cassandra 是否提供了一些东西来减轻实现这一点的痛苦?我的意思是我做一个阅读,而不是我比较和设置。有什么更聪明的吗?
- 是否存在任何图书馆已经给了我一种序列号?