【问题标题】:what data type should I use for ids on database?我应该为数据库上的 id 使用什么数据类型?
【发布时间】:2019-07-04 12:01:48
【问题描述】:

我看到很多关于整数(增量)和 uuid 应该用于数据库 id 的辩论和文章。

介绍了整数和uuid的一些优缺点。

例如, 整数:快速,但可用大小有限(除非您使用 bigint) uuid:非常独特且安全得多,但速度慢,而且存储- 消费

然后,我想知道是否使用长度约为 10( varchar(10) )、由大小写字母和整数组成的随机字符串可以解决问题,因为它们的大小不是很大并且可以涵盖广泛的数据(62^10 种方式,如果 10 个字符)。

所以,我的问题是,这样做是好是坏?

【问题讨论】:

  • 听起来您只是在使用更糟糕的 uuid——您确定现有的 uuid 生成是您系统中的瓶颈吗?
  • 没有,但是我发现一些文章说使用 uuid 不是一个好主意,因为它需要更大的容量,所以我想知道是否应该使用它。
  • 另外,我觉得我不需要为每个表上的每个id都使用uuid,例如,可以将小型数据存储在int中,因为这样更有效。然而,这种用法使系统变得复杂。
  • 我认为我们使用“复杂”这个词的方式不同。
  • 那么,在系统中同时使用 uuid 和 integer 是比较常见的,还是只使用两者之一?

标签: database database-design uuid


【解决方案1】:

就数据库设计而言,没有绝对的好坏之分。您应该根据自己的需要设计数据库。

您提到了使用 int 和 uuid 的一些优缺点,现在我建议您列出您的需求,以便您可以选择使用哪一个。

另外请记住,您可以使用一些技巧来绕过 int 和 uuid 的限制。

例如,如果 uuid 似乎是您的正确选择,但在数据库中查找它们的速度让您感到困扰,那么您可以简单地使用索引来最大化 uuid 的速度。如果你有很多写入并且你需要它们快速,你可以使用预先生成的 uuid。 (生成一些 uuid,对它们进行索引,并在每次需要时选择其中一个)

对于整数,您可以简单地使用 2 个整数作为您的 id,这两个整数一起可以使 id 或其他一些数学算法更安全但又足够快。

这些只是您可以如何优化系统的两​​个示例,以便它足够快并以尽可能最好的方式满足您的需求。

对于可以在数据库设计中同时使用 int 和 uuid 的情况:如果它是满足您的需求并从中获得最佳性能的最佳方式,那是完全可以的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多