我想使用Spine.js客户端框架,它会将UUID生成为模型的ID,然后可以将其持久保存到服务器。如果我只是为模型使用客户端生成的UUID并将它们保存在服务器上,那将是最简单的。
在Rails中使用客户端生成的UUID作为主键有什么缺点?
答案 0 :(得分:11)
我一般不喜欢UUID的“主键”,但是,假设UUID生成得恰当的话,分布式模型就是它们非常适合的模型;-)根据其他问题,它仍然可能不是 主键,而是另一个候选键(想象一个由唯一索引支持的“备用PK”)。
我所知道的两个“问题”是:
UUID就像IPv6。它们长,因此不是最人性化的价值观。另一方面,它们在格式上非常一致并且易于发现。有你的copy'n'paste技能。
完全随机 UUID倾向于碎片索引;如果用作PK,通常是聚集的(相对于可能只是指向记录的索引),这可能导致可怕的碎片。 然而;
良好的数据库维护计划应解决此问题:按计划重新索引碎片索引。
特殊的UUID生成方案,例如NEWSEQUENTIALID
in SQL Server,虽然“更可预测”,但也可以生成单调递增的值,从而减轻索引/群集碎片。
快乐的编码。
答案 1 :(得分:3)
假设您正在使用关系数据库来存储这些值,需要注意的一点是,当表很大时,UUID通常作为主表键执行得很差。
查看我们无畏的领导者撰写的博客文章中的信息性讨论:Primary Keys: IDs versus GUIDs