【发布时间】:2016-01-04 03:30:38
【问题描述】:
我们的 API 旨在为所有记录在 MySQL 中生成 UUID。
但是,所有表中生成的 99% 的记录共享相同的 UUID 的最后 3 个块。我假设这是因为 MySQL 使用 v1 的 UUID,它基于 Mac 地址,在同一台服务器上不会改变。熵似乎不足以对唯一性有高度的信心。
例如XXXXXXX-XXXX-46fc-bb08-f9b12276ed01
这是根据维基百科验证的:
“鉴于现代处理器的速度,在同一台机器上连续调用版本 1 UUID 的生成器的幼稚实现可能会产生相同的 UUID,从而违反唯一性属性。(非幼稚实现可以通过以下方式避免此问题,例如,记住最近生成的 UUID,“装袋”未使用的 UUID,并使用装袋的 UUID,以防即将生成重复。)”
听起来,如果在一定时间内进行了足够多的 API 调用,那么冲突将是肯定的(只是达到交易量的问题,例如每秒 1000 笔交易?即接近每毫秒 1 笔交易)。
假设:UUID() 是 MySQL 二进制文件的函数,无法更改。
我需要在多大程度上评估更改以防止冲突,以及如何使 wikipedia 推荐的 MySQL 更改为“口袋”UUID?
【问题讨论】: