【发布时间】:2010-09-16 14:45:00
【问题描述】:
总结:我正在开发一个持久性 Java Web 应用程序,我需要确保我持久化的所有资源都具有全局唯一标识符以防止重复。
细则:
- 我没有使用 RDBMS,所以我没有任何花哨的序列生成器(比如 Oracle 提供的那个)
- 我希望它更快,最好全部在内存中 - 我宁愿不必打开文件并增加一些值
- 它需要是线程安全的(我预计一次只有一个 JVM 需要生成 ID)
- JVM 实例之间需要保持一致性。如果服务器关闭并启动,ID 生成器不应重新生成它在先前实例化中生成的相同 ID(或者至少机会必须非常非常渺茫 - 我预计会有数百万的预置资源)李>
- 我已经看过 EJB 唯一 ID 模式文章中的示例。它们对我不起作用(我宁愿不完全依赖 System.currentTimeMillis(),因为我们将每毫秒保留多个资源)。
- 我查看了this question 中提出的答案。我对他们的担忧是,随着时间的推移,我获得重复 ID 的可能性有多大?我对使用java.util.UUID 代替UUID 的建议很感兴趣,但同样,重复的可能性需要非常小。
- 我正在使用 JDK6
【问题讨论】:
-
您是否在不同的机器上运行应用程序的多个实例?如果是,您是否可能分批启动机器——以便多个进程可能在同一毫秒内启动?如果攻击者找到了导致 UUID 冲突的方法,这会危及您的应用程序的安全性吗?
-
(A) 会生成多少ID?多快? (每秒/分钟多少)(B)是的,UUID 正是为您的目的而发明的。
标签: java persistence uuid uniqueidentifier