Hazelcast Snowcast序列生成器时期和id长度

时间:2017-02-22 11:21:06

标签: hazelcast

我将使用Snowcast https://github.com/noctarius/snowcast作为我的应用程序的唯一ID生成器。我将在Web应用程序URL中公开这些ID。

现在我有两个选项如何使用我的Spring Boot应用程序配置Snowcast音序器:

@Bean
public SnowcastSequencer snowcastSequencer(Snowcast snowcast) {
    Calendar calendar = GregorianCalendar.getInstance();
    calendar.set(2017, Calendar.FEBRUARY, 1, 0, 0);
    SnowcastEpoch snowcastEpoch = SnowcastEpoch.byTimestamp(calendar.getTimeInMillis());

    return snowcast.createSequencer("sequence_generator", snowcastEpoch);
}

@Bean
public SnowcastSequencer snowcastSequencer(Snowcast snowcast){
    SnowcastEpoch snowcastEpoch = SnowcastEpoch.byTimestamp(new Date().getTime());

    return snowcast.createSequencer("sequence_generator", snowcastEpoch);
}

作为基于snowcastSequencer.next()纪元的Calendar方法调用的结果,我获得了以下长值:

15617925960433665

但是基于基于Date的纪元:

12046041089

我对较短的ID感兴趣..比如第二个,但我担心ID可能的唯一性问题。

如果有唯一身份证,你可以告诉或者根据日期使用纪元吗?

1 个答案:

答案 0 :(得分:1)

如果您查看这些数字是如何生成的,您会看到没有更短或更长的ID,因为单个ID由多个部分组成。时间戳只是其中之一。也就是说,随着时间的偏移(前几位)的增加,ID会随着时间的推移而改变。在某些时候,long的值将从Java点切换到负值,因为所有位都被使用(即使是最高位)并且它将开始看起来是负的(或者你需要将它打印为unsigned long,将它放入一个大问题。)

无论如何说,没有短或更长的东西,但它取决于纪元偏移(自纪元开始以来已经过了多少毫克)以及单毫秒内的节点/ ID数量。

PS:如果只是在应用程序运行时生成唯一ID,两者都非常好。