-1

我有一个系统分析师坚持使用 oracle 序列而不是 UUID,因为他不熟悉它。

我有几个问题,希望社区可以帮助我。

1)hibernate UUID是如何生成来保证唯一性的?

我知道 oracle SYS_GUID() 使用

SYS_GUID 生成并返回一个由 16 个字节组成的全局唯一标识符(RAW 值)。在大多数平台上,生成的标识符由主机标识符、调用函数的进程或线程的进程或线程标识符以及该进程或线程的非重复值(字节序列)组成

2) 如果使用了 UUID,hibernate 会自动重新生成一个 UUID 来提交该行吗?

我知道这种情况很少见,但如果休眠可以做到这一点,但他坚持认为有可能发生并且交易将失败。

3) 使用 UUID 而不是 oracle 序列生成器有什么好处?

4

1 回答 1

2

Rare 甚至没有开始描述两次随机生成相同 UUID 的远程可能性。

如关于UUID的Wikipedia arcticle 所示

在 n 次尝试后发生冲突的可能性。

n                               probability
68,719,476,736 = 2**36          0.0000000000000004 (4 × 10−16)
2,199,023,255,552 = 2**41       0.0000000000004 (4 × 10−13)
70,368,744,177,664 = 2**46      0.0000000004 (4 × 10−10)

您可以在 814 天内以每秒 100 万个的速度生成 UUID,并且只有 4 * 10**-10 的机会生成副本。

更不用说GUID/UUID 数据库键的优缺点了

于 2013-07-31T02:09:03.527 回答