2011-02-01 41 views
4

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

目前我们遇到了HiLo生成ID很大的问题,Int32(应该是Int64,但这更像是我的前任的WTF)不够大。我们可以更改为Int64,但这意味着我们将在稍后而不是早些时候遇到问题。

由于ID不需要有意义,因此切换到GUID似乎合乎逻辑。然而,由于我从来没有尝试过这样的转换,我想知道这里有没有人能帮助我评估这样的影响。

+0

好问题,我们在我们的项目中也有HiLo。我相信很难为你改变现有的数据,如果你使用int64,那么也很难用完id。所以也许这是一个选择? – Restuta 2011-02-01 14:09:43

+2

您是否尝试过让`lo`部分更小以保持id更小的差距?我目前使用10,而不是默认的100,并且还没有遇到任何问题... – Rippo 2011-02-01 14:32:36

回答

6

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

关于切换到的Guid,它涉及(假设活DB):

  • 创建新的PK/FK列
  • 基础上,用新值
  • 灌装FK列灌装PK列旧的
  • 删除目前国外和主键
  • 删除旧的PK/FK列
  • 创建新的主和外键
  • 更改ID属性类型和发电机(这是一个涉及.NET代码的唯一步骤)

不管怎么说,GUID提供了“无限”的ID,很容易产生,它也有缺点是两倍大(128位),稍微难以手动操作(即你会在调试时依靠复制&粘贴