前言
在分佈式場景下,往往我們需要分佈式ID,而數據庫自增序列應該是最基本的
創建 SEQUENCE 表
創建存放 sequence 的表
DROP TABLE IF EXISTS GLOBAL_SEQUENCE;
CREATE TABLE `GLOBAL_SEQUENCE` (
`name` varchar(50) NOT NULL COMMENT '名稱',
`current_value` int(11) NOT NULL COMMENT '當前 value',
`increment` int(11) NOT NULL DEFAULT '1' COMMENT '增長步長',
PRIMARY KEY (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
插入一條 sequence
INSERT INTO GLOBAL_SEQUENCE(name,current_value,increment) VALUES ('DEFAULT', 100000,100);
使用
BEGIN;
# 遞增
UPDATE GLOBAL_SEQUENCE SET current_value = current_value + increment WHERE name = "DEFAULT";
# 查看
SELECT concat(CAST(current_value AS CHAR),",",CAST(increment AS CHAR)) FROM GLOBAL_SEQUENCE WHERE name = "DEFAULT";
COMMIT;
優化
- 如果大量請求的時候,性能瓶頸一般都在獲取號段這次操作
- 我們可以增加雙緩存方案,即批量生成一些id,使用是從Memory中獲取