使用 System.currentTimeMillis() 生成唯一的数据库 ID 是否安全?

发布于 2024-10-15 07:10:54 字数 203 浏览 5 评论 0原文

我在 Java 中使用 System.currentTimeMillis() (返回一个 long 整数)来为数据库实体生成唯一的 ID,因为我认为这些时间是不可能的在任意点重叠。

这是一个安全的假设吗?

例如,目前我得到这个:

1296691225227

I'm using System.currentTimeMillis() (which returns a long integer) in Java to generate a unique ID for database entities since I assume that it's not possible for these times to overlap at any point.

Is this a safe assumption?

For example, at the moment I get this:

1296691225227

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

你又不是我 2024-10-22 07:10:54

不,这不安全。一毫秒对于 CPU 周期来说是一段很长的时间(它们以每秒数十亿个周期运行,而不是数千个周期),因此,如果一次有多个请求进入,或者如果多个线程都尝试创建数据库条目,它们将看到相同的 CPU 时间,并且最终会出现按键冲突。如果系统时钟以某种方式被重置或更改为较早的时间,您也会遇到麻烦。

No, this is not safe. A millisecond is a long time in CPU cycles (they run at billions of cycles per second, not thousands), so if multiple requests come in at a time or if multiple threads all try creating database entries they'll see the same CPU time and will end up with colliding keys. You'd also have trouble if the system clock somehow got reset or changed to an earlier time.

眼泪也成诗 2024-10-22 07:10:54

是的,您不太可能会发生冲突(除非您处于高负载系统中,在这种情况下,发生冲突的可能性非常),但仍然有可能。

Java 有一个现有的机制来生成唯一标识符 - java.util.UUID。它有生成随机 ID 的方法。

我强烈建议使用它。

It's fairly unlikely you'll get a clash, yes (unless you're in a high-load system, in which case it's very likely), but still possible.

Java has an existing mechanism for generating unique identifiers, though - java.util.UUID. It has methods to generate random IDs.

I strongly suggest using that instead.

浅听莫相离 2024-10-22 07:10:54

如果您的代码曾经在集群环境中运行,则会增加发生 id 冲突的可能性。

大多数 JPA 数据库都有自己生成唯一 ID 的方法。

http://en.wikibooks.org/wiki/Java_Persistence/Identity_and_Sequencing

If your code ever runs in a clustered environment, it increases the odds that you have id collisions.

Most JPA databases have ways to generate unique ids by themselves.

http://en.wikibooks.org/wiki/Java_Persistence/Identity_and_Sequencing

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文