我正在为一个表生成一个代理键&由于我的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。
发布于 2010-03-29 10:32:58
从主键或索引内部的角度来看,为什么序列中没有间隙是很重要的?
这并不重要--是什么让你相信它?
对于主键,最重要的是它对于表中的所有数据都是唯一的。无论值是什么,或者前后的记录是否为顺序值,都不重要。
发布于 2010-03-29 10:31:57
为什么序列中没有间隙是很重要的
这并不重要。间隙很好。出于性能原因,可以容忍间隙。
有用的是保证具有严格递增的序列(即,该序列具有与行创建时间相同的顺序)。但即使在集群配置中也不能保证这一点(使用本地计数器缓存)。
发布于 2010-03-29 14:51:47
谁告诉你的?代理键没有任何意义,所以不能有任何间隙。没有意义的东西中的间隙是什么?我们使用UUID作为密钥,类似于: 6ba7b812-9dad-11d1-80b4-00c04fd430c8。“下一个”关键字是什么?没人知道,也没人关心。只要它是独一无二的,就没问题。
https://stackoverflow.com/questions/2535483
复制相似问题