【发布时间】:2014-05-05 18:42:28
【问题描述】:
我想我最好问这个问题,而不是在没有任何实验的情况下猜测。
我们计划添加一个新列作为代码
代码需要具备以下特点:
- 它必须是独一无二的。
- 最好是字符串,我们迁移数据要容易得多
- 必须是随机的,有足够的空间以避免碰撞。
我打算只使用 UUID。
create table code(
id char(36),
unique index index1 (id)
) type=innodb;
我们的操作行为:
- 插入新代码(每天最多 20K)
- 逐行获取(非常繁重,我们可能需要在有限的时间内获取数据库中的每一行,例如 10 分钟)。
现在我有点担心性能。我们的数据库中已经有 400K 行。未来它可能会增长到 10M 或 30M。
您有什么建议或有什么问题吗?
顺便说一句:我不能使用自动递增的 int,因为它不是随机的。
【问题讨论】:
-
没有一个 UUID 的一部分是随机的。它们是 100% 计算的。您将与随机发生碰撞。如果您提供更多详细信息,您将获得更好的答案。为什么随机?行数据中还有什么?多大?
-
没有。 可以生成 UUID。或者它们可以是随机的。请参阅:docs.oracle.com/javase/1.5.0/docs/api/java/util/UUID.html(第 4 版)
-
不,不会有任何冲突。 UUID 使用 SecureRandom 生成 16 个随机字节。即使有 3000 万个条目,发生冲突的机会也大约是 1 比 10^31