[發明專利]一種ID生成方法、裝置和系統有效
| 申請號: | 201210223724.3 | 申請日: | 2012-06-29 |
| 公開(公告)號: | CN102769667A | 公開(公告)日: | 2012-11-07 |
| 發明(設計)人: | 桂勇哲;陳斌;陳超 | 申請(專利權)人: | 北京奇虎科技有限公司;奇智軟件(北京)有限公司 |
| 主分類號: | H04L29/08 | 分類號: | H04L29/08 |
| 代理公司: | 工業和信息化部電子專利中心 11010 | 代理人: | 齊潔茹 |
| 地址: | 100088 北京市西城區新*** | 國省代碼: | 北京;11 |
| 權利要求書: | 查看更多 | 說明書: | 查看更多 |
| 摘要: | |||
| 搜索關鍵詞: | 一種 id 生成 方法 裝置 系統 | ||
技術領域
本發明涉及數據處理技術領域,尤其涉及一種ID生成方法、裝置和系統。
背景技術
在數據庫的使用中,對每一條數據進行insert,update,delete等操作時,通常都會使用主鍵來進行操作。每一條數據的主鍵都必須是唯一的,否則會因為主鍵沖突導致操作失敗。
關于主鍵的生成,目前存在如下幾種方案:
方案一,數據庫本身提供了auto_increment的功能,來提供自增ID。當使用數據庫時指明主鍵為auto_increment,寫入數據時將主鍵設置為null值,數據庫會自動生成遞增的ID來作為主鍵。對于單表的操作來說,這種方案較簡單,便于部署實現。
然而,該方案存在如下缺點:大規模的線上業務在使用數據庫時,因為數據規模較大的原因,不會使用單表來存儲數據。而是將數據水平分割,保存在多張結構相同的表中,減少每張表中數據,從而保證數據庫的性能。在這種情況下,由于數據庫自身提供的auto_increment只能對一張表生成自增ID,無法使用技術方案一。當數據規模較大,需要對數據庫進行水平分割等操作時,方案一就不再適用了,可擴展性較差,只適合小業務使用。
方案二,數據庫的auto_increment支持步長的設定,即在每次建立新ID的時候,ID的增長量不是1,而是某個預先設置好的值。自增量設置為10,則生成的自增ID就可以是1,11,21,31,41這樣的序列。如果對數據庫進行了分表,分為了100張表:對一張表設置自增量為10,初始值為1,則生成1,11,21,31這樣的ID序列,對第二張表設置初始值為2,生成2,12,22,32這樣的id,則能保證id是全局唯一的。
然而,該方案存在如下缺點:每張表中的ID是彼此獨立的。先表1中寫入兩條數據,對應的ID為1、11,再在表2中寫入數據ID為2。在這種情況下無法再使用ID作為排序的依據。如果誤操作導致某張表的自增量設置錯誤,會在兩張表中生成相同的ID,ID的全局唯一性就不能保證了。采用基于數據庫的方案還存在一個嚴重問題,當使用了主從同步的方案后:將從服務器切換為主,可能因此數據同步的延時導致產生的新ID已經在服務器上產生過了,主鍵沖突導致數據同步出現問題。
方案三,使用UUID(Universally?Unique?Identifier,通用唯一識別碼)作為唯一主鍵。UUID是在一臺機器上生成的數字,它保證對在同一時空中的所有機器都是唯一的,保證了時鐘序列。
然而,該方案存在的缺點如下:UUID的缺陷在于生成的結果串很長,占用128位。在數據庫中使用會導致占用更多的空間。UUID是在不同機器上生成的,因此盡管UUID本身支持了時鐘序列,但是如果使用UUID來進行排序,則依賴于分布式系統中不同機器之間的時間是否同步。而實際上分布式系統之間的時間不可能做到完全一致,因此在分布式系統中使用UUID來排序會存在問題。
發明內容
本發明提供一種ID生成方法、裝置和系統,用以解決現有技術不能有效地生成全局唯一ID的問題。
為了解決上述問題,本發明采用的技術方案如下:
一方面,本發明提供了一種ID生成方法,包括:
第一服務端接收調用端發起的ID獲取指令,根據所述ID獲取指令,生成基于服務端標識號和自增序列的ID值,或者生成基于當前時間戳、服務端標識號和自增序列的ID值,并將生成的所述ID值發送至所述調用端。
進一步地,本發明所述方法中,所述第一服務端配置有Get接口,負責收發與各所述調用端間的信息;所述調用端配置有調用接口,負責收發與所述第一服務端間的信息。
進一步地,本發明所述方法中,所述第一服務端與調用端間采用memcache協議進行通信。
進一步地,本發明所述方法中,所述ID獲取指令中攜帶有業務類型信息和ID類型指示符;所述第一服務端根據所述ID類型指示符的指示,生成基于服務端標識號和自增序列的ID值,或者,生成基于當前時間戳、服務端標識號和自增序列的ID值。
進一步地,本發明所述方法中,所述ID獲取指令中攜帶有業務類型信息;所述第一服務端接收到所述ID獲取指令后,根據配置的業務類型與ID類型的對應關系,生成基于服務端標識號和自增序列的ID值,或者,生成基于當前時間戳、服務端標識號和自增序列的ID值。
進一步地,本發明所述方法中,所述第一服務端在利用所述自增序列進行ID值生成時,本次生成的ID值對應的自增序列在上次生成的ID值對應的自增序列基礎上連續遞增。
該專利技術資料僅供研究查看技術是否侵權等信息,商用須獲得專利權人授權。該專利全部權利屬于北京奇虎科技有限公司;奇智軟件(北京)有限公司,未經北京奇虎科技有限公司;奇智軟件(北京)有限公司許可,擅自商用是侵權行為。如果您想購買此專利、獲得商業授權和技術合作,請聯系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/201210223724.3/2.html,轉載請聲明來源鉆瓜專利網。





