从nHibernate HiLo切换到GUID

时间:2011-02-01 14:03:10

标签: nhibernate guid hilo

是否可以从HiLo切换到GUID.comb?据我所知,后者结合了HiLo的优势,即管理Ids客户端,而不是需要调用数据库来获取新的Id,其优点是不可能用完Ids。

目前我们遇到的问题是HiLo生成ID如此之大,Int32(这应该是Int64,但这更像是我前任的WTF)还不够大。我们可以更改为Int64,但这只是意味着我们将在以后而不是更快地遇到问题。

由于Ids不需要有意义,因此切换到GUID似乎是合乎逻辑的。然而,由于我从未尝试过这样的转换,我想知道是否有人可以帮助我评估这样的影响。

1 个答案:

答案 0 :(得分:6)

实际上,切换到int64通常就足够了。请记住,您要再添加32位,将ID空间乘以+/- 20亿。你确定这还不够吗?

关于切换到Guid,它涉及(假设一个实时DB):

  • 创建新的pk / fk列
  • 使用新值填充pk列
  • 根据旧列填写fk列
  • 删除当前的外键和主键
  • 删除旧的pk / fk列
  • 创建新的主键和外键
  • 更改id属性类型和生成器(这是涉及.net代码的唯一步骤)

无论如何,虽然GUID提供“无限”ID并且它很容易生成,但它的缺点是两倍大(128位)并且稍微难以手动操作(即,您将依赖于复制和粘贴时调试