我正忙于一个新项目的数据库设计,我不确定是否使用UUID或普通的表唯一自增id。
到目前为止,我建立的网站都在一台服务器上运行,非常大的流量从来都不是太令人担忧的问题。然而,这个 Web 应用程序最终将在多个服务器上同时运行,提供 API,并且需要每秒处理数千个请求,我想确保我现在选择的设计不会在以后削弱任何这些可能性。
当然,我有我的怀疑,并且通过我提出问题的方式应该很清楚,但我想听听那些有更多经验的人的意见,如果我有或没有 UUID,我以后会遇到什么麻烦,并且我的决定真正应该基于什么。
So, in short:我应该考虑哪些因素来决定是否对所有数据库模型使用UUID,以便任何一个对象都可以通过一个字符串唯一标识,以及何时适合使用它作为主键,而不是表按表自动递增?
Note: 我见过这个问题(你什么时候真正被迫使用 UUID 作为设计的一部分?) https://stackoverflow.com/questions/703035/,并阅读所有答案,但他们大多回答“UUID 发生冲突的情况有多罕见”,而不是“何时适合使用它们”。
在决定 UUID 与自动增量 id 时,我考虑的一个因素是它们是否对用户可见,如果是,我是否希望用户知道我拥有该表的数量。例如,如果我不想公开我的网站的注册用户数量,我就不会分配自动增量用户 ID。
为了解决您提出的另一具体问题,仍然可以在多个服务器上使用自动递增 id(尽管不能使用内置 MySQL)。您只需要以不同的偏移量开始所有 id,并相应地递增。也就是说,如果您有 3 个服务器,您可以在 1 处启动服务器 A,在 2 处启动服务器 B,在 3 处启动服务器 C,然后每次将 id 增加 10 而不是 1。这样,您就可以保证不会发生冲突。
最后,我考虑的最后一件事是性能对我的应用程序有多重要。整数比基于字符串的 UUID 更容易索引,因此索引更小、搜索速度更快等。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)