專利名稱:一種數(shù)據(jù)庫(kù)多表信息初始化方法
技術(shù)領(lǐng)域:
本發(fā)明涉及數(shù)據(jù)庫(kù)設(shè)計(jì)領(lǐng)域,尤其涉及一種數(shù)據(jù)庫(kù)多表信息初始化方法。
背景技術(shù):
數(shù)據(jù)庫(kù)應(yīng)用領(lǐng)域中,在信息量較大的情況下,通常采用將一條完整的信息分成多個(gè)部分后分別放入不同的數(shù)據(jù)庫(kù)表中進(jìn)行保存的方法,上述不同的數(shù)據(jù)庫(kù)表通常被稱為數(shù)據(jù)庫(kù)多表。為了便于查詢,通常在系統(tǒng)開(kāi)始啟動(dòng)時(shí),對(duì)該系統(tǒng)所涉及的數(shù)據(jù)庫(kù)多表進(jìn)行初始化,即通過(guò)對(duì)數(shù)據(jù)庫(kù)多表的讀取,將分布于數(shù)據(jù)庫(kù)多表中的各部分信息提取出來(lái),從而獲得一條完整的信息記錄。
在現(xiàn)有的數(shù)據(jù)庫(kù)多表信息初始化方法中,通常以各表所保存的數(shù)據(jù)量為依據(jù),將數(shù)據(jù)量最大的數(shù)據(jù)庫(kù)表確定為主表,將除主表以外的其它數(shù)據(jù)庫(kù)表確定為次表。以表1和表2所組成的數(shù)據(jù)庫(kù)多表為例,由于表1中包含的數(shù)據(jù)量比表2中的數(shù)據(jù)量大,因此將表1確定為主表、表2為次表。
表1
表2參見(jiàn)圖1,確定了主表和次表后的現(xiàn)有數(shù)據(jù)庫(kù)多表信息初始化方法包括以下步驟步驟101.讀取主表信息,形成主表記錄集。
本步驟中,使用數(shù)據(jù)庫(kù)多表的系統(tǒng)首先對(duì)主表進(jìn)行讀取,將主表中的每一行作為一條記錄,在自身內(nèi)存中形成主表記錄集。對(duì)于表1所示的主表,本步驟所形成的主表記錄集包括排列順序與表1完全相同的8條記錄,每條記錄中均含有設(shè)備名稱、版本以及使用協(xié)議等信息。
步驟102.讀取主表記錄集中的首條記錄。
本步驟中,使用數(shù)據(jù)庫(kù)多表的系統(tǒng)從保存在內(nèi)存的主表記錄集中獲取第一條記錄。對(duì)于由表1形成的主表記錄集而言,此時(shí)讀取到的首條記錄為設(shè)備名稱Dev1、一版本V100、使用協(xié)議SNMP。其中,對(duì)于使用數(shù)據(jù)庫(kù)多表的系統(tǒng)而言,Dev1和V100是已知信息,而SNMP則是未知信息。
步驟103.根據(jù)主表記錄集中的當(dāng)前記錄,讀取各個(gè)次表中的信息。
由于當(dāng)前主表記錄中包含有未知信息,而根據(jù)建立數(shù)據(jù)庫(kù)多表時(shí)設(shè)定的各表間的關(guān)聯(lián)關(guān)系可知,上述未知信息存在于各個(gè)次表中,因此本步驟中將當(dāng)前主表記錄中的未知信息作為查詢條件,利用數(shù)據(jù)庫(kù)查詢語(yǔ)句依次查詢各個(gè)次表。當(dāng)系統(tǒng)通過(guò)數(shù)據(jù)庫(kù)查詢操作從表2中找到上述未知信息的具體含義后,數(shù)據(jù)庫(kù)多表將所找到的未知信息的具體含義作為查詢結(jié)果,返回給內(nèi)存。
例如,對(duì)于表1所形成的主表記錄集中,在當(dāng)前記錄為該主表記錄集中的首條記錄時(shí),SNMP是未知信息,則將SNMP作為包含在查詢語(yǔ)句中的查詢條件,對(duì)表2進(jìn)行讀取,然后在獲取到SNMP的含義是簡(jiǎn)單網(wǎng)絡(luò)管理協(xié)議后,向內(nèi)存返回?cái)?shù)據(jù)庫(kù)多表查詢結(jié)果。
步驟104.將當(dāng)前主表記錄和讀取到的次表中包含的信息拼裝成一條完整的記錄。
在完成了本次對(duì)次表的讀取后,使用數(shù)據(jù)庫(kù)多表的系統(tǒng)將當(dāng)前主表記錄中的已知信息與從次表中獲取到的未知信息的含義相組合,形成一條完整的記錄。仍以表1的首條記錄和表2為例,本步驟中將數(shù)據(jù)庫(kù)多表返回給內(nèi)存的簡(jiǎn)單網(wǎng)絡(luò)管理協(xié)議代入到表1首條記錄中的SNMP中,形成內(nèi)容如下的完整記錄設(shè)備名稱Dev1、版本V100、使用協(xié)議為簡(jiǎn)單網(wǎng)絡(luò)管理協(xié)議。
步驟105~106.判斷當(dāng)前主表記錄是否為主表記錄集中的尾記錄,如果是,則結(jié)束本數(shù)據(jù)庫(kù)多表信息初始化流程,否則,轉(zhuǎn)向主表記錄集中的下一條記錄,并返回執(zhí)行步驟103。
如果當(dāng)前的主表記錄不是主表記錄集中的尾記錄,則表示主表記錄集中還存在未被讀取的記錄,并且上述未被讀取的記錄中的未知信息有待于從各個(gè)次表中獲??;如果當(dāng)前的主表記錄是主表記錄集中的尾記錄,則表示已完成主表記錄集和各個(gè)次表的讀取,并已形成全部所需的完整記錄,即完成了數(shù)據(jù)庫(kù)多表信息初始化。
上述步驟101至106組成了現(xiàn)有的數(shù)據(jù)庫(kù)多表信息初始化過(guò)程。假設(shè)數(shù)據(jù)庫(kù)多表由主表和n個(gè)次表組成,其中主表的行數(shù)為m。由上述各步驟可見(jiàn),在形成主表記錄集時(shí),主表中的每一行形成一條主表記錄,即形成包含m條記錄的主表記錄集;而每讀取一條主表記錄,都要從數(shù)據(jù)庫(kù)中將所有的次表讀取一次,即讀取次表的數(shù)據(jù)庫(kù)操作共執(zhí)行(m×n)次;又考慮到形成主表記錄集時(shí)對(duì)主表的讀取,則為完成數(shù)據(jù)庫(kù)多表信息初始化而需要讀取數(shù)據(jù)庫(kù)的次數(shù)為(1+mn)次。另外,假設(shè)每次從數(shù)據(jù)庫(kù)中讀取主表所消耗的時(shí)間為k1秒,每次從數(shù)據(jù)庫(kù)中讀取次表所消耗的時(shí)間為k2秒,則完成數(shù)據(jù)庫(kù)多表信息初始化的時(shí)間為(k1+mnk2)秒。
對(duì)于表1和表2而言,主表中共有8行,即m=8;次表只有一個(gè),即n=1,則完成數(shù)據(jù)庫(kù)多表信息初始化而需要讀取數(shù)據(jù)庫(kù)的次數(shù)為(1+8×1)=9次。
再假設(shè)每次讀取表1需要的時(shí)間為0.05秒,每次讀取表2的時(shí)間為0.02秒,則數(shù)據(jù)庫(kù)多表信息初始化的時(shí)間為(0.05×1+8×1×0.02)=0.21秒。
從上述的分析可知,現(xiàn)有的數(shù)據(jù)庫(kù)多表信息初始化方法的缺點(diǎn)在于當(dāng)主表包含的行數(shù)較多、次表的數(shù)目較多時(shí),使得讀取數(shù)據(jù)庫(kù)所的消耗的時(shí)間較長(zhǎng)、以及讀取數(shù)據(jù)庫(kù)的次數(shù)較多,因此完成數(shù)據(jù)庫(kù)多表信息初始化的時(shí)間較長(zhǎng)、速度較慢、效率較低。
發(fā)明內(nèi)容
有鑒于此,本發(fā)明的目的在于提供一種高效率的數(shù)據(jù)庫(kù)多表信息初始化方法。
為實(shí)現(xiàn)上述目的,本發(fā)明提供了一種數(shù)據(jù)庫(kù)多表信息初始化方法,所述數(shù)據(jù)庫(kù)多表包括主表和次表,其特征在于,該方法包括以下步驟A.將各個(gè)次表中的信息讀取到內(nèi)存中;B.讀取主表中的信息,并在內(nèi)存中生成主表記錄集;C.根據(jù)預(yù)先建立的主表記錄集中的未知信息與次表信息之間的關(guān)聯(lián)關(guān)系,以所述主表記錄集中的未知信息為索引,通過(guò)所述關(guān)聯(lián)關(guān)系,檢索內(nèi)存中與該未知信息相關(guān)聯(lián)的次表信息,并將所述主表記錄集中的已知信息和檢索到的相關(guān)次表信息拼裝成數(shù)據(jù)庫(kù)多表信息的完整記錄。
步驟A所述將各個(gè)次表中的信息讀取到內(nèi)存中之后,該方法進(jìn)一步包括在內(nèi)存中為每個(gè)所述次表建立對(duì)應(yīng)的映射表,將讀取到的次表中的一行保存為所述映射表的一個(gè)元素單元;步驟C所述主表記錄集中的未知信息與次表信息之間的關(guān)聯(lián)關(guān)系的建立方法為建立所述未知信息與包含該未知信息的映射表之間的對(duì)應(yīng)關(guān)系,以及建立所述未知信息與該未知信息對(duì)應(yīng)的元素單元在映射表中的位置之間的對(duì)應(yīng)關(guān)系;
步驟C所述對(duì)內(nèi)存中與該未知信息相對(duì)應(yīng)的次表信息進(jìn)行檢索的方法為根據(jù)建立的關(guān)聯(lián)關(guān)系,由主表記錄集中的未知信息確定對(duì)應(yīng)的映射表以及對(duì)應(yīng)的元素單元在所述映射表中的位置,再根據(jù)所述映射表的位置,從對(duì)應(yīng)的元素單元中提取所需的次表信息。
步驟A所述將各個(gè)次表中的信息讀取到內(nèi)存中之后,該方法進(jìn)一步包括在內(nèi)存中為每個(gè)所述次表建立對(duì)應(yīng)的映射表,將讀取到的次表中的一行保存為所述映射表的一個(gè)元素單元;步驟C所述主表記錄集中的未知信息與次表信息之間的關(guān)聯(lián)關(guān)系的建立方法為在讀取所述次表的同時(shí),從數(shù)據(jù)庫(kù)多表中讀入主表中位置信息與次表的關(guān)聯(lián)關(guān)系;步驟C所述對(duì)內(nèi)存中與該未知信息相對(duì)應(yīng)的次表信息進(jìn)行檢索的方法為根據(jù)建立的關(guān)聯(lián)關(guān)系,由主表記錄集中的未知信息確定對(duì)應(yīng)的映射表以及對(duì)應(yīng)的元素單元在所述映射表中的位置,再根據(jù)所述映射表的位置,從對(duì)應(yīng)的元素單元中提取所需的次表信息。
所述將讀取到的次表信息中的一行保存為所述映射表的一個(gè)元素單元的方法為以所述元素單元中與主表未知信息相一致的項(xiàng)目作為關(guān)鍵字,以該行中該未知信息對(duì)應(yīng)的信息作為元素值;所述從對(duì)應(yīng)的元素單元中提取所需的次表信息的方法為根據(jù)所述未知信息與映射表的對(duì)應(yīng)關(guān)系,確定關(guān)鍵字所對(duì)應(yīng)的映射表,根據(jù)未知信息與元素單元位置的對(duì)應(yīng)關(guān)系,將該關(guān)鍵字轉(zhuǎn)換成元素單元的位置,再根據(jù)所述位置找到對(duì)應(yīng)的元素單元,獲取該元素單元中的元素值。
如果所述未知信息為一條以上,則在所述步驟C之后,進(jìn)一步包括判斷當(dāng)前記錄是否為主表記錄集的尾記錄,如果是,則結(jié)束本拼裝完整記錄的流程,否則,轉(zhuǎn)向主表記錄集中的下一條記錄,并返回執(zhí)行步驟C。
所述步驟C之后,該方法進(jìn)一步包括將所述次表信息從內(nèi)存中刪除。
步驟A所述在內(nèi)存中形成主表記錄集的方法為將所述主表的每一行保存為所述主表記錄集中的一條記錄。
應(yīng)用本發(fā)明,能夠有效的提高數(shù)據(jù)庫(kù)多表信息初始化的效率。具體而言,本發(fā)明具有如下有益效果1.本發(fā)明通過(guò)對(duì)數(shù)據(jù)庫(kù)多表中的每個(gè)數(shù)據(jù)庫(kù)表均分別執(zhí)行一次讀取操作,而將其中的內(nèi)容保存到內(nèi)存中,然后再對(duì)內(nèi)存中所保存的主表和次表對(duì)應(yīng)的信息進(jìn)行檢索,并拼裝成完整的記錄,則為了完成數(shù)據(jù)庫(kù)多表信息初始化而進(jìn)行的讀取數(shù)據(jù)庫(kù)的次數(shù)與數(shù)據(jù)庫(kù)多表中的數(shù)據(jù)庫(kù)表的數(shù)目相同,較為明顯的減少了讀取數(shù)據(jù)庫(kù)操作的次數(shù),提高了數(shù)據(jù)庫(kù)多表信息初始化的效率。
2.本發(fā)明進(jìn)一步采用映射表(Map)的形式,將各個(gè)次表中的信息保存在內(nèi)存中。由于Map具有快速查找性能,則本發(fā)明中數(shù)據(jù)庫(kù)多表信息初始化所消耗的時(shí)間較短,初始化效率較高。
圖1為現(xiàn)有的數(shù)據(jù)庫(kù)多表初始化方法的流程圖。
圖2為本發(fā)明數(shù)據(jù)庫(kù)多表初始化方法的流程圖。
具體實(shí)施例方式
為使本發(fā)明的目的、技術(shù)方案更加清楚明白,以下參照附圖并舉實(shí)施例,對(duì)本發(fā)明做進(jìn)一步的詳細(xì)說(shuō)明。
本發(fā)明為一種數(shù)據(jù)庫(kù)多表信息初始化方法,其基本思想是首先,將各個(gè)次表中的信息讀取到內(nèi)存中;而后,讀取主表中的信息,并在內(nèi)存中形成主表記錄集;然后,根據(jù)預(yù)先建立的主表記錄集中的未知信息與次表信息之間的關(guān)聯(lián)關(guān)系,以所述主表記錄集中的未知信息為索引,通過(guò)所述關(guān)聯(lián)關(guān)系,檢索內(nèi)存中與該未知信息相關(guān)聯(lián)的次表信息,并將所述主表記錄集中的已知信息和檢索到的相關(guān)次表信息拼裝成數(shù)據(jù)庫(kù)多表信息的完整記錄下面仍以表1和表2構(gòu)成的數(shù)據(jù)庫(kù)多表為例,說(shuō)明本發(fā)明的數(shù)據(jù)庫(kù)多表信息初始化方法。
本發(fā)明在對(duì)數(shù)據(jù)庫(kù)多表信息進(jìn)行初始化之前,以各表中所保存的數(shù)據(jù)量為依據(jù),預(yù)先確定主表和次表。對(duì)于表1和表2而言,由于表1中包含的數(shù)據(jù)量比表2大,因此確定表1為主表、表2為次表。
參見(jiàn)圖2,本發(fā)明的數(shù)據(jù)庫(kù)多表信息初始化方法包括以下步驟步驟201.將各個(gè)次表中的信息讀取到內(nèi)存中,并建立各個(gè)次表對(duì)應(yīng)的Map。
Map是一種表單式集合,它包括多個(gè)由關(guān)鍵字(Key)及其對(duì)應(yīng)的元素值(Value)所組成的元素單元(Element)。Map使用哈希(Hash)算法進(jìn)行自身的保存和檢索,即Map在關(guān)鍵字與該關(guān)鍵字所屬元素單元的位置之間建立對(duì)應(yīng)關(guān)系,在執(zhí)行檢索時(shí),Map通過(guò)哈希算法將關(guān)鍵字轉(zhuǎn)換為對(duì)應(yīng)的存儲(chǔ)位置信息,再通過(guò)該位置信息直接找到相應(yīng)的元素單元,并從所找到的元素單元中提取元素值。因此,Map是具有快速查找功能的數(shù)據(jù)容器。
為了利用Map的快速查找性能,使用數(shù)據(jù)庫(kù)多表的系統(tǒng)在本步驟中對(duì)預(yù)先確定的各個(gè)次表進(jìn)行讀取,并且在內(nèi)存中分別為各個(gè)次表建立對(duì)應(yīng)的Map,以保存讀入的次表信息。在所建立的Map中,一個(gè)元素單元與次表中的表項(xiàng)相對(duì)應(yīng),即將次表中的一行保存為Map中一個(gè)元素單元,并且每個(gè)元素單元均以該行中與主表未知信息相對(duì)應(yīng)的項(xiàng)目為關(guān)鍵字、以該行中的其他項(xiàng)目為元素值。以表2為例,使用數(shù)據(jù)庫(kù)多表的系統(tǒng)首先從表2中獲取SNMP對(duì)應(yīng)于簡(jiǎn)單網(wǎng)絡(luò)管理協(xié)議以及MML對(duì)應(yīng)于人機(jī)語(yǔ)言交互協(xié)議的信息;然后,在內(nèi)存中建立包含兩個(gè)元素單元的Map,其中一個(gè)元素單元的關(guān)鍵字為SNMP、對(duì)應(yīng)的元素值為簡(jiǎn)單網(wǎng)絡(luò)管理協(xié)議,另一個(gè)元素單元的關(guān)鍵字為MML、對(duì)應(yīng)的元素值為人機(jī)語(yǔ)言交互協(xié)議。
另外,本步驟在讀取次表信息時(shí),還會(huì)讀入主表中的未知信息與次表的關(guān)聯(lián)關(guān)系,以便確定未知信息所對(duì)應(yīng)的Map。也可以采用其他方法在本步驟中建立未知信息與次表的關(guān)聯(lián)關(guān)系,例如建立未知信息與包含該未知信息的Map之間的對(duì)應(yīng)關(guān)系,并建立未知信息與該未知信息對(duì)應(yīng)的元素單元在Map中的位置之間的對(duì)應(yīng)關(guān)系。
步驟202.讀取主表中的信息,并在內(nèi)存中形成主表記錄集。
本步驟中,使用數(shù)據(jù)庫(kù)的系統(tǒng)通過(guò)對(duì)主表執(zhí)行一次數(shù)據(jù)庫(kù)讀取操作,獲得主表中保存的所有信息,并將主表中的每一行作為一條記錄,在內(nèi)存中形成主表記錄集。
步驟203.將主表記錄集中的主表信息及Map中的次表信息拼裝成完整的數(shù)據(jù)庫(kù)多表信息記錄。
使用數(shù)據(jù)庫(kù)多表的系統(tǒng)在本步驟中以主表記錄集中的未知信息為索引,對(duì)次表對(duì)應(yīng)的Map進(jìn)行檢索,并在找到未知信息的含義后,將主表中的已知信息與從Map中獲得的未知信息的含義相組合,形成完整的記錄。具體而言,本步驟拼裝完整記錄的方法包括a.獲取主表記錄集中的首條記錄;b.將當(dāng)前記錄中的未知信息作為關(guān)鍵字,根據(jù)預(yù)先建立的未知信息與Map間的對(duì)應(yīng)關(guān)系,對(duì)內(nèi)存中的所有Map進(jìn)行檢索,確定包含該關(guān)鍵字的Map,再根據(jù)由該關(guān)鍵字換算得到的位置信息,在所確定的Map中獲取對(duì)應(yīng)的元素值,從而得到該未知信息對(duì)應(yīng)的信息;c.將獲取到的未知信息對(duì)應(yīng)的信息與當(dāng)前記錄中的已知信息相結(jié)合,組成一條完整的記錄;d.判斷當(dāng)前記錄是否為主表記錄集的尾記錄,如果是,則結(jié)束本拼裝完整記錄的流程,并進(jìn)入步驟204,否則,轉(zhuǎn)向主表記錄集中的下一條記錄,并返回執(zhí)行步驟b。
以表1和表2組成的數(shù)據(jù)庫(kù)多表為例,本步驟中首先以表1所形成的主表記錄集中首條記錄的SNMP為關(guān)鍵字,確定表2所對(duì)應(yīng)的Map,而后在該Map中找到SNMP對(duì)應(yīng)的簡(jiǎn)單網(wǎng)絡(luò)管理協(xié)議,并將簡(jiǎn)單網(wǎng)絡(luò)管理協(xié)議代入到主表記錄集的首條記錄,形成內(nèi)容如下的完整記錄設(shè)備名稱Dev1、版本V100、使用協(xié)議為簡(jiǎn)單網(wǎng)絡(luò)管理協(xié)議;然后轉(zhuǎn)向主表記錄集的第2條記錄,進(jìn)行完整記錄的拼裝;依此類推,直到主表記錄集中第8條記錄的未知信息MML被表2對(duì)應(yīng)的Map中的人機(jī)語(yǔ)言交互協(xié)議所代替、形成完整的記錄為止。
由于此時(shí)數(shù)據(jù)庫(kù)多表信息初始化所需的主表信息和次表信息均存在于內(nèi)存之中,因此本步驟的所有操作均是在內(nèi)存中完成的。
步驟204.釋放已建立的Map。
本步驟中,使用數(shù)據(jù)庫(kù)多表的系統(tǒng)將步驟201在內(nèi)存中建立的所有Map刪除,以便釋放內(nèi)存空間。
至此,本發(fā)明數(shù)據(jù)庫(kù)多表信息初始化完成。
本發(fā)明數(shù)據(jù)庫(kù)多表信息初始化的過(guò)程中,假設(shè)數(shù)據(jù)庫(kù)多表中包括n個(gè)次表,并且主表的行數(shù)為m。由上述的步驟201至步驟204可見(jiàn),本發(fā)明只需對(duì)主表和各個(gè)次表分別執(zhí)行一次數(shù)據(jù)庫(kù)讀取操作,即為完成數(shù)據(jù)庫(kù)多表信息初始化而需要讀取數(shù)據(jù)庫(kù)的次數(shù)為(1+n)次,明顯少于現(xiàn)有數(shù)據(jù)庫(kù)多表初始化方法的(1+mn)次。
另外,假設(shè)每次從數(shù)據(jù)庫(kù)中讀取主表所消耗的時(shí)間為k1秒,每次從數(shù)據(jù)庫(kù)中讀取次表所消耗的時(shí)間為k2秒,每次從內(nèi)存中讀取Map所消耗的時(shí)間為k3秒,又由于每讀取一條主表記錄,都要將所有的Map讀取一次,則完成數(shù)據(jù)庫(kù)多表信息初始化的時(shí)間為(k1+nk2+mk3)秒。實(shí)踐證明,從保存于內(nèi)存的Map中獲取一條數(shù)據(jù)所需的時(shí)間k3小于萬(wàn)分之一秒,因此本發(fā)明的數(shù)據(jù)庫(kù)多表信息初始化時(shí)間遠(yuǎn)小于現(xiàn)有技術(shù)的(k1+mnk2)秒。
對(duì)于表1和表2構(gòu)成的數(shù)據(jù)庫(kù)多表而言,主表中共有8行,即m=8;次表只有一個(gè),即n=1,則完成數(shù)據(jù)庫(kù)多表信息初始化而需要讀取數(shù)據(jù)庫(kù)的次數(shù)為(1+n)=(1+1)=2次。
再假設(shè)每次讀取表1需要的時(shí)間為0.05秒,每次讀取表2的時(shí)間為0.02秒,每次讀取Map的時(shí)間為0.0001秒,則數(shù)據(jù)庫(kù)多表信息初始化的時(shí)間為(k1+nk2+mk3)=(0.05×1+1×0.02+8×0.0001)=0.0708秒。
可見(jiàn),表1和表2使用本發(fā)明的方法進(jìn)行初始化時(shí),所需的時(shí)間只是現(xiàn)有技術(shù)的三分之一。
在通常情況下,主表包括10萬(wàn)行左右。假設(shè)主表行數(shù)m=105行,次表數(shù)目n=3個(gè),主表讀取時(shí)間k1=0.2秒,次表讀取時(shí)間k2=0.05秒,Map讀取時(shí)間k3=0.0001秒,則使用現(xiàn)有技術(shù)的方法進(jìn)行數(shù)據(jù)庫(kù)多表初始化時(shí),所消耗的時(shí)間為k1+mnk2=0.2+105×3×0.05=15000.2秒;而使用本發(fā)明的方法進(jìn)行數(shù)據(jù)庫(kù)多表初始化時(shí),所消耗的時(shí)間為k1+nk2+mk3=0.2+3×0.05+105×0.0001=10.35秒。
可見(jiàn),此時(shí)本發(fā)明的初始化效率比現(xiàn)有技術(shù)的初始化效率提高了1千多倍。
此時(shí)使用本發(fā)明的方法對(duì)數(shù)據(jù)庫(kù)多表進(jìn)行初始化時(shí),無(wú)論是讀取數(shù)據(jù)庫(kù)的次數(shù),還是初始化所消耗的時(shí)間,均會(huì)大大減少,從而使得數(shù)據(jù)庫(kù)多表的初始化效率顯著的提高總之,應(yīng)用本發(fā)明,能夠有效的減少數(shù)據(jù)庫(kù)多表信息初始化中讀取數(shù)據(jù)庫(kù)的次數(shù)、縮短初始化時(shí)間、提高初始化效率。
以上所述僅為本發(fā)明的較佳實(shí)施例而已,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi),所做的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。
權(quán)利要求
1.一種數(shù)據(jù)庫(kù)多表信息初始化方法,所述數(shù)據(jù)庫(kù)多表包括主表和次表,其特征在于,該方法包括以下步驟A.將各個(gè)次表中的信息讀取到內(nèi)存中;B.讀取主表中的信息,并在內(nèi)存中生成主表記錄集;C.根據(jù)預(yù)先建立的主表記錄集中的未知信息與次表信息之間的關(guān)聯(lián)關(guān)系,以所述主表記錄集中的未知信息為索引,通過(guò)所述關(guān)聯(lián)關(guān)系,檢索內(nèi)存中與該未知信息相關(guān)聯(lián)的次表信息,并將所述主表記錄集中的已知信息和檢索到的相關(guān)次表信息拼裝成數(shù)據(jù)庫(kù)多表信息的完整記錄。
2.如權(quán)利要求1所述的方法,其特征在于,步驟A所述將各個(gè)次表中的信息讀取到內(nèi)存中之后,該方法進(jìn)一步包括在內(nèi)存中為每個(gè)所述次表建立對(duì)應(yīng)的映射表,將讀取到的次表中的一行保存為所述映射表的一個(gè)元素單元;步驟C所述主表記錄集中的未知信息與次表信息之間的關(guān)聯(lián)關(guān)系的建立方法為建立所述未知信息與包含該未知信息的映射表之間的對(duì)應(yīng)關(guān)系,以及建立所述未知信息與該未知信息對(duì)應(yīng)的元素單元在映射表中的位置之間的對(duì)應(yīng)關(guān)系;步驟C所述對(duì)內(nèi)存中與該未知信息相對(duì)應(yīng)的次表信息進(jìn)行檢索的方法為根據(jù)建立的關(guān)聯(lián)關(guān)系,由主表記錄集中的未知信息確定對(duì)應(yīng)的映射表以及對(duì)應(yīng)的元素單元在所述映射表中的位置,再根據(jù)所述映射表的位置,從對(duì)應(yīng)的元素單元中提取所需的次表信息。
3.如權(quán)利要求1所述的方法,其特征在于,步驟A所述將各個(gè)次表中的信息讀取到內(nèi)存中之后,該方法進(jìn)一步包括在內(nèi)存中為每個(gè)所述次表建立對(duì)應(yīng)的映射表,將讀取到的次表中的一行保存為所述映射表的一個(gè)元素單元;步驟C所述主表記錄集中的未知信息與次表信息之間的關(guān)聯(lián)關(guān)系的建立方法為在讀取所述次表的同時(shí),從數(shù)據(jù)庫(kù)多表中讀入主表中位置信息與次表的關(guān)聯(lián)關(guān)系;步驟C所述對(duì)內(nèi)存中與該未知信息相對(duì)應(yīng)的次表信息進(jìn)行檢索的方法為根據(jù)建立的關(guān)聯(lián)關(guān)系,由主表記錄集中的未知信息確定對(duì)應(yīng)的映射表以及對(duì)應(yīng)的元素單元在所述映射表中的位置,再根據(jù)所述映射表的位置,從對(duì)應(yīng)的元素單元中提取所需的次表信息。
4.如權(quán)利要求2或3所述的方法,其特征在于,所述將讀取到的次表信息中的一行保存為所述映射表的一個(gè)元素單元的方法為以所述元素單元中與主表未知信息相一致的項(xiàng)目作為關(guān)鍵字,以該行中該未知信息對(duì)應(yīng)的信息作為元素值;所述從對(duì)應(yīng)的元素單元中提取所需的次表信息的方法為根據(jù)所述未知信息與映射表的對(duì)應(yīng)關(guān)系,確定關(guān)鍵字所對(duì)應(yīng)的映射表,根據(jù)未知信息與元素單元位置的對(duì)應(yīng)關(guān)系,將該關(guān)鍵字轉(zhuǎn)換成元素單元的位置,再根據(jù)所述位置找到對(duì)應(yīng)的元素單元,獲取該元素單元中的元素值。
5.如權(quán)利要采1所述的方法,其特征在于,如果所述未知信息為一條以上,則在所述步驟C之后,進(jìn)一步包括判斷當(dāng)前記錄是否為主表記錄集的尾記錄,如果是,則結(jié)束本拼裝完整記錄的流程,否則,轉(zhuǎn)向主表記錄集中的下一條記錄,并返回執(zhí)行步驟C。
6.如權(quán)利要求1或5所述的方法,其特征在于,所述步驟C之后,該方法進(jìn)一步包括將所述次表信息從內(nèi)存中刪除。
7.如權(quán)利要求1所述的方法,其特征在于,步驟A所述在內(nèi)存中形成主表記錄集的方法為將所述主表的每一行保存為所述主表記錄集中的一條記錄。
全文摘要
本發(fā)明公開(kāi)了一種數(shù)據(jù)庫(kù)多表信息初始化方法,所述數(shù)據(jù)庫(kù)多表包括主表和次表,該方法包括以下步驟A.將各個(gè)次表中的信息讀取到內(nèi)存中;B.讀取主表中的信息,并在內(nèi)存中生成主表記錄集;C.根據(jù)預(yù)先建立的主表記錄集中的未知信息與次表信息之間的關(guān)聯(lián)關(guān)系,以所述主表記錄集中的未知信息為索引,通過(guò)所述關(guān)聯(lián)關(guān)系,檢索內(nèi)存中與該未知信息相關(guān)聯(lián)的次表信息,并將所述主表記錄集中的已知信息和檢索到的相關(guān)次表信息拼裝成數(shù)據(jù)庫(kù)多表信息的完整記錄。應(yīng)用本發(fā)明,數(shù)據(jù)庫(kù)多表信息初始化過(guò)程中執(zhí)行的數(shù)據(jù)庫(kù)讀取次數(shù)較少、初始化時(shí)間較短、效率較高。
文檔編號(hào)G06F17/30GK1834957SQ200510055449
公開(kāi)日2006年9月20日 申請(qǐng)日期2005年3月17日 優(yōu)先權(quán)日2005年3月17日
發(fā)明者畢洪濤, 萊密斯 申請(qǐng)人:華為技術(shù)有限公司