Chima Asked: 2024-05-12 20:56:14 +0800 CST2024-05-12 20:56:14 +0800 CST 2024-05-12 20:56:14 +0800 CST UUID 与长主键 772 在数据库设计中,当考虑主键时,与Long数据类型相比,使用UUID有哪些优点和缺点? 我遇到了两个不同的教程,分别实现了它们,我只是好奇哪一个更好。 database 2 个回答 Voted Best Answer Route Halo 2024-05-12T21:34:19+08:002024-05-12T21:34:19+08:00 比较UUID和Long作为数据库主键类型: 1. 长: Long或BigInt是 64 位,小于UUID(128 位)。 Long生成速度更快,始终生成唯一 ID,但不是随机的。例如,在 Spring Boot 中: @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; 此代码将生成一个从 0 开始递增的密钥。例如: 0, 1, 2, ...。当然,从 0 开始递增的密钥对于 XSS 之类的攻击来说并不安全(因为它具有易于预测的特性)。 2.UUID: Long是128位,比Long(64位)多。 与Long一样,UUID总是生成唯一的 ID(如558012d6-7db5-4053-b838-6a1ef4ad019b),但它是随机的,速度有点慢并且更难预测。这意味着它比Long更安全。 总而言之,两者都可以很好地用作数据库中的主键。我认为UUID更好,但我更喜欢使用Long,因为它更容易在程序中实现。 user902383 2024-05-13T01:14:31+08:002024-05-13T01:14:31+08:00 我想说这取决于:) Longs 对性能更好。它们更小,DBA 方面更容易处理它们的索引,冲突的机会更少,并且更容易调试。 另一方面,使用Long披露您系统上的一些信息。您拥有多少数据等,这些数据可以被潜在的不良行为者使用。因此,如果您更关心安全性而不是性能,请选择 UUID。 所以我想说一切都取决于你正在构建的内容,如果你正在构建暴露给第三方的系统,请使用 UUID,如果你构建内部的东西,请随意使用数字 ID
比较UUID和Long作为数据库主键类型:
1. 长:
Long或BigInt是 64 位,小于UUID(128 位)。
Long生成速度更快,始终生成唯一 ID,但不是随机的。例如,在 Spring Boot 中:
此代码将生成一个从 0 开始递增的密钥。例如:
0, 1, 2, ...
。当然,从 0 开始递增的密钥对于 XSS 之类的攻击来说并不安全(因为它具有易于预测的特性)。2.UUID:
558012d6-7db5-4053-b838-6a1ef4ad019b
),但它是随机的,速度有点慢并且更难预测。这意味着它比Long更安全。总而言之,两者都可以很好地用作数据库中的主键。我认为UUID更好,但我更喜欢使用Long,因为它更容易在程序中实现。
我想说这取决于:)
Long
s 对性能更好。它们更小,DBA 方面更容易处理它们的索引,冲突的机会更少,并且更容易调试。另一方面,使用
Long
披露您系统上的一些信息。您拥有多少数据等,这些数据可以被潜在的不良行为者使用。因此,如果您更关心安全性而不是性能,请选择 UUID。所以我想说一切都取决于你正在构建的内容,如果你正在构建暴露给第三方的系统,请使用 UUID,如果你构建内部的东西,请随意使用数字 ID