繁体   English   中英

使用Cassandra 3.0进行序列生成器/自动增量

[英]Sequence Generator / Auto Increment using Cassandra 3.0

我阅读了很多Cassandras文档并检查了Counter的变化等。 但它的接缝是Cassandra没有提供默认和标准的方式来动态生成增量序列。

我发现只是通过比较和设置来使用IF语句/子句。

通过这种方式,可以检查文档是否存在,如果不存在则生成文档。 由于这是通过被视为群集的仲裁算法来完成的,因此它应该易于使用且安全但具有高延迟。

为了避免这种延迟,可以通过将nextSequenceId递增千而不是1来生成(保留)一千个ID。 这种方式只有在生成千位中的第一个时才支付延迟(或者如果它过早地完成它将几乎没有延迟)。

我知道这样做会造成热点或拥堵。

避免这种拥塞的一种方法是使用更多的序列号生成器,所有序列号生成器都通过不同的偏移量(模数)并通过选择模来随机选择某个序列生成器来限制冲突的可能性。

所以这将是我天真的实施。

自从Cassandra 3.0上街以来,我只想知道三件事:

  1. Cassandra是否提供了一种更智能的序列实现方式。
  2. Cassandra是否提供了一些缓解实现这一目标的痛苦? 我的意思是我做了一个阅读,而不是比较和设置。 还有更聪明的东西吗?
  3. 是否存在任何库已经给我一种序列号?

Jonathan为这个主题开了一个Jira - https://issues.apache.org/jira/browse/CASSANDRA-9200

3.0还没有出来,但似乎提交者正在最终确定3.0的功能,并且9200似乎设置为3.1(这实际上意味着“3.0之后的某个时间” - 可能是3.1,也许是3.2,可能是4.0)。

对于你的问题:

1)不,此时没有内置的方法在cassandra中进行排序

2)不,如果您能够容忍不严格增加的序列,那么您将不得不进行先读后读或阻止每个节点的序列部分

3)Twitter一度发布了Snowflake( https://github.com/twitter/snowflake ),但它现在已经退役了。 通常,我倾向于使用类型1 UUID,它是基于随机组件的时间戳。 甚至UUID都不是万无一失的,但对于我们的工作量来说,它们往往“足够好”。 Simpleflake( http://engineering.custommade.com/simpleflake-distributed-id-generation-for-the-lazy/ )讨论了我提供的链接的权衡,并提供了自己的生成器。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM