2010-03-29 51 views
0

由於我的hi/lo算法,我正在爲表&生成代理鍵,每次重新啓動/重新啓動計算機時,可能會出現間隙。對於整數類型的主鍵,爲什麼避免差距很重要?

T1: current hi = 10000000 
    (sequence being dished out .. 1 to 100) 
     Assume that current sequence is 10000050 

T2: restart system. 

T3: System gives out the next_hi as 10000100 
    (sequence being dished out now ranges from 101 to 200) 

T4: Next request for a key returns 100001001 

從主鍵或索引內部的角度來看,爲什麼序列中沒有空位是很重要的?我正在問這是爲了更深入地瞭解mysql。

+0

不是。 [更多字符來滿足堆棧溢出的最低限度] – Cam 2010-03-29 02:34:47

回答

4

從主鍵或索引內部的角度來看,爲什麼序列中沒有空位很重要?

這不重要 - 什麼使你相信它是?
所有與主鍵有關的問題是它對錶中的所有數據都是唯一的。無論價值是什麼,或者前後的記錄都是順序值。

2

爲什麼它很重要,有在序列

並不重要沒有間隙。差距很好。出於性能原因,差距是可以容忍的。

保證有一個嚴格增加的序列(即該序列與行創建時間具有相同的排序)是有用的。但即使如此,在集羣配置(使用本地計數器緩存)中也無法保證。

1

誰告訴你的?代理鍵根本沒有意義,所以不會有任何差距。什麼是沒有意義的東西有什麼差距?我們使用UUID作爲我們的密鑰,如下所示: 6ba7b812-9dad-11d1-80b4-00c04fd430c8。什麼是「下一個」鍵?沒有人知道,沒人在乎。只要它是獨一無二的,沒關係。

+0

我在博客文章的某處閱讀它。我不記得這個博客了。 – 2010-03-29 08:58:55