在我的表格中,我在表格中使用自动增量PK,例如帖子和评论 我不想将PK暴露给HTTP客户端,但是,我仍然在我的API实现中使用它来执行快速查找。
当用户想要通过id检索帖子时,我希望在表格上有一个备用唯一键。 我想知道在这个领域使用什么样的最佳(最常见)方式 对我来说最明显的是使用UUID或GUID 我想知道是否有一种直接的方法来为此生成随机数字键而不是性能。
对于这种情况,您对最佳方法有何看法?
答案 0 :(得分:0)
MySQL有一个函数,它生成一个128位的UUID,版本1,如RFC 4122中所述,并通过UUID格式的自定义将其作为带有破折号的十六进制字符串返回。
https://dev.mysql.com/doc/refman/5.7/en/miscellaneous-functions.html#function_uuid
真正的UUID意味着在空间和时间上是全球唯一的。除非你需要一组独立的服务器来生成唯一值而没有一些中心唯一性验证,这通常会造成过度杀伤,这可能会造成瓶颈。
MySQL还有一个函数UUID_SHORT()
,它生成一个64位的数值。这不符合RFC,但它可能对您的情况有用。
https://dev.mysql.com/doc/refman/5.7/en/miscellaneous-functions.html#function_uuid-short
阅读UUID_SHORT()实现的描述。由于高位很少改变,低位只是单调递增,因此避免了将随机UUID值插入索引所导致的性能和碎片问题。
UUID_SHORT值也适用于MySQL BIGINT UNSIGNED
,而不必使用UNHEX()
。