前言
隨著業(yè)務(wù)的增長(zhǎng),數(shù)據(jù)表可能要占用很大的物理存儲(chǔ)空間,為了解決該問(wèn)題,后期使用數(shù)據(jù)庫(kù)分片技術(shù)。將一個(gè)數(shù)據(jù)庫(kù)進(jìn)行拆分,通過(guò)數(shù)據(jù)庫(kù)中間件連接。如果數(shù)據(jù)庫(kù)中該表選用ID自增策略,則可能產(chǎn)生重復(fù)的ID,此時(shí)應(yīng)該使用分布式ID生成策略來(lái)生成ID。
提示:以下是本篇文章正文內(nèi)容
文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-732854.html
一、分布式id技術(shù)選型
- redis,優(yōu)勢(shì)是(INCR)生成一個(gè)全局連續(xù)遞增的數(shù)字類型主鍵,劣勢(shì)是增加了一個(gè)外部組件的依賴,redis不可用,則整個(gè)數(shù)據(jù)庫(kù)將無(wú)法插入
- UUID,優(yōu)勢(shì)是全局唯一,mysql也有UUID實(shí)現(xiàn),劣勢(shì)是36個(gè)字符組成,占用空間大
- snowflake(雪花)算法,優(yōu)勢(shì)是全局唯一,數(shù)字類型,存儲(chǔ)成本低,機(jī)器規(guī)模大于1024臺(tái)無(wú)法支持。
二、雪花算法
- snowflake是Twitter開(kāi)源的分布式ID生成算法,結(jié)果是一個(gè)long型的ID。其核心思想是:使用41bit作為毫秒數(shù),10bit作為機(jī)器的ID(5個(gè)bit是數(shù)據(jù)中心,5個(gè)bit的機(jī)器ID),12bit作為毫秒內(nèi)的流水號(hào)(意味著每個(gè)節(jié)點(diǎn)在每毫秒可以產(chǎn)生 4096 個(gè) ID),最后還有一個(gè)符號(hào)位,永遠(yuǎn)是0。
三、在項(xiàng)目中集成雪花算法
mybatis-plus已經(jīng)集成了雪花算法,完成以下兩步即可在項(xiàng)目中集成雪花算法:文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-732854.html
- 在實(shí)體類中的id上加入如下配置,指定類型為id_worker
@TableId(value = "id",type = IdType.ID_WORKER)
private Long id;
- 在application.yml文件中配置數(shù)據(jù)中心id和機(jī)器id
mybatis-plus:
mapper-locations: classpath*:mapper/*.xml
type-aliases-package: com.model.pojos
global-config:
datacenter-id: 1
workerId: 1
到了這里,關(guān)于分布式id的概述與實(shí)現(xiàn)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!