[發(fā)明專(zhuān)利]數(shù)據(jù)庫(kù)主鍵生成裝置和數(shù)據(jù)庫(kù)主鍵生成方法有效
申請(qǐng)?zhí)枺?/td> | 201210367964.0 | 申請(qǐng)日: | 2012-09-28 |
公開(kāi)(公告)號(hào): | CN102880705A | 公開(kāi)(公告)日: | 2013-01-16 |
發(fā)明(設(shè)計(jì))人: | 張紅斌;黃衛(wèi) | 申請(qǐng)(專(zhuān)利權(quán))人: | 用友軟件股份有限公司 |
主分類(lèi)號(hào): | G06F17/30 | 分類(lèi)號(hào): | G06F17/30 |
代理公司: | 北京友聯(lián)知識(shí)產(chǎn)權(quán)代理事務(wù)所(普通合伙) 11343 | 代理人: | 尚志峰;汪海屏 |
地址: | 100094 北京*** | 國(guó)省代碼: | 北京;11 |
權(quán)利要求書(shū): | 查看更多 | 說(shuō)明書(shū): | 查看更多 |
摘要: | |||
搜索關(guān)鍵詞: | 數(shù)據(jù)庫(kù) 主鍵 生成 裝置 方法 | ||
技術(shù)領(lǐng)域
本發(fā)明涉及計(jì)算機(jī)技術(shù)領(lǐng)域,具體而言,涉及一種數(shù)據(jù)庫(kù)主鍵生成裝置和一種數(shù)據(jù)庫(kù)主鍵生成方法。
背景技術(shù)
在軟件系統(tǒng)開(kāi)發(fā)中,如果需要利用數(shù)據(jù)庫(kù)系統(tǒng)來(lái)存儲(chǔ)和管理數(shù)據(jù),就無(wú)法回避數(shù)據(jù)庫(kù)主鍵的設(shè)計(jì)問(wèn)題。好的數(shù)據(jù)庫(kù)主鍵設(shè)計(jì),具有高效、易用和可靠的特點(diǎn)。目前,數(shù)據(jù)庫(kù)主鍵的主流生成方法包括數(shù)據(jù)庫(kù)自增字段方法和GUID(全局統(tǒng)一標(biāo)識(shí)符)方法。自增字段方法由數(shù)據(jù)庫(kù)自增類(lèi)型字段來(lái)實(shí)現(xiàn),由數(shù)據(jù)庫(kù)自動(dòng)生成和維護(hù),并確保唯一性。GUID方法是利用機(jī)器硬件的唯一性特征(例如網(wǎng)卡MAC地址的唯一性)并結(jié)合生成時(shí)間,來(lái)確保在全球范圍內(nèi)不會(huì)出現(xiàn)重復(fù)的數(shù)值。
自增字段通常數(shù)據(jù)類(lèi)型為Int或BigInt,存儲(chǔ)空間小且索引效率高。但使用時(shí)必須先插入數(shù)據(jù)庫(kù),才能確定ID值,這會(huì)造成編程時(shí)的很多不便。另外,自增字段的形式就是一個(gè)1、2、3、4這樣的序列,沒(méi)有任何實(shí)際意義,很不直觀易用。而GUID方式生成的ID,如果按字符串方式存儲(chǔ),需要占用36個(gè)字節(jié)。如果按數(shù)據(jù)庫(kù)特定類(lèi)型存儲(chǔ),例如SqlServer的uniqueidentifier類(lèi)型,需要占用16個(gè)字節(jié),不僅占用空間大,而且索引的效率遠(yuǎn)較Int類(lèi)型差。索引效率差一方面是因?yàn)樗饕I較長(zhǎng),另一方面是因?yàn)镚UID本身是無(wú)序的,無(wú)法保證順序生成的記錄自然排序。COMB主鍵設(shè)計(jì)方案是對(duì)GUID無(wú)序問(wèn)題的改進(jìn),方法是保留GUID的前10個(gè)字節(jié),而用后6個(gè)字節(jié)表示GUID生成的時(shí)間,盡管做了這樣的改進(jìn),COMB主鍵方案的性能仍然遠(yuǎn)較Int類(lèi)型低。
另一方面,一些傳統(tǒng)的應(yīng)用往往選擇業(yè)務(wù)含義唯一的字段作為主鍵,例如賬單編號(hào)Bill200808080001(編號(hào)方式為前綴+YYYYMMDD+流水號(hào))。這種形式的ID,遠(yuǎn)比毫無(wú)業(yè)務(wù)含義的自增整數(shù)和隨機(jī)的GUID更為直觀易用。ID如果做不到直觀易用,會(huì)增大使用難度及維護(hù)成本。不過(guò)在今天,用業(yè)務(wù)字段做主鍵的方案已不被推薦,因?yàn)闃I(yè)務(wù)字段可能發(fā)生修改,而一旦修改主鍵將會(huì)帶來(lái)一系列麻煩的問(wèn)題。
最后,隨著云計(jì)算環(huán)境的普及,即便在企業(yè)的私有云環(huán)境中也需要考慮多數(shù)據(jù)中心分布的問(wèn)題。主鍵設(shè)計(jì)是否支持分布式部署?是否支持?jǐn)?shù)據(jù)遷移?也是需要解決的問(wèn)題。顯然,GUID方案可以保證分布式環(huán)境下主鍵依然唯一,但自增字段方案就無(wú)法滿足要求。
因此,需要一種數(shù)據(jù)庫(kù)主鍵生成技術(shù),使得數(shù)據(jù)庫(kù)主鍵具有像業(yè)務(wù)編號(hào)那樣直觀易用的特點(diǎn),并可支持分布式數(shù)據(jù)部署環(huán)境。
發(fā)明內(nèi)容
本發(fā)明正是基于上述問(wèn)題,提出了一種數(shù)據(jù)庫(kù)主鍵生成技術(shù),可生成高性能數(shù)據(jù)庫(kù)主鍵,使得數(shù)據(jù)庫(kù)主鍵具有像業(yè)務(wù)編號(hào)那樣直觀易用的特點(diǎn),并可支持分布式數(shù)據(jù)部署環(huán)境。
有鑒于此,根據(jù)本發(fā)明的一個(gè)方面,提供了一種數(shù)據(jù)庫(kù)主鍵生成裝置,包括:讀取單元,讀取預(yù)設(shè)的主鍵配置表,從所述主鍵配置表中獲取數(shù)據(jù)中心的站點(diǎn)編號(hào);主鍵生成單元,根據(jù)獲取的站點(diǎn)編號(hào)讀取主鍵分配表,獲取所述主鍵分配表中記錄的主鍵的最大值,根據(jù)所述主鍵的最大值得到當(dāng)前可分配的主鍵的值,其中,所述主鍵包括數(shù)據(jù)中心的站點(diǎn)編號(hào)、生成主鍵的日期和流水號(hào)。
由于主鍵包含數(shù)據(jù)中心的站點(diǎn)編號(hào)信息,因此,該數(shù)據(jù)庫(kù)主鍵可支持分布式數(shù)據(jù)部署環(huán)境,另外該主鍵包括站點(diǎn)編號(hào)、生成日期和流水號(hào),且流水號(hào)按順序分配,因此,主鍵具有直觀易用的特點(diǎn)。
在上述技術(shù)方案中,優(yōu)選的,所述讀取單元還用于從所述主鍵配置表中讀取默認(rèn)分配數(shù)量;所述數(shù)據(jù)庫(kù)主鍵生成裝置還包括:預(yù)分配單元,從數(shù)據(jù)庫(kù)中預(yù)先獲取所述默認(rèn)分配數(shù)量的主鍵,并將所述默認(rèn)分配數(shù)量的主鍵放入內(nèi)存中;所述主鍵生成單元還用于將所述主鍵分配表中所述主鍵的最大值與所述內(nèi)存中的主鍵的最小值同步,在分配所述主鍵時(shí),調(diào)用存儲(chǔ)過(guò)程,將所述內(nèi)存中的主鍵的最小值遞增,以得到所述當(dāng)前可分配的主鍵的值。
為了避免每次分配主鍵時(shí)都需要與數(shù)據(jù)庫(kù)的網(wǎng)絡(luò)交互,在該技術(shù)方案中,預(yù)先從數(shù)據(jù)庫(kù)中申請(qǐng)一定數(shù)量的主鍵值并緩存在內(nèi)存中,只有當(dāng)內(nèi)存中的主鍵值完全被分配時(shí),才與數(shù)據(jù)庫(kù)進(jìn)行下一次的交互。這樣,如果內(nèi)存中有可用主鍵值,則分配一個(gè)主鍵值的過(guò)程可瞬時(shí)完成,這極大地減少了網(wǎng)絡(luò)及數(shù)據(jù)庫(kù)的開(kāi)銷(xiāo)。
在上述技術(shù)方案中,優(yōu)選的,所述主鍵生成單元包括分解子單元,從所述主鍵的最大值中分解出日期信息;分配子單元,在判斷出所述日期信息為當(dāng)前日期及當(dāng)前日期以前的日期時(shí),將包含當(dāng)前日期信息(今天)的主鍵的值作為所述當(dāng)前可分配的主鍵的值。
該專(zhuān)利技術(shù)資料僅供研究查看技術(shù)是否侵權(quán)等信息,商用須獲得專(zhuān)利權(quán)人授權(quán)。該專(zhuān)利全部權(quán)利屬于用友軟件股份有限公司,未經(jīng)用友軟件股份有限公司許可,擅自商用是侵權(quán)行為。如果您想購(gòu)買(mǎi)此專(zhuān)利、獲得商業(yè)授權(quán)和技術(shù)合作,請(qǐng)聯(lián)系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/201210367964.0/2.html,轉(zhuǎn)載請(qǐng)聲明來(lái)源鉆瓜專(zhuān)利網(wǎng)。
- 同類(lèi)專(zhuān)利
- 專(zhuān)利分類(lèi)
G06F 電數(shù)字?jǐn)?shù)據(jù)處理
G06F17-00 特別適用于特定功能的數(shù)字計(jì)算設(shè)備或數(shù)據(jù)處理設(shè)備或數(shù)據(jù)處理方法
G06F17-10 .復(fù)雜數(shù)學(xué)運(yùn)算的
G06F17-20 .處理自然語(yǔ)言數(shù)據(jù)的
G06F17-30 .信息檢索;及其數(shù)據(jù)庫(kù)結(jié)構(gòu)
G06F17-40 .數(shù)據(jù)的獲取和記錄
G06F17-50 .計(jì)算機(jī)輔助設(shè)計(jì)
- 數(shù)據(jù)庫(kù)
- 數(shù)據(jù)庫(kù)管理系統(tǒng)及數(shù)據(jù)庫(kù)
- 數(shù)據(jù)庫(kù)構(gòu)筑裝置、數(shù)據(jù)庫(kù)檢索裝置、數(shù)據(jù)庫(kù)裝置、數(shù)據(jù)庫(kù)構(gòu)筑方法、以及數(shù)據(jù)庫(kù)檢索方法
- 數(shù)據(jù)庫(kù)和數(shù)據(jù)庫(kù)處理方法
- 數(shù)據(jù)庫(kù)系統(tǒng)、數(shù)據(jù)庫(kù)更新方法、數(shù)據(jù)庫(kù)以及數(shù)據(jù)庫(kù)更新程序
- 容器數(shù)據(jù)庫(kù)
- 數(shù)據(jù)庫(kù)同步方法及數(shù)據(jù)庫(kù)
- 一種MongoDB數(shù)據(jù)庫(kù)對(duì)象復(fù)制延遲監(jiān)控方法和裝置
- 數(shù)據(jù)分布式存儲(chǔ)方法、裝置、電子設(shè)備及存儲(chǔ)介質(zhì)
- 數(shù)據(jù)庫(kù)語(yǔ)句執(zhí)行方法及裝置
- 數(shù)據(jù)庫(kù)主鍵生成裝置和數(shù)據(jù)庫(kù)主鍵生成方法
- 分布式數(shù)據(jù)庫(kù)下全局主鍵生成方法和系統(tǒng)
- 主鍵生成方法、裝置、設(shè)備及介質(zhì)
- 一種全局主鍵生成方法、裝置、設(shè)備及存儲(chǔ)介質(zhì)
- 一種主鍵盤(pán)燈光控制電路
- 數(shù)據(jù)表的處理方法及裝置
- 智能合約內(nèi)部主鍵生成方法、裝置、計(jì)算機(jī)設(shè)備及存儲(chǔ)介質(zhì)
- 數(shù)據(jù)處理方法及裝置、電子設(shè)備和計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)
- 一種主鍵分配方法、裝置、服務(wù)器及存儲(chǔ)介質(zhì)
- 一種數(shù)據(jù)處理方法及裝置