[發(fā)明專利]一種在分布式系統(tǒng)內(nèi)生成唯一ID的方法在審
| 申請?zhí)枺?/td> | 201611091996.7 | 申請日: | 2016-12-01 |
| 公開(公告)號: | CN106776932A | 公開(公告)日: | 2017-05-31 |
| 發(fā)明(設(shè)計)人: | 余楊志;熊烽;胡波 | 申請(專利權(quán))人: | 湖北荊楚網(wǎng)絡(luò)科技股份有限公司 |
| 主分類號: | G06F17/30 | 分類號: | G06F17/30 |
| 代理公司: | 武漢天力專利事務(wù)所42208 | 代理人: | 馮衛(wèi)平 |
| 地址: | 430000 湖*** | 國省代碼: | 湖北;42 |
| 權(quán)利要求書: | 查看更多 | 說明書: | 查看更多 |
| 摘要: | |||
| 搜索關(guān)鍵詞: | 一種 分布式 系統(tǒng) 生成 唯一 id 方法 | ||
技術(shù)領(lǐng)域
本發(fā)明涉及一種ID生成的方法,特別是一種在分布式系統(tǒng)內(nèi)生成唯一ID的方法。
背景技術(shù)
在分布式系統(tǒng)中,如何快速高效的生成系統(tǒng)唯一ID,是在設(shè)計一個系統(tǒng)的時候經(jīng)常遇到的問題。現(xiàn)有技術(shù)中生成ID的方法主要有以下三種,以適應(yīng)不同的場景、需求以及性能要求,但都存在各自的缺陷。
1.數(shù)據(jù)庫自增長序列
利用數(shù)據(jù)庫的自增長序列實現(xiàn),實現(xiàn)簡單,ID有序,對分頁和排序很有幫助。但是不同的數(shù)據(jù)庫,序列語法和實現(xiàn)各不相同,數(shù)據(jù)庫遷移、多表合并、以及數(shù)據(jù)庫分表分庫時非常麻煩。并且在單個數(shù)據(jù)庫或者讀寫分離或一主多從的情況下,只有一個庫生成序列,有單點故障的風(fēng)險。
2.UUID
UUID代碼簡單,生成ID性能很好,基本不會有性能問題,且UUID全球唯一,在數(shù)據(jù)遷移,數(shù)據(jù)合并和數(shù)據(jù)庫變更等情況下,都可以從容應(yīng)對。但是UUID字符無序,無法保證趨勢遞增,對數(shù)據(jù)分頁性能產(chǎn)生影響。
3.Redis生成ID
利用Redis的單線程來保證數(shù)據(jù)安全,通過原子操作INCR和INCRBY來實現(xiàn)。同時可通過Redis的集群實現(xiàn)更高的吞吐量和單點故障的問題。使用Redis來生成ID不依賴數(shù)據(jù),方便靈活,且性能優(yōu)于數(shù)據(jù)庫。且生成的ID是有序的,對分頁和排序有幫助,但是必須依賴于第三方工具Redis,增加了系統(tǒng)集成的復(fù)雜度。
發(fā)明內(nèi)容
本發(fā)明的目的在于提供一種在分布式系統(tǒng)內(nèi)生成唯一ID的方法,運用該方法生成ID不僅效率高,不會對大數(shù)據(jù)量的查詢和分頁造成性能影響而且與系統(tǒng)集成便捷。
實現(xiàn)本發(fā)明目的的技術(shù)方案是:一種在分布式系統(tǒng)內(nèi)生成唯一ID的方法,其特征在于:包括以下步驟:
1.1.獲取服務(wù)器設(shè)定的默認(rèn)基礎(chǔ)時間,將該默認(rèn)基礎(chǔ)時間換算成二進制并做位移填充運算,將其左移24位;
1.2.獲取業(yè)務(wù)類型數(shù)值,將該業(yè)務(wù)類型數(shù)值換算成二進制并做位移填充運算,將換算得來的二進制數(shù)值左移20位;
1.3.獲取服務(wù)類型數(shù)值,將該服務(wù)類型數(shù)值換算成二進制并做位移填充運算,將換算得來的二進制數(shù)值左移16位;
1.4.獲取服務(wù)器號數(shù)值,將該服務(wù)器號數(shù)值換算成二進制并做位移填充運算,將換算得來的二進制數(shù)值左移12位;
1.5.獲取毫秒內(nèi)自增數(shù)值,將該毫秒內(nèi)自增數(shù)值換算成二進制;
1.6.將步驟1.1~1.5運算得到的5項二進制進行或運算,得到二進制格式的ID值,將該二進制格式的ID值換算成十進制得到唯一ID值。
本發(fā)明的優(yōu)點在于:1.生成ID效率高,能夠滿足高并發(fā)系統(tǒng)的業(yè)務(wù)需求。2.生成的ID為數(shù)字且有序增加,不會對大數(shù)據(jù)量的查詢和分頁造成性能影響。3.本方法可以跟系統(tǒng)快速無縫集成,不需要第三方工具庫和第三方軟件的支持,減少系統(tǒng)集成難度。
附圖說明
圖1是本方法的邏輯步驟流程圖。
具體實施方式
一種ID生成的方法,特別是一種在分布式系統(tǒng)內(nèi)生成唯一ID的方法,其特征在于:包括以下步驟:
1.1.獲取服務(wù)器設(shè)定的默認(rèn)基礎(chǔ)時間,將該默認(rèn)基礎(chǔ)時間換算成二進制并做位移填充運算,將其左移24位;
1.2.獲取業(yè)務(wù)類型數(shù)值,將該業(yè)務(wù)類型數(shù)值換算成二進制并做位移填充運算,將換算得來的二進制數(shù)值左移20位;
1.3.獲取服務(wù)類型數(shù)值,將該服務(wù)類型數(shù)值換算成二進制并做位移填充運算,將換算得來的二進制數(shù)值左移16位;
1.4.獲取服務(wù)器號數(shù)值,將該服務(wù)器號數(shù)值換算成二進制并做位移填充運算,將換算得來的二進制數(shù)值左移12位;
1.5.獲取毫秒內(nèi)自增數(shù)值,將該毫秒內(nèi)自增數(shù)值換算成二進制;
1.6.將步驟1.1~1.5運算得到的5項二進制進行或運算,得到二進制格式的ID值,將該二進制格式的ID值換算成十進制得到唯一ID值。
實施例、
1)得到當(dāng)前時間的毫秒數(shù):762824999253053440;
2)假定系統(tǒng)中設(shè)定的基礎(chǔ)時間毫秒數(shù)為1288834974657,因此減去基礎(chǔ)時間毫秒數(shù):762824999253053440 - 1288834974657 = 762823710418078783;
3)假設(shè)系統(tǒng)業(yè)務(wù)類型、服務(wù)類型、所屬服務(wù)器分別為2、9、1,獲取當(dāng)前的業(yè)務(wù)類型、服務(wù)類型、服務(wù)器號數(shù)值;
4)獲取毫秒內(nèi)自增號 5;
5)計算id:
該專利技術(shù)資料僅供研究查看技術(shù)是否侵權(quán)等信息,商用須獲得專利權(quán)人授權(quán)。該專利全部權(quán)利屬于湖北荊楚網(wǎng)絡(luò)科技股份有限公司,未經(jīng)湖北荊楚網(wǎng)絡(luò)科技股份有限公司許可,擅自商用是侵權(quán)行為。如果您想購買此專利、獲得商業(yè)授權(quán)和技術(shù)合作,請聯(lián)系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/201611091996.7/2.html,轉(zhuǎn)載請聲明來源鉆瓜專利網(wǎng)。





