2011-02-01 35 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位),稍微難以手動操作(即你會在調試時依靠複製&粘貼