首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么timeuuid没有碰撞?

为什么timeuuid没有碰撞?
EN

Stack Overflow用户
提问于 2016-11-03 21:22:04
回答 2查看 1.3K关注 0票数 5

我在读Datastax CQL引用

不可能覆盖不打算被覆盖的数据的冲突不会发生。

有人能解释一下为什么永远不会发生碰撞吗?这是不可能的还是“高度”不可能的?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-11-03 21:59:34

Cassandra的timeuuid是一个版本1 UUID,它基于生成UUID的机器的时间和MAC地址。

所用的时间精确到100 is,所以碰撞的几率非常小(1纳米秒是百万分之一毫秒)。

票数 5
EN

Stack Overflow用户

发布于 2016-11-04 08:12:20

Cassandra timeuuid是一个版本1 UUID(类型1 UUID),它基于:

  1. 一种时间戳,由1582年10月15日起每隔100纳秒计算一次(公历改革的日期)。
  2. 一个版本(它的值应该是1)。
  3. 一个变体(应该值为2)。
  4. 序列号,可以是计数器,也可以是伪随机数.
  5. 一个“节点”,它将是机器的MAC地址(这应该使UUID在不同的机器上唯一)。

对序列号使用伪随机数提供了16,384个机会中的1,每个UUID类都有一个唯一的id。

如果每毫秒产生超过10000 UUID,那么它们可能会发生碰撞。

1毫秒= 10^6 ns

通过这个,您可以生成10^6 UUID,如果我们采用ns级别的时间戳,但是当我们将时间戳作为100 ns计数时。

我们将在一毫秒内拥有最多10000张独特的时间戳。

现在在一台机器上产生更多的(它将有相同的MAC地址),有机会碰撞ass,我们也需要考虑序列号。

如果应用程序每毫秒生成10000以上,则使用另一列生成有助于避免冲突的复合键。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40411451

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档