发号器设计

145 阅读1分钟

对于有三个数据源、每个数据源上数据更新值变化如下图所示。

  1. 初始 init 时,每一个 数据库根据 sequence 索引值、设置 自己的 maxValue 为 index * innerStep

  2. 随后的更新阶段、每一个数据库根据 oldValue + step 来更新自己的 maxValue

更新机制如下图所示

UPDATE sequence
SET value        = IF((sequence.value + outerStep) % outerStep != 0 * 300, LAST_INSERT_ID(0), LAST_INSERT_ID(sequence.value + outerStep)),
    gmt_modified = NOW()
WHERE name = 'order'