何时适合在Web项目中使用UUID?

7
我正在设计一个新项目的数据库,不确定是否使用UUID或普通的表唯一自增ID。到目前为止,我建立的网站都在单个服务器上运行,非常高的流量从来没有太过担心。然而,这个Web应用程序最终将在多个服务器上并发运行,提供API,并需要处理数千个请求每秒,我想确保我现在选择的设计不会以后瘫痪任何这些可能性。
当然,我有我的怀疑,通过我提出问题的方式应该很清楚,但我想听听那些有更多经验的人,如果我有或没有UUID,我以后可能会遇到什么麻烦,我真正应该根据什么来做出决定。
简而言之:我应该考虑哪些因素来决定是否为所有数据库模型使用UUID,以便任何一个对象可以由一个字符串唯一标识,并且在什么情况下适合将其用作主键,而不是逐表自动增量?

注意: 我看过这个问题(何时真正需要将UUID作为设计的一部分?),并阅读了所有答案,但它们大多回答了“UUID很少冲突”,而不是“何时适合使用它们”。

2个回答

5
我在决定使用UUID还是自动递增ID时,考虑的一个因素是它们是否会展示给用户,如果是的话,我是否想让用户知道我有多少这样的表。例如,如果我不想公开我的网站注册用户数量,我就不会分配自动递增用户ID。

另外,针对你提出的另一个具体问题,使用多个服务器仍然可以使用自动递增ID(虽然内置的MySQL不支持)。您只需要从不同的偏移量开始启动所有ID,并相应地递增。也就是说,如果您有3个服务器,您可以从1开始启动服务器A,从2开始启动服务器B,从3开始启动服务器C,然后每次将ID递增10而不是1。这样,您可以保证不会发生碰撞。

最后,我考虑的最后一件事是性能对我的应用程序有多重要。整数比基于字符串的UUID更容易索引,所以索引更小,搜索更快等。

3

UUID或GUID在网络上非常有用,特别是在IT技术方面。如果您使用自动递增的值来存储用户ID,任何人都可以查看您的网页源代码并了解其使用的简单性。然后他们可以尝试使用任何整数值来获取他们不应该看到的数据。

GUID不是按任何顺序创建的,因此如果您一次创建它们,它们的顺序就不容易被猜测。

我认为对于简单的查找类型数据,如ColorId 1 = Blue,2 = Red,3 = Green,不需要使用GUID。

GUID也非常适用于会话和状态管理。

这是我的$0.02。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接