我应该使用uid作为Rails的主键吗?



我想使用Spine.js客户端框架,它生成uuid作为模型的id,然后可以将其持久化到服务器。如果我只是为模型使用客户端生成的uid,并将它们保存在服务器上,这将是最简单的。

在Rails中使用客户端生成的uuid作为主键有什么缺点?

一般来说,我不喜欢"主键"的UUID,然而,分布式模型是一个非常适合它们的模型,假设UUID是适当生成的;-)根据其他问题,它仍然可能不是主键,而是另一个候选键(想想由唯一索引支持的"备用PK")。

我知道的两个"问题"是:

  1. uid类似于IPv6。它们,因此不是对人类最友好的值。另一方面,它们在格式上非常一致,很容易被发现。使用你的复制粘贴技能。

  2. 完全随机 uid倾向于碎片索引;如果用作PK,通常是聚集的(相对于可能只是指向记录的指针的索引),这可能会导致可怕的碎片。然而,

    1. 一个好的数据库维护计划应该解决这个问题:按时间表重新索引碎片索引

    2. 特殊的UUID生成方案,如SQL Server中的NEWSEQUENTIALID,虽然"更可预测",但也可以生成单调递增的值,从而减轻索引/集群碎片。

快乐编码。

假设使用关系数据库来存储这些值,需要注意的一件事是,当表很大时,uuid作为主表键的性能通常很差。

查看我们无畏的领导者撰写的博客文章中的信息讨论:主键:id与GUIDs

相关内容

  • 没有找到相关文章

最新更新