[英]Sequence Generator / Auto Increment using Cassandra 3.0
我阅读了很多Cassandras文档并检查了Counter的变化等。 但它的接缝是Cassandra没有提供默认和标准的方式来动态生成增量序列。
我发现只是通过比较和设置来使用IF语句/子句。
通过这种方式,可以检查文档是否存在,如果不存在则生成文档。 由于这是通过被视为群集的仲裁算法来完成的,因此它应该易于使用且安全但具有高延迟。
为了避免这种延迟,可以通过将nextSequenceId递增千而不是1来生成(保留)一千个ID。 这种方式只有在生成千位中的第一个时才支付延迟(或者如果它过早地完成它将几乎没有延迟)。
我知道这样做会造成热点或拥堵。
避免这种拥塞的一种方法是使用更多的序列号生成器,所有序列号生成器都通过不同的偏移量(模数)并通过选择模来随机选择某个序列生成器来限制冲突的可能性。
所以这将是我天真的实施。
自从Cassandra 3.0上街以来,我只想知道三件事:
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.