一種實時數(shù)據(jù)庫整數(shù)型關(guān)鍵字存儲方法及其查找算法
【專利摘要】本發(fā)明公開了一種實時數(shù)據(jù)庫整數(shù)型關(guān)鍵字存儲方法及其查找算法,將實時數(shù)據(jù)庫中整型關(guān)鍵字的表的數(shù)據(jù)根據(jù)關(guān)鍵字大小分別存儲在預(yù)先設(shè)定好的兩塊存儲空間中,分別采用非緊密存儲和緊密存儲的方式,對應(yīng)分別采用直接定位查找和二分查找的算法。具有能夠避免記錄在插入和刪除時帶來內(nèi)存移動,從而提高實時庫整體效率的優(yōu)點。
【專利說明】一種實時數(shù)據(jù)庫整數(shù)型關(guān)鍵字存儲方法及其查找算法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及實時數(shù)據(jù)庫技術(shù)應(yīng)用領(lǐng)域。
【背景技術(shù)】
[0002]整數(shù)型關(guān)鍵字是實時數(shù)據(jù)庫常用的關(guān)鍵字類型之一,使用整數(shù)型關(guān)鍵字的實時數(shù)據(jù)庫的表只有一個關(guān)鍵字,該關(guān)鍵字為整數(shù)型。該實時數(shù)據(jù)庫的存儲和查找都依賴于整數(shù)型關(guān)鍵字,被廣泛的應(yīng)用在實時庫領(lǐng)域中。
[0003]整數(shù)型關(guān)鍵字的表在實時庫中通常以案關(guān)鍵字排序后連續(xù)存儲方式為主,查找算法以二分查找法為主。如圖1所示,為一個連續(xù)存儲方式的舉例示意圖,在連續(xù)存儲方式中,每條記錄按關(guān)鍵字排序,連續(xù)的存儲在內(nèi)存空間中。
[0004]連續(xù)存儲的問題是,記錄和記錄之間按找關(guān)鍵字排序緊密排列,中間沒有空洞,從中間插入或刪除記錄會帶來內(nèi)存移動,移動的內(nèi)存塊越大,效率越低;移動的內(nèi)存塊越大,效率越低。二分查找的問題是,其查找算法時間復(fù)雜度為0(log2n),記錄數(shù)越多效率越低。
【發(fā)明內(nèi)容】
[0005]本發(fā)明的目的是針對現(xiàn)有技術(shù)存在的不足,提供一種實時數(shù)據(jù)庫整數(shù)型關(guān)鍵字存儲方法及其查找算法,從中間插入和刪除記錄時不需要做內(nèi)存移動,從而提高實時庫插入和刪除記錄的效率。
[0006]為實現(xiàn)上述目的,本發(fā)明實時數(shù)據(jù)庫整數(shù)型關(guān)鍵字存儲方法及其查找算法可采用如下技術(shù)方案:
[0007]—種實時數(shù)據(jù)庫整數(shù)型關(guān)鍵字存儲方法,對于實時數(shù)據(jù)庫中以整型值作為關(guān)鍵字的表,根據(jù)預(yù)設(shè)值,將記錄數(shù)據(jù)根據(jù)關(guān)鍵字大小分別采用非緊密排列與緊密排列的存儲方法,具體包括:
[0008]1)每張表的存儲空間分為等大小的兩部分,每張表設(shè)定一個最大記錄個數(shù),每個部分的大小為單條記錄個數(shù)X最大記錄個數(shù),其中第一塊存儲空間采用非緊密排列,第二塊存儲空間采用緊密排列;
[0009]2)對于整數(shù)型關(guān)鍵字值小于或等于最大記錄個數(shù)的記錄,將這部分記錄存儲在第一塊記錄空間中,記錄的位置是整數(shù)型關(guān)鍵字值作為下標對應(yīng)的存儲空間中的位置,如果記錄存在則記錄頭置為1,如果不存在則記錄頭置為0 ;
[0010]3)對于整數(shù)型關(guān)鍵字大于最大記錄個數(shù)的記錄,按整數(shù)型關(guān)鍵字排序緊密存儲在第二塊存儲空間中。
[0011]與【背景技術(shù)】相比,本發(fā)明提供的整數(shù)型關(guān)鍵字表實時庫數(shù)據(jù)存儲方式采用預(yù)先為一定量的關(guān)鍵字指定固定的位置,關(guān)鍵字為N的記錄相對于存儲空間的偏移量就是NX (每條記錄所占大小),如果記錄存在則記錄頭置為1,如果不存在則記錄頭置為0。這樣做能夠避免記錄在插入和刪除時帶來內(nèi)存移動,從而提高實時庫整體效率。
[0012]本發(fā)明針對上述實時數(shù)據(jù)庫整數(shù)型關(guān)鍵字存儲方法還提供根據(jù)關(guān)鍵字的查找方法,如下:
[0013]1)對于所查找記錄整數(shù)型關(guān)鍵字小于或等于最大記錄個數(shù)的情況下,直接使用記錄整數(shù)型關(guān)鍵字作為查找點,將第一塊存儲區(qū)域該點記錄返回;
[0014]2)對于所查找記錄整數(shù)型關(guān)鍵字大于最大記錄個數(shù)的情況下,使用二分查找算法從第二塊存儲區(qū)域查詢到對應(yīng)的記錄返回。
[0015]3、根據(jù)權(quán)利要求2所述的實時數(shù)據(jù)庫整數(shù)型關(guān)鍵字存儲方法,其特征在于,
[0016]上述存儲方法和查找算法,同樣適用于長整數(shù)型、短整數(shù)型作為關(guān)鍵字的實時庫表。
[0017]與現(xiàn)有技術(shù)相比,本發(fā)明中的該查找方法的時間復(fù)雜度為0(1),與記錄個數(shù)無關(guān),效率高于現(xiàn)有的二分查找算法。對于溢出區(qū)的數(shù)據(jù)仍然使用二分查找算法,同樣是為了滿足任意關(guān)鍵字都可以存儲的需求。
【專利附圖】
【附圖說明】
[0018]圖1為現(xiàn)有技術(shù)中整數(shù)型關(guān)鍵字連續(xù)存儲方式一個舉例的示意圖。
[0019]圖2為本發(fā)明中的整數(shù)型關(guān)鍵字非連續(xù)存儲方式一個舉例的示意圖。
[0020]圖3為本發(fā)明中的記錄定位查找算法的流程圖。
【具體實施方式】
[0021]下面結(jié)合附圖和具體實施例,進一步闡明本發(fā)明,應(yīng)理解這些實施例僅用于說明本發(fā)明而不用于限制本發(fā)明的范圍,在閱讀了本發(fā)明之后,本領(lǐng)域技術(shù)人員對本發(fā)明的各種等價形式的修改均落于本申請所附權(quán)利要求所限定的范圍。
[0022]請參閱圖1及圖2所示,本發(fā)明提供一種非連續(xù)存儲的整數(shù)型關(guān)鍵字表存儲方式。該存儲方式包括以下幾個部分:
[0023](1)對表的整數(shù)型關(guān)鍵字設(shè)置一個范圍,比如Μ ;
[0024](2)建立一個有Μ條記錄的存儲空間,稱為直接定位區(qū)。每條記錄存儲空間有兩部分組成,一部分是記錄頭信息,用來標記該記錄是否存在,一部分用來存放記錄實體信息;
[0025](3)假設(shè)一條記錄的關(guān)鍵字為Ν,并且0〈Ν〈 =Μ,如果記錄存在,則直接定位區(qū)中第Ν條記錄的記錄頭記為1,如果該記錄不存在則記為0 ;
[0026](4)在存儲空間直接定位區(qū)之后,建立一個存放關(guān)鍵字值>Μ的記錄的存儲空間,稱為溢出區(qū);
[0027](5)溢出區(qū)中的記錄按關(guān)鍵字排序連續(xù)存儲,和現(xiàn)有技術(shù)相同。
[0028]本發(fā)明提供的記錄存儲方式如圖2所示。
[0029]針對本發(fā)明提出的這種記錄存儲方式,本發(fā)明提出一種按關(guān)鍵字查找記錄的算法,稱為直接定位算法,包括以下內(nèi)容:
[0030](1)對于關(guān)鍵字Ν,如果0〈N〈 = Μ,直接定位區(qū)第Ν條記錄,判斷記錄頭,如果記錄頭為1,則說明記錄存在,從直接定位區(qū)第Ν條記錄的記錄實體區(qū)得到記錄;
[0031](2)對于關(guān)鍵字Ν,如果0〈N〈 = Μ,直接定位區(qū)第Ν條記錄,判斷記錄頭,如果記錄頭為0,則說明關(guān)鍵字為Ν的記錄不存在;
[0032](3)對于關(guān)鍵字Ν>Μ,仍使用二分查找法在溢出區(qū)中判斷關(guān)鍵字為Ν的記錄是否存在,判斷依據(jù)和現(xiàn)有技術(shù)相同。
[0033]本發(fā)明提供的查找算法如圖3所示。
[0034]本發(fā)明提出的整數(shù)型關(guān)鍵字存儲方法和查找算法,同樣適用于長整數(shù)型、短整數(shù)型作為關(guān)鍵字的實時庫表;
[0035]本發(fā)明提出的整數(shù)型關(guān)鍵字存儲方法和查找算法同樣適用于取數(shù)字型關(guān)鍵字的一部分作為直接定位存儲依據(jù)的情況,如以關(guān)鍵字除上一個正整數(shù)取模做直接定位,以整數(shù)型關(guān)鍵字的某幾個比特的值做直接定位等。
[0036]本發(fā)明涉及的實時數(shù)據(jù)庫整數(shù)型關(guān)鍵字存儲方法及其查找算法是結(jié)合工作在應(yīng)用層的自主開發(fā)的實時庫上實現(xiàn),不依賴于具體的操作系統(tǒng),適用于各種操作系統(tǒng)。本發(fā)明涉及的實時數(shù)據(jù)庫整數(shù)型關(guān)鍵字存儲方法及其查找算法保證了可移植性,能夠隨著實時庫系統(tǒng)安全、穩(wěn)定地運行在 IBM ΑΙΧλ Sun Solaris、Alpha Tru64、HPUX、Linux、Windows 等操作系統(tǒng)平臺上;系統(tǒng)編程語言釆用ANSI C/C++,并符合IEEE P0SIX.2標準。
【權(quán)利要求】
1.一種實時數(shù)據(jù)庫整數(shù)型關(guān)鍵字存儲方法,其特征在于,對于實時數(shù)據(jù)庫中以整型值作為關(guān)鍵字的表,根據(jù)預(yù)設(shè)值,將記錄數(shù)據(jù)根據(jù)關(guān)鍵字大小分別采用非緊密排列與緊密排列的存儲方法,具體包括: 1)每張表的存儲空間分為等大小的兩部分,每張表設(shè)定一個最大記錄個數(shù),每個部分的大小為單條記錄個數(shù)X最大記錄個數(shù),其中第一塊存儲空間采用非緊密排列,第二塊存儲空間采用緊密排列; 2)對于整數(shù)型關(guān)鍵字值小于或等于最大記錄個數(shù)的記錄,將這部分記錄存儲在第一塊記錄空間中,記錄的位置是整數(shù)型關(guān)鍵字值作為下標對應(yīng)的存儲空間中的位置,如果記錄存在則記錄頭置為I,如果不存在則記錄頭置為O ; 3)對于整數(shù)型關(guān)鍵字大于最大記錄個數(shù)的記錄,按整數(shù)型關(guān)鍵字排序緊密存儲在第二塊存儲空間中。
2.根據(jù)權(quán)利要求1所述的實時數(shù)據(jù)庫整數(shù)型關(guān)鍵字存儲方法,其特征在于,還提供根據(jù)關(guān)鍵字的查找方法,如下: 1)對于所查找記錄整數(shù)型關(guān)鍵字小于或等于最大記錄個數(shù)的情況下,直接使用記錄整數(shù)型關(guān)鍵字作為查找點,將第一塊存儲區(qū)域該點記錄返回; 2)對于所查找記錄整數(shù)型關(guān)鍵字大于最大記錄個數(shù)的情況下,使用二分查找算法從第二塊存儲區(qū)域查詢到對應(yīng)的記錄返回。
3.根據(jù)權(quán)利要求2所述的實時數(shù)據(jù)庫整數(shù)型關(guān)鍵字存儲方法,其特征在于, 上述存儲方法和查找方法,同樣適用于長整數(shù)型、短整數(shù)型作為關(guān)鍵字的實時庫表。
4.根據(jù)權(quán)利要求2所述的實時數(shù)據(jù)庫整數(shù)型關(guān)鍵字存儲方法,其特征在于, 上述存儲方法和查找方法同樣適用于取數(shù)字型關(guān)鍵字的一部分作為直接定位存儲依據(jù)的情況,包括以關(guān)鍵字除上一個正整數(shù)取模做直接定位,以整數(shù)型關(guān)鍵字的某幾個比特的值做直接定位。
5.根據(jù)權(quán)利要求1所述的實時數(shù)據(jù)庫整數(shù)型關(guān)鍵字存儲方法,其特征在于,所述第一塊存儲空間為直接定位區(qū);第二塊存儲空間為溢出區(qū)。
【文檔編號】G06F17/30GK104281685SQ201410529914
【公開日】2015年1月14日 申請日期:2014年10月9日 優(yōu)先權(quán)日:2014年10月9日
【發(fā)明者】彭暉, 王瑾, 吳慶曦, 靳晶, 魏娜 申請人:國電南瑞科技股份有限公司