使用randomUUID时的UUID冲突

时间:2019-02-17 17:19:38

标签: kotlin uuid

我有一个Google PubSub主题,用于发布对象。 我的服务正在侦听该主题(4个线程),进行一些转换,然后将结果写入数据库。服务而不是数据库也会为该结果分配一个ID(URN)。

URN生成为"urn:namespace:name:${UUID.randomUUID()}"

很长一段时间后阅读主题时:

17-02-2019 17:41:55.657 [pool-2-thread-3] ERROR o.h.e.jdbc.spi.SqlExceptionHelper.logExceptions - ERROR: duplicate key value violates unique constraint "name_entity_pkey"
  Detail: Key (id)=(urn:namespace:name:d7543a6b-6d09-4df2-b9af-66821e0a8423) already exists.
17-02-2019 17:41:55.657 [pool-2-thread-1] ERROR o.h.e.jdbc.spi.SqlExceptionHelper.logExceptions - ERROR: duplicate key value violates unique constraint "name_entity_pkey"
  Detail: Key (id)=(urn:namespace:name:d7543a6b-6d09-4df2-b9af-66821e0a8423) already exists.

两个UUID 可能都是在同一微秒内生成的,有趣的是,该异常表明该UUID也是在过去(约2019-02-17T08:23:30.972695+01:00时生成的)

虽然我可以理解,如果所有参数(时间)也都相同(它们应该至少相差十亿分之一秒),randomUUID()会生成相同的UUID,但是从我看来在这里做碰撞的频率更高。

所以我的问题是:是否存在我不知道的陷阱或任何更随机的实现?

我使用openJDK-11。

0 个答案:

没有答案