專利名稱:一種數(shù)據(jù)庫中主從表數(shù)據(jù)獲取的方法
一種數(shù)據(jù)庫中主^數(shù)據(jù)獲取的方法技術(shù)領(lǐng)域5本發(fā)明涉及軟件開發(fā)領(lǐng)域,使用關(guān)系數(shù)據(jù)庫(Relatinal-Database)作 為數(shù)據(jù)存儲(chǔ)介質(zhì),具體涉及一種提高數(shù)據(jù)庫主從表數(shù)據(jù)獲取效率的方法。
背景技術(shù):
關(guān)系數(shù)據(jù)庫在軟件開發(fā)領(lǐng)域應(yīng)用非常廣泛。在關(guān)系數(shù)據(jù)模型中,實(shí)際 io 對(duì)象以表(Table)的形式存在,而表之間任意種類的依賴聯(lián)系即稱關(guān)系。 主從表(又稱父從表)是一種常見的關(guān)系,它由一個(gè)主表和多個(gè)從表組成。 一般情況下,在主表定義主鍵,從表定義相同意義字段為外鍵,依靠主外 鍵約束將它們組織起來共同表示完整的信息模型。以電信光傳輸網(wǎng)管系統(tǒng)為例,圍繞路徑所定義的幾個(gè)表如下 15 路徑Trail ( Trail—ID, UserLabd, State, Direction……)路徑端點(diǎn)TrailEnds (Trail—ID, EndA, EndZ,......)路徑路由分段基本信息TrailRoute ( Trail—ID , SegmentNo , LayerRate,......)主表為Trail,從表為TrailEnds和TrailRoute。它們依靠Trail—ID字段20 建立對(duì)應(yīng)關(guān)系,共同記錄路徑概念的完整信息。由于實(shí)體之間聯(lián)系的復(fù)雜性,主從表存儲(chǔ)模式在現(xiàn)實(shí)中大量應(yīng)用,因而該模式下的數(shù)據(jù)獲取也就成為經(jīng)常面對(duì)的頻繁搡作。此時(shí)如果需要從數(shù) 據(jù)庫中獲取完整信息,必須訪問所涉及的主表和所有從表,將各部分信息 依靠主外鍵字段進(jìn)行匹配,以組裝正確結(jié)果。而一旦表的記錄較多,加上
從表往往不止一個(gè),這種匹配將導(dǎo)致字段比較次數(shù)急劇增加,可能極大加 重?cái)?shù)據(jù)庫系統(tǒng)負(fù)擔(dān)。綜上所述,主vMv^數(shù)據(jù)的獲取成為基于關(guān)系數(shù)據(jù)庫的軟件性能的一個(gè)重要影響因素。以下將M記錄之間用以建立關(guān)系的字段定義為主M關(guān)系字段,例5如上述Trail—ID。目前主從表獲取方案主要有兩種1、 游標(biāo)方式使用游標(biāo)打開主表;每次通過游標(biāo)下移從主表中提取出一條記錄,就 根據(jù)主從表關(guān)系字段值,去從表1中檢索相應(yīng)記錄獲得子信息1;去從表 io 2檢索子信息2;......當(dāng)所有從表檢索完畢,將獲得一條完整的信息;如此往復(fù),直到游標(biāo)移動(dòng)到終點(diǎn),得到包含所有完整信息的正確結(jié)果RObject。2、 內(nèi)存匹配方式將主表對(duì)應(yīng)記錄檢索出來填寫到結(jié)果對(duì)象RObject;將M 1對(duì)應(yīng)記 錄檢索出來,按照主從表關(guān)系字段值,依次在第一步得到的結(jié)果對(duì)象 is R0bject中尋找正確位置并填寫進(jìn)去;在從表1所有記錄處理完畢后,按 類似方式依次處理M 2、 M 3......,直到所有從表處理完畢,得到包含全部完整信息的正確結(jié)果RObject。對(duì)于方案1,缺點(diǎn)是對(duì)主表的每一條記錄,都會(huì)在A^打開一次結(jié)果 集并進(jìn)行全表掃描匹配,當(dāng)表的規(guī)模達(dá)到一定程度時(shí),這個(gè)過程非常費(fèi)時(shí)。 20 對(duì)于方案2,缺點(diǎn)是應(yīng)用程序內(nèi)存中需要執(zhí)行的匹配過多,從表的每一條記錄都需要到RObject中尋找對(duì)應(yīng)的位置。從效率角度考慮,上述方案l和2都存在不足,尤其是當(dāng)從表個(gè)數(shù)較 多,主表、從表記錄數(shù)目均較大時(shí),它們?cè)谛噬系娜毕輰⒊蔀槌绦虻钠?頸。25 發(fā)明內(nèi)容本發(fā)明的目的是克服上述現(xiàn)有主W數(shù)據(jù)獲取方法的缺點(diǎn),而提供的 一種清晰的、高效率的方法。本發(fā)明具有以下特點(diǎn)1)主從表檢索結(jié)果按照相同準(zhǔn)則排序;2)主 5 從表當(dāng)前記錄同步推進(jìn),匹配次數(shù)降低到最少;3)所有涉及到的表只打 開一次。一種數(shù)據(jù)庫中主從表數(shù)據(jù)獲取方法,包括如下步驟 步驟1、針對(duì)主從表關(guān)系字段,遵照相同的排序準(zhǔn)則打開主表和所有 從表;io 步驟2、主表提取當(dāng)前記錄;步驟3、在從表中尋找與主表當(dāng)前記錄匹配的記錄;步驟4、按照和步驟3相同的方式依次訪問其它從表,獲取與主表當(dāng)前記錄匹配的記錄,所有從表得到的記錄與主表當(dāng)前記錄共同組成一條完整的數(shù)據(jù);is 步驟5、主表當(dāng)前訪問位置下挪一次,回到步驟2繼續(xù)執(zhí)行,直到主表檢索出的所有記錄提取完畢時(shí)結(jié)束; 步驟6、關(guān)閉處于打開狀態(tài)的表。本發(fā)明所述方法,主從表記錄按照相同排序準(zhǔn)則檢索,使得從表的每 條記錄只會(huì)與相鄰區(qū)段的主表記錄匹配,將整個(gè)過程的比較次數(shù)降低到最 20 低,克服了現(xiàn)有方案反復(fù)匹配、交叉匹配的缺點(diǎn);主、從表只打開一次,當(dāng)前訪問位置一直保持向前移動(dòng),只遍歷一趟 而沒有往復(fù),克服了現(xiàn)有方案多次打開同一張表的缺點(diǎn);本發(fā)明所迷方法應(yīng)用于光傳輸網(wǎng)管系統(tǒng)獲取路徑路由信息實(shí)例時(shí),與 普通的游標(biāo)獲取方式相對(duì)比,效率提高約80倍,取得良好效果。
圖1為光傳輸網(wǎng)管系統(tǒng)路徑路由實(shí)體關(guān)系圖; 圖2為主從表數(shù)據(jù)提取流程圖。
具體實(shí)施方式
下面結(jié)合附圖對(duì)本發(fā)明所述方法進(jìn)行詳細(xì)說明。本發(fā)明所述主從表數(shù)據(jù)獲取方法,包括如下步驟步驟1、針對(duì)主從表關(guān)系字段,遵照相同的排序準(zhǔn)則打開主表和所有錄;10 步驟2、主表提取當(dāng)前記錄;步驟3、在從表l中尋找與主表當(dāng)前記錄匹配的記錄;步驟4、按照和步驟3相同的方式依次訪問其它從表,獲取與主表當(dāng)前記錄匹配的記錄,所有從表得到的記錄與主表當(dāng)前記錄共同組成一條完整的數(shù)據(jù);15 步驟5、主表當(dāng)前訪問位置下挪一次,回到步驟2繼續(xù)執(zhí)行;步驟6、重復(fù)上述步驟直到主表檢索出的所有記錄提取完畢時(shí)結(jié)束; 步驟7、關(guān)閉處于打開狀態(tài)的表。所述主從表數(shù)據(jù)獲取方法,其中步驟3中尋找從表1與主表當(dāng)前記錄 匹配數(shù)據(jù)的處理包含以下步驟 20 (1)比較從表1當(dāng)前記錄與主表當(dāng)前記錄的主從表關(guān)系字段值情況l:如果相等,說明從表1的當(dāng)前記錄與主表當(dāng)前記錄對(duì)應(yīng),將 其信息提取完畢后,從表1的當(dāng)前訪問位置向下挪一位,回到步驟(l) 繼續(xù)執(zhí)行;情況2:如果不等,按照排序準(zhǔn)則,若前者應(yīng)該在后者之后,則從表 251當(dāng)前記錄的數(shù)據(jù)不處理,訪問位置不變,等待下一次與主表記錄的匹配
機(jī)會(huì);情況3:如果不等,按照排序準(zhǔn)則,若前者應(yīng)該在后者之前,則忽略 從表1的當(dāng)前記錄,其訪問位置下挪一位,回到步驟(1)繼續(xù)執(zhí)行; 情況4:如果發(fā)現(xiàn)從表1檢索到的所有記錄提取完畢,則關(guān)閉該表, 5 后繼過程不再對(duì)該表進(jìn)行訪問;(2)發(fā)生以上情況2、 4,從表1針對(duì)主表當(dāng)前記錄的匹配操作結(jié)束, 過程返回。所述步驟1,打開主表和M時(shí),記錄必須按照主M關(guān)系字段大小 排序返回,并且排序的方式對(duì)所有表都一致。 10 主從表關(guān)系字段并不局限于由一個(gè)字段組成,若為多個(gè)字段,則設(shè)定第 一排序參照列,第二排序參照列…...。下面以光傳輸網(wǎng)絡(luò)層網(wǎng)管系統(tǒng)中的常見對(duì)象——^徑路由為例,詳細(xì) 說明本發(fā)明所述主從表數(shù)據(jù)獲取過程。先筒要說明相關(guān)概念所謂路徑,描述的是通訊網(wǎng)端到端的數(shù)據(jù)傳送 15 業(yè)務(wù)。而一條完整的路徑由若干分段組成,每個(gè)分段都有端點(diǎn)、工作拓樸、 工作通道等屬性,這些信息合在一起稱為路徑路由。路徑路由與所包含信息實(shí)體的關(guān)系如圖l所示,為了便于理解將路徑 也包括在內(nèi),以虛線表示。如果需要從數(shù)據(jù)庫提M4圣路由的完整信息,要求包含分段端點(diǎn)、工 20 作拓樸、工作通道等屬性。利用本發(fā)明所述的數(shù)據(jù)獲取方法,可以纟艮好地 滿足這個(gè)需求。數(shù)據(jù)存儲(chǔ)方法
圖1中的模型在數(shù)據(jù)庫中分4張表存儲(chǔ),如表l所示:TrailRoute 路由分段信息表(Trail—ID , SegmentNo, LayerRate,......) 路徑ID,分段號(hào), 速率,……TrailRouteAZEnd 路由分段端點(diǎn)信息表(Trail—ID, SegmentNo, EndA, EndZ ......) 路徑ID,分段號(hào),分段端點(diǎn)A,分段端點(diǎn)Z……TrailRouteWorkTopo 路由工作拓?fù)浔?Trail一ID, SegmentNo, TopoID,......) 路徑ID,分段號(hào),分段工作拓?fù)銲D,……TrailRouteWorkPath 路由工作通道表(Trail一ID, SegmentNo, Path,......) 路徑ID,分段號(hào),分段工作通道,……表l這幾張表屬于典型的主從表存儲(chǔ)模式,其中主表為railRoute,主M 關(guān)系字段為Trail—ID和SegmentNo。于是在這兩個(gè)字段上定義M索引, 5 之所以在主鍵建立聚鍰索引,是為了加快select語句排序檢索的執(zhí)行速度。 數(shù)據(jù)提取方法1、 按照記錄檢索方式4個(gè)表的記錄返回必須依照一致準(zhǔn)則排序。這 點(diǎn)由聚簇索引保證,不需要添加額外的orderby子句;2、 本例中主從表關(guān)系字段為各個(gè)表的Trail—ID和SegmentNo字段; io 3、具體的提取步驟為1) 使用4個(gè)sql語句打開4個(gè)結(jié)果集select * from TrailRoute where condition—sentence select * from TrailRouteAZEnd where condition—sentence select * from TrailRouteWorkTopo where condition—sentence 15 select * from TrailRouteWorkPath where condition—sentence因?yàn)榫鄞厮饕脑颍薪Y(jié)果集默認(rèn)按Trail—ID、 SegmentNo升序排列;2) 從TrailRoute結(jié)果集提取一條記錄,獲得其主從表關(guān)系字段值為 TraillD—main和SegmentNo—main,將這兩個(gè)值的組合命名為Key—main;3 )從TrailRouteAZEnd結(jié)杲集提取一條記錄,獲得其主從表關(guān)系字段 值為TraillD—1和SegmentNo—1,將這兩個(gè)值的組合命名為Key_l。比較(1 )如果Key—1 = Key—main,則TrailRouteAZEnd當(dāng)前記錄與 5 TrailRoute當(dāng)前記錄對(duì)應(yīng),將數(shù)據(jù)填寫到緩存對(duì)象,然后TrailRouteAZEnd 結(jié)果集執(zhí)行NextRow操作;(2 )如果Key—1 > Key_main , 明TrailRoute當(dāng)前^己錄在 TrailRouteAZEnd表中缺少對(duì)應(yīng)記錄,不填寫任何數(shù)據(jù),TrailRouteAZEnd 結(jié)果集不執(zhí)行NextRow操作,等待TrailRoute下一條記錄,嘗試與其匹配; io (3 )如果Key_l < Key—main,說明TrailRouteAZEnd當(dāng)前記錄已經(jīng)失去與TrailRoute記錄匹配的機(jī)會(huì)(因?yàn)橥驥ey_ main會(huì)越來越大),不填 寫任何數(shù)據(jù),TrailRouteAZEnd當(dāng)前記錄當(dāng)前記錄略過,其結(jié)果集執(zhí)行 NextRow操作,回到步驟3)繼續(xù)執(zhí)行。(4)如果發(fā)現(xiàn)TrailRouteAZEnd結(jié)果集所有記錄已經(jīng)讀取完畢,則關(guān) 15閉該結(jié)果集,后繼操作不再訪問TrailRouteAZEnd表。 4)對(duì)TrailRouteAZEnd的本次訪問結(jié)束;5 )按照步驟3) —樣的方式訪問 TrailRouteWorkTopo 、 TrailRouteWorkPath。至此TrailRoute當(dāng)前記錄的屬性全部獲取完畢。6) TrailRoute結(jié)果集執(zhí)行NextRow操作,回到步驟2)繼續(xù)執(zhí)行,直到 20 TrailRoute結(jié)果集提取完畢。對(duì)主從表關(guān)系字段值的大小比較,需要進(jìn)行說明的是1、 比4交準(zhǔn)則與檢索所用的排序準(zhǔn)則一致,關(guān)系字段為一個(gè)或多個(gè)均 如此。2、 在本例中,Key_main和Key—1大小比較方式為25 ( 1 )如果TrailID一main = TraillD—1 ,并且SegmentNo—main =
SegmentNo—1 ,則認(rèn)為二者相等。(2) 如果TrailID—main>TrailID—1,或TrailIDjnain = TraillD—1但 SegmentNomain > SegmentNo—1 ,則^人為Key—main 〉 Key—1 。(3) 如果TraillD—main <TrailID_l,或TraillD—main = TrailIDJ但 5 SegmentNo—main < SegmentNo—1 , 則i人為Key—main < Key—1 。整個(gè)過程的流程如圖2所示。應(yīng)當(dāng)理解的是,對(duì)本領(lǐng)域普通技術(shù)人員來說,可以根據(jù)本發(fā)明的技術(shù) 方案的說明和具體實(shí)施方式
做出4^種可能的改變或替換,所有這些改變或 替換都屬于本發(fā)明的權(quán)利要求的倮護(hù)范圍。
權(quán)利要求
1、一種數(shù)據(jù)庫中主從表數(shù)據(jù)獲取方法,其特征在于,包括如下步驟步驟1、針對(duì)主從表關(guān)系字段,遵照相同的排序準(zhǔn)則打開主表和所有從表;步驟2、主表提取當(dāng)前記錄;步驟3、在從表中尋找與主表當(dāng)前記錄匹配的記錄;步驟4、按照和步驟3相同的方式依次訪問其它從表,獲取與主表當(dāng)前記錄匹配的記錄,所有從表得到的記錄與主表當(dāng)前記錄共同組成一條完整的數(shù)據(jù);步驟5、主表當(dāng)前訪問位置下挪一次,回到步驟2繼續(xù)執(zhí)行,直到主表檢索出的所有記錄提取完畢時(shí)結(jié)束;步驟6、關(guān)閉處于打開狀態(tài)的表。
2、 如權(quán)利要求1所述的數(shù)據(jù)庫中主4數(shù)據(jù)獲取方法,其特征在于 所述主從表關(guān)系字段并不局限于由一個(gè)字段組成。
3、如權(quán)利要求l所述的數(shù)據(jù)庫中主從表數(shù)據(jù)獲取方法,其特征在于所述打開主表和所有M^,記錄必須按照主M關(guān)系字段大小排序返 回,并且排序的方式對(duì)所有表都一致。
4、如權(quán)利要求1所述的數(shù)據(jù)庫中主從表數(shù)據(jù)獲取方法,其特征在于 所述步驟3在從表中尋找與主表當(dāng)前記錄匹配的記錄是指,比較從表當(dāng)前記錄與主表當(dāng)前記錄的主從表關(guān)系字段值(1) 如果從表的當(dāng)前記錄與主表當(dāng)前記錄對(duì)應(yīng),則將信息提取,然 后從表的當(dāng)前訪問位置向下挪一位,繼續(xù)比較從表當(dāng)前記錄與主表當(dāng)前記 錄的主從表關(guān)系字段值;(2) 如果從表的當(dāng)前記錄在主表的當(dāng)前記錄之后,則從表當(dāng)前記錄 的數(shù)據(jù)不處理,訪問位置不變,等待下一次與主表記錄的匹配機(jī)會(huì),從表針對(duì)當(dāng)前記錄的匹配搡作結(jié)束;(3) 如果從表的當(dāng)前記錄在主表的當(dāng)前記錄之前,則忽略從表的當(dāng) 前記錄,其訪問位置下挪一位,繼續(xù)比較從表當(dāng)前記錄與主表當(dāng)前記錄的 主從表關(guān)系字段值;(4) 如果發(fā)現(xiàn)從表檢索到的所有記錄提取完畢,則關(guān)閉該表,后繼 過程不再對(duì)該表進(jìn)行訪問,從表針對(duì)當(dāng)前記錄的匹配操作結(jié)束。
全文摘要
本發(fā)明公開了一種數(shù)據(jù)庫中主從表數(shù)據(jù)獲取方法,包括,針對(duì)主從表關(guān)系字段,遵照相同的排序準(zhǔn)則打開主表和所有從表;主表提取當(dāng)前記錄;在從表中尋找與主表當(dāng)前記錄匹配的記錄;按照與前述步驟相同的方式依次訪問其它從表,獲取與主表當(dāng)前記錄匹配的記錄,所有從表得到的記錄與主表當(dāng)前記錄共同組成一條完整的數(shù)據(jù);主表當(dāng)前訪問位置下挪一次,直到主表檢索出的所有記錄提取完畢時(shí)結(jié)束;關(guān)閉處于打開狀態(tài)的表。本發(fā)明所述方法,所有主、從表只打開一次,克服了現(xiàn)有方案多次打開同一張表的缺點(diǎn);降低了整個(gè)過程的比較次數(shù),克服了現(xiàn)有方案反復(fù)匹配、交叉匹配的缺點(diǎn);提高了獲取數(shù)據(jù)的效率。
文檔編號(hào)G06F17/30GK101162463SQ20061014968
公開日2008年4月16日 申請(qǐng)日期2006年10月13日 優(yōu)先權(quán)日2006年10月13日
發(fā)明者明 陳, 馬潤(rùn)宏 申請(qǐng)人:中興通訊股份有限公司