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

时间:2011-07-30 05:58:46

标签: ruby-on-rails model guid uuid spine.js

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

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

2 个答案:

答案 0 :(得分:11)

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

我所知道的两个“问题”是:

  1. UUID就像IPv6。它们,因此不是最人性化的价值观。另一方面,它们在格式上非常一致并且易于发现。有你的copy'n'paste技能。

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

    1. 良好的数据库维护计划应解决此问题:按计划重新索引碎片索引

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

  3. 快乐的编码。

答案 1 :(得分:3)

假设您正在使用关系数据库来存储这些值,需要注意的一点是,当表很大时,UUID通常作为主表键执行得很差。

查看我们无畏的领导者撰写的博客文章中的信息性讨论:Primary Keys: IDs versus GUIDs