上一篇 <<<分布式全局ID生成總覽
下一篇 >>>基于UUID算法實(shí)現(xiàn)全局ID
實(shí)現(xiàn)思路
利用數(shù)據(jù)庫(kù)自增或者序列號(hào)方式實(shí)現(xiàn)訂單號(hào)
注意:在數(shù)據(jù)庫(kù)集群環(huán)境下,默認(rèn)自增方式存在問(wèn)題睁冬,因?yàn)槎际菑?開(kāi)始自增纬向,可能會(huì)存在重復(fù)参滴,應(yīng)該設(shè)置每臺(tái)不同數(shù)據(jù)庫(kù)自增的間隔方式不同匈仗。
優(yōu)點(diǎn):
簡(jiǎn)單算利,代碼方便污筷,性能可以接受。
數(shù)字ID天然排序桥氏,對(duì)分頁(yè)或者需要排序的結(jié)果很有幫助温峭。
缺點(diǎn):
不同數(shù)據(jù)庫(kù)語(yǔ)法和實(shí)現(xiàn)不同,數(shù)據(jù)庫(kù)遷移的時(shí)候或多數(shù)據(jù)庫(kù)版本支持的時(shí)候需要處理字支。
在性能達(dá)不到要求的情況下诚镰,比較難于擴(kuò)展。
在單個(gè)數(shù)據(jù)庫(kù)或讀寫(xiě)分離或一主多從的情況下祥款,只有一個(gè)主庫(kù)可以生成清笨。有單點(diǎn)故障的風(fēng)險(xiǎn)。
分表分庫(kù)的時(shí)候會(huì)有麻煩刃跛。
在數(shù)據(jù)庫(kù)集群環(huán)境下抠艾,默認(rèn)自增方式存在問(wèn)題,因?yàn)槎际菑?開(kāi)始自增桨昙,可能會(huì)存在重復(fù)检号,應(yīng)該設(shè)置每臺(tái)節(jié)點(diǎn)自增步長(zhǎng)不同。
查詢(xún)自增的步長(zhǎng)
SHOW VARIABLES LIKE 'auto_inc%'
修改自增的步長(zhǎng)
SET @@auto_increment_increment=10;
修改起始值
SET @@auto_increment_offset=5;
假設(shè)有兩臺(tái)mysql數(shù)據(jù)庫(kù)服務(wù)器
節(jié)點(diǎn)①自增 1 3 5 7 9 11 ….
節(jié)點(diǎn)②自增 2 4 6 8 10 12 ….
注意:
在最開(kāi)始設(shè)置好了每臺(tái)節(jié)點(diǎn)自增方式步長(zhǎng)后蛙酪,確定好了mysql集群數(shù)量后齐苛,無(wú)法擴(kuò)展新的mysql,不然生成步長(zhǎng)的規(guī)則可能會(huì)發(fā)生變化桂塞。
推薦閱讀:
<<<分布式全局ID生成總覽
<<<基于UUID算法實(shí)現(xiàn)全局ID
<<<基于Twitter的snowflake(雪花)算法實(shí)現(xiàn)全局ID
<<<基于Redis生成全局ID