[發(fā)明專利]一種基于snowflake的標(biāo)識(shí)生成方法和裝置在審
| 申請?zhí)枺?/td> | 202010474467.5 | 申請日: | 2020-05-29 |
| 公開(公告)號(hào): | CN111694792A | 公開(公告)日: | 2020-09-22 |
| 發(fā)明(設(shè)計(jì))人: | 張鵬 | 申請(專利權(quán))人: | 中國建設(shè)銀行股份有限公司;建信金融科技有限責(zé)任公司 |
| 主分類號(hào): | G06F16/13 | 分類號(hào): | G06F16/13 |
| 代理公司: | 中原信達(dá)知識(shí)產(chǎn)權(quán)代理有限責(zé)任公司 11219 | 代理人: | 郝紅玉;馮培培 |
| 地址: | 100033 *** | 國省代碼: | 北京;11 |
| 權(quán)利要求書: | 查看更多 | 說明書: | 查看更多 |
| 摘要: | |||
| 搜索關(guān)鍵詞: | 一種 基于 snowflake 標(biāo)識(shí) 生成 方法 裝置 | ||
本發(fā)明公開了一種基于snowflake的標(biāo)識(shí)生成方法和裝置,涉及計(jì)算機(jī)技術(shù)領(lǐng)域。該方法的一具體實(shí)施方式包括:判斷當(dāng)前時(shí)間是否小于上一次生成標(biāo)識(shí)的時(shí)間;若大于或等于,則將防時(shí)鐘回?fù)軜?biāo)記位設(shè)置為第一數(shù)值,確定當(dāng)前時(shí)間與基礎(chǔ)時(shí)間的差值,轉(zhuǎn)換差值得到第一時(shí)間戳,進(jìn)而基于符號(hào)位、第一數(shù)值、第一時(shí)間戳和序列號(hào),生成標(biāo)識(shí);若小于,則確定發(fā)生時(shí)鐘回?fù)?,獲取與時(shí)鐘回?fù)芎蟮牡诙r(shí)間戳對應(yīng)的第一標(biāo)識(shí),以將第一標(biāo)識(shí)中的防時(shí)鐘回?fù)軜?biāo)記位由第一數(shù)值翻轉(zhuǎn)為第二數(shù)值,得到標(biāo)識(shí)。該實(shí)施方式在傳統(tǒng)的snowflake算法基礎(chǔ)上,對分布式ID分段處理,以解決時(shí)鐘回?fù)軐?dǎo)致的ID重復(fù)問題;設(shè)置空閑位可以縮短ID長度,方便后續(xù)其他標(biāo)識(shí)位的動(dòng)態(tài)擴(kuò)展。
技術(shù)領(lǐng)域
本發(fā)明涉及計(jì)算機(jī)技術(shù)領(lǐng)域,尤其涉及一種基于snowflake的標(biāo)識(shí)生成方法和裝置。
背景技術(shù)
在復(fù)雜分布式系統(tǒng)中,往往需要對大量的數(shù)據(jù)和消息進(jìn)行唯一標(biāo)識(shí),例如合同系統(tǒng)中的合同號(hào),核心、抵質(zhì)押、催收系統(tǒng)中的貸款號(hào)或銀行卡號(hào)等序列號(hào)等,這些唯一標(biāo)識(shí)就是分布式ID。
目前基于snowflake算法生成的分布式ID為64位,具體如下(參見圖1所示):使用41bit存放時(shí)間,精確到毫秒,使用10bit表示機(jī)器ID,12bit表示序列號(hào),每秒每臺(tái)服務(wù)器可生成409.6萬個(gè)ID。
在實(shí)現(xiàn)本發(fā)明的過程中,發(fā)明人發(fā)現(xiàn)現(xiàn)有技術(shù)至少存在如下問題:
1、時(shí)間戳基于工作設(shè)備的本機(jī)時(shí)鐘生成,因此當(dāng)工作設(shè)備出現(xiàn)時(shí)鐘回?fù)芮闆r時(shí),生成ID的時(shí)間戳也會(huì)隨之回退,如果仍按照回退后的時(shí)間戳生成ID,會(huì)出現(xiàn)ID重復(fù)問題;
2、snowflake算法中的bit位分配固定,在極端情況下,例如當(dāng)worker大于1024時(shí),snowflake算法不能滿足需求,或者實(shí)際應(yīng)用環(huán)境可能不需要部署1024個(gè)worker,此時(shí)64位的ID對于大多數(shù)軟件系統(tǒng)而言是過剩的,無法根據(jù)應(yīng)用場景進(jìn)行適當(dāng)調(diào)整。
發(fā)明內(nèi)容
有鑒于此,本發(fā)明實(shí)施例提供一種基于snowflake的標(biāo)識(shí)生成方法和裝置,至少能夠解決現(xiàn)有技術(shù)snowflake算法中的bit位分配固定,以及不能解決時(shí)鐘回?fù)芤l(fā)的ID重復(fù)問題。
為實(shí)現(xiàn)上述目的,根據(jù)本發(fā)明實(shí)施例的一個(gè)方面,提供了一種基于snowflake的標(biāo)識(shí)生成方法,包括符號(hào)位、防時(shí)鐘回?fù)軜?biāo)記位、時(shí)間戳和序列號(hào),所述序列號(hào)為自增序列號(hào),包括:
判斷當(dāng)前時(shí)間是否小于上一次生成標(biāo)識(shí)的時(shí)間;
若大于或等于,則將所述防時(shí)鐘回?fù)軜?biāo)記位設(shè)置為第一數(shù)值,確定所述當(dāng)前時(shí)間與基礎(chǔ)時(shí)間的差值,轉(zhuǎn)換所述差值得到第一時(shí)間戳,進(jìn)而基于所述符號(hào)位、所述第一數(shù)值、所述第一時(shí)間戳和所述序列號(hào),生成標(biāo)識(shí);
若小于,則確定發(fā)生時(shí)鐘回?fù)?,獲取與時(shí)鐘回?fù)芎蟮牡诙r(shí)間戳對應(yīng)的第一標(biāo)識(shí),以將所述第一標(biāo)識(shí)中的防時(shí)鐘回?fù)軜?biāo)記位由所述第一數(shù)值翻轉(zhuǎn)為第二數(shù)值,得到標(biāo)識(shí)。
可選的,所述標(biāo)識(shí)還包括數(shù)據(jù)中心位和設(shè)備標(biāo)識(shí)位,所述數(shù)據(jù)中心位對應(yīng)于數(shù)據(jù)中心的編號(hào),所述設(shè)備標(biāo)識(shí)位對應(yīng)于發(fā)放序列號(hào)的設(shè)備的編號(hào),所述設(shè)備位于所述數(shù)據(jù)中心中;
所述基于所述符號(hào)位、所述第一數(shù)值、所述第一時(shí)間戳和所述序列號(hào),生成標(biāo)識(shí),包括:
基于所述符號(hào)位、所述第一數(shù)值、所述第一時(shí)間戳、所述數(shù)據(jù)中心位、所述設(shè)備標(biāo)識(shí)位和所述序列號(hào),生成標(biāo)識(shí)。
可選的,所述標(biāo)識(shí)還包括空閑位;
所述方法還包括:將所述空閑位中的每位設(shè)置為第三數(shù)值;以及
在將所述空閑位中的一位或多位移動(dòng)至其他標(biāo)識(shí)位后,根據(jù)剩余空閑位的位數(shù),得到第四數(shù)值。
可選的,所述標(biāo)識(shí)為64位整數(shù),為避免生成負(fù)數(shù),將第1位符號(hào)位設(shè)置為零,只使用剩余的63位。
該專利技術(shù)資料僅供研究查看技術(shù)是否侵權(quán)等信息,商用須獲得專利權(quán)人授權(quán)。該專利全部權(quán)利屬于中國建設(shè)銀行股份有限公司;建信金融科技有限責(zé)任公司,未經(jīng)中國建設(shè)銀行股份有限公司;建信金融科技有限責(zé)任公司許可,擅自商用是侵權(quán)行為。如果您想購買此專利、獲得商業(yè)授權(quán)和技術(shù)合作,請聯(lián)系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/202010474467.5/2.html,轉(zhuǎn)載請聲明來源鉆瓜專利網(wǎng)。





