我正在为表格生成代理键。由于我的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 :(得分:4)
从主键或索引内部角度来看,为什么序列中没有间隙很重要?
这不重要 - 是什么导致你相信它? 主键的所有重要性在于它对表中的所有数据都是唯一的。无论值是什么,或者之前和之后的记录是否为顺序值都无关紧要。
答案 1 :(得分:2)
为什么序列中没有空隙是很重要的
这并不重要。差距很好。出于性能原因,可以容忍差距。
有用的是保证具有严格增加的序列(即序列具有与行创建时间相同的顺序)。但即使这样也不能保证在集群配置中(使用本地计数器缓存)。
答案 2 :(得分:1)