專利名稱:關(guān)系型數(shù)據(jù)庫和網(wǎng)狀數(shù)據(jù)結(jié)構(gòu)相結(jié)合的關(guān)系路徑搜索方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種搜索人際關(guān)系路徑的方法,特別涉及到對現(xiàn)有的關(guān)系型數(shù)據(jù)庫中 SQL語句不擅長搜索人際關(guān)系路徑方法的改進。
背景技術(shù):
隨著現(xiàn)在各種社交網(wǎng)站、社交軟件及社交工具的興起,這些大型網(wǎng)站通常都有數(shù) 千萬甚至數(shù)億的會員量,假設(shè)每個會員和其他ioo個會員有關(guān)聯(lián)關(guān)系(朋友、親戚、同事或 其它關(guān)系),這樣海量的數(shù)據(jù)構(gòu)建的人際關(guān)系網(wǎng)是相當復(fù)雜的。挖掘其中會員間的關(guān)系路徑 和關(guān)系圖(關(guān)系圖是關(guān)系路徑的集合),可以增進人與人之間的信任,具有廣泛的意義。并 且,依據(jù)"六度分割理論"會發(fā)現(xiàn)我們距離任何一個人的關(guān)系都不遠,可以增進社會和諧。
當A禾P B、 C有關(guān)聯(lián)關(guān)系,C和D有關(guān)聯(lián)關(guān)系,如果我們想求解A和D之間的關(guān)系 路徑,對于像這樣簡單的數(shù)據(jù),很容易就得到路徑是A〈->C〈->D。然而,假設(shè)在一個數(shù)據(jù)庫 中,任意一個節(jié)點和其它任意100個節(jié)點有關(guān)聯(lián)關(guān)系,當遍歷一個節(jié)點的第一層關(guān)系時,將 遍歷100個節(jié)點,當遍歷一個節(jié)點的第二層關(guān)系時,將遍歷100X100 = 10000個節(jié)點,依次 類推,當遍歷第6層關(guān)系時,將遍歷1012個節(jié)點。依本技術(shù)領(lǐng)域人員的公職常識所知,當前 絕大部分網(wǎng)站的數(shù)據(jù)都是保存在關(guān)系型數(shù)據(jù)庫中,而關(guān)系型數(shù)據(jù)庫是以表為基本數(shù)據(jù)結(jié)構(gòu) 的,其SQL語句并不擅長于此類關(guān)系路徑的搜索。本發(fā)明正是為求解海量數(shù)據(jù)(百萬級以 上)庫中兩個節(jié)點的關(guān)聯(lián)關(guān)系路徑,以及山多條關(guān)系路徑組成關(guān)系圖。
發(fā)明內(nèi)容
本發(fā)明的目的是實現(xiàn)一種關(guān)系型數(shù)據(jù)庫和網(wǎng)狀數(shù)據(jù)結(jié)構(gòu)相結(jié)合的關(guān)系路徑搜索 方法。突破了由于關(guān)系型數(shù)據(jù)庫的結(jié)構(gòu)限制在關(guān)系路徑搜索上造成的效率低下問題。
為達到上述目的,實現(xiàn)一種關(guān)系型數(shù)據(jù)庫和網(wǎng)狀數(shù)據(jù)結(jié)構(gòu)相結(jié)合的關(guān)系路徑搜索 方法,分為4個步驟 1)收集數(shù)據(jù)保存到關(guān)系型數(shù)據(jù)庫中。包括一個或者一個以上的保存用戶所有資 料的關(guān)系型數(shù)據(jù)庫[101],數(shù)據(jù)庫中的用戶ID字段是用戶會員(這里所指的會員,可以是 個人、單位以及其它實體,被稱為一個節(jié)點)的唯一標示(不重復(fù),能唯一標示一個用戶), 使用整型類型的數(shù)據(jù),用戶的其它資料數(shù)據(jù)根據(jù)相應(yīng)需求設(shè)置。為了突出主題,會員注冊資 料、登錄、加好友等一般性步驟不在此贅述。 2)從關(guān)系型數(shù)據(jù)庫中抽取節(jié)點關(guān)系數(shù)據(jù)保存成網(wǎng)狀數(shù)據(jù)結(jié)構(gòu),并實時更新 [104]。在內(nèi)存或硬盤中創(chuàng)建一個用戶基本列表[201],用戶基本列表[201]的索引號和用 戶ID有一個簡單的對應(yīng)關(guān)系,互相可以通過加上或減去一個常數(shù)計算所得,用戶基本列表 [201]中保存的成員是用戶相應(yīng)的關(guān)系列表句柄。讀取關(guān)系型數(shù)據(jù)庫中所有的用戶ID以及 需要參加判斷的用戶其它數(shù)據(jù),分別創(chuàng)建每個用戶的關(guān)系列表,并將關(guān)系列表的句柄存入 用戶基本列表[201]的相應(yīng)位置。用戶的關(guān)系列表中保存的是和此用戶有關(guān)聯(lián)關(guān)系的用戶 ID。(如圖2所示)
3)在網(wǎng)狀數(shù)據(jù)結(jié)構(gòu)的節(jié)點關(guān)系數(shù)據(jù)區(qū)中,搜索節(jié)點關(guān)系路徑[105]。需要請求路 徑關(guān)系的應(yīng)用程序(這里的應(yīng)用程序可以是運行于前端應(yīng)用服務(wù)器上的應(yīng)用程序,也可以 是運行于終端客戶端上的應(yīng)用程序)把搜索條件發(fā)送至服務(wù)端,服務(wù)端接收到搜索條件 [301],先將源ID和目標ID組合成一個唯一的ID,然后根據(jù)這個組合ID和其它的輸入條件 在關(guān)系路徑緩存區(qū)中搜索[302]。如果沒有找到,就依據(jù)輸入條件,在網(wǎng)狀數(shù)據(jù)結(jié)構(gòu)的節(jié)點 關(guān)系數(shù)據(jù)區(qū)中搜索關(guān)系路徑[305],直到完成所有搜索,然后將搜索的結(jié)果和相關(guān)聯(lián)的條件 保存至關(guān)系路徑緩存區(qū)[306],以加速下一次的同類搜索。然后將搜索結(jié)果發(fā)送至請求客戶 端[307]。(如圖3所示) 4)在關(guān)系型數(shù)據(jù)庫中使用SQL語句搜索關(guān)系路徑節(jié)點上的用戶的其它資料 [106],并組成呈現(xiàn)方式[107]。在接收到第(3)步搜索的結(jié)果之后,發(fā)送請求的應(yīng)用程序可 以根據(jù)搜索結(jié)果的關(guān)系路徑去關(guān)系型數(shù)據(jù)庫服務(wù)器上搜索路徑中成員的其它數(shù)據(jù)(比如 姓名、性別等),然后根據(jù)這些信息以及關(guān)系路徑條數(shù)組成相應(yīng)的呈現(xiàn)方式。比如如果是 一條關(guān)系路徑,可以呈現(xiàn)成條狀的由用戶姓名構(gòu)建的路徑;如果是多條關(guān)系路徑,可以呈現(xiàn) 成樹狀的、網(wǎng)狀的或者立體網(wǎng)狀的由用戶名稱構(gòu)成的關(guān)系圖。呈現(xiàn)方式可以由美術(shù)人員依 據(jù)需求進行設(shè)計,不局限于上述呈現(xiàn)方式。 采用上述方法,從保存用戶所有資料的關(guān)系型數(shù)據(jù)庫[101]中抽取節(jié)點關(guān)系數(shù) 據(jù),以網(wǎng)狀結(jié)構(gòu)(如圖2所示)保存在某個數(shù)據(jù)區(qū)[102]中,然后使用自定義的算法流程 (如圖4,是一種實施方案的算法流程)在此節(jié)點關(guān)系數(shù)據(jù)區(qū)中搜索節(jié)點關(guān)系路徑,這樣就 避免了關(guān)系型數(shù)據(jù)庫中SQL語句不擅長求解兩節(jié)點關(guān)系路徑的問題,然后在關(guān)系型數(shù)據(jù)庫 中搜索關(guān)系路徑節(jié)點上用戶的其它資料[106],最后組成某種形式(條形路徑狀或者網(wǎng)狀) 的呈現(xiàn)方式。可以重復(fù)步驟(3)和步驟(4),以完成不同條件的搜索。
本發(fā)明的有益效果
1)從結(jié)構(gòu)特點和理論分析如下 通常海量的用戶數(shù)據(jù)都被保存在關(guān)系型數(shù)據(jù)庫中,在數(shù)據(jù)庫的設(shè)計上為了滿足數(shù) 據(jù)庫的五個范式要求,其中用戶關(guān)系通常被保存在一張表(假設(shè)命為corm)中,假設(shè)數(shù)據(jù) 庫中有100萬個用戶數(shù)據(jù),每個用戶平均和其他任意100個用戶有關(guān)聯(lián)關(guān)系,這樣,關(guān)系表 conn中保存的數(shù)據(jù)有1億條。當搜索某用戶的第一層關(guān)系時,使用SQL語句要從conn表的 l億條數(shù)據(jù)中遍歷出他的100個關(guān)聯(lián)關(guān)系,搜索第二層關(guān)系時,他的100個關(guān)聯(lián)關(guān)系每一個 都要再次從conn表的1億條數(shù)據(jù)中遍歷,依次類推下去,這是個很龐大的搜索操作。依據(jù) 本發(fā)明的方法,如圖2所示網(wǎng)狀數(shù)據(jù)結(jié)構(gòu)的節(jié)點關(guān)系數(shù)據(jù),當搜索ID為2的第一層關(guān)系時, 根據(jù)用戶ID和用戶基本列表索引號的一一對應(yīng)關(guān)系,直接讀取用戶基本列表[201]的索引 號為2的位置的內(nèi)容,其內(nèi)容是ID為2的用戶的關(guān)系列表的句柄,可以直接定位到ID為2 的用戶的關(guān)系列表,在實際運算中,是個讀取指針的操作,依據(jù)本技術(shù)領(lǐng)域常識,要比關(guān)系 型數(shù)據(jù)庫中遍歷l億條數(shù)據(jù)要快的多。用戶的關(guān)系列表中保存的是和其用戶有關(guān)聯(lián)關(guān)系的 用戶ID,依次類推下去,可以根據(jù)這些ID快速定位到相應(yīng)的關(guān)系列表(具體算法詳見下述 的具體實施方式
)。依據(jù)本技術(shù)領(lǐng)域的常識可以很顯然的看出,本發(fā)明的方法在結(jié)構(gòu)和理論 上要比在關(guān)系型數(shù)據(jù)庫中搜索關(guān)系路徑要快的多。
2)從測試數(shù)據(jù)上分析如下 本發(fā)明已在申請人研發(fā)的人際關(guān)系搜索引擎中得到應(yīng)用,并進行了與關(guān)系型數(shù)據(jù)庫搜索關(guān)系路徑的比較測試。測試的軟硬件環(huán)境是"CPU 2.8GHz、內(nèi)存2G、WindowsServer2003操作系統(tǒng)、MySQL數(shù)據(jù)庫、人際關(guān)系搜索引擎";測試的數(shù)據(jù)環(huán)境為,通過隨機生成的IOO萬個用戶數(shù)據(jù),以及每個用戶和其他隨機的IOO個用戶有好友關(guān)系;測試的
操作,搜索兩個用戶的第一條最短關(guān)系路徑。測試數(shù)據(jù)結(jié)果如下
MySQL數(shù)據(jù)庫人際關(guān)系搜索引擎搜索第1層所 用的平均時間搜索第2層所 用的平均時間搜索第1層所 用的平均時間搜索第2層所用 的平均時間搜索任意兩者間 所用的平均時間
1. 36秒62.58秒0.00000062秒0.00000343秒0.113秒 從上圖的數(shù)據(jù)可以看出,使用本發(fā)明的方法搜索兩者之間第l層和第2層的第一條最短關(guān)系路徑所用的平均時間明顯少于MySQL數(shù)據(jù)庫。由于使用關(guān)系型數(shù)據(jù)庫在這種數(shù)據(jù)量級下搜索三層以及三層以上的關(guān)系路徑時,所消耗的硬件資源及時間資源已經(jīng)太大,導(dǎo)致不便測試。但從上圖中可以看出,使用本發(fā)明的方法搜索任意兩者間的平均時間已經(jīng)明顯小于MySQL數(shù)據(jù)的第一層搜索所用的平均時間,由此可以看出,本發(fā)明的方法比關(guān)系型數(shù)據(jù)庫在人際關(guān)系路徑的搜索效率上有明顯的突破性提高。
圖1為本發(fā)明一種關(guān)系型數(shù)據(jù)庫和網(wǎng)狀數(shù)據(jù)結(jié)構(gòu)相結(jié)合的關(guān)系路徑搜索方法的主要流程圖。 圖2為本發(fā)明一種關(guān)系型數(shù)據(jù)庫和網(wǎng)狀數(shù)據(jù)結(jié)構(gòu)相結(jié)合的關(guān)系路徑搜索方法的節(jié)點關(guān)系網(wǎng)狀數(shù)據(jù)結(jié)構(gòu)示意圖。 圖3為本發(fā)明一種關(guān)系型數(shù)據(jù)庫和網(wǎng)狀數(shù)據(jù)結(jié)構(gòu)相結(jié)合的關(guān)系路徑搜索方法的一個具體實施方案的路徑搜索請求流程圖。 圖4為本發(fā)明一種關(guān)系型數(shù)據(jù)庫和網(wǎng)狀數(shù)據(jù)結(jié)構(gòu)相結(jié)合的關(guān)系路徑搜索方法的一個具體實施方案的在節(jié)點關(guān)系數(shù)據(jù)區(qū)中搜索關(guān)系路徑的流程圖。 圖5為本發(fā)明一種關(guān)系型數(shù)據(jù)庫和網(wǎng)狀數(shù)據(jù)結(jié)構(gòu)相結(jié)合的關(guān)系路徑搜索方法的一個具體實施方案的服務(wù)器部署邏輯結(jié)構(gòu)圖。
具體實施例方式
本發(fā)明關(guān)系型數(shù)據(jù)庫和網(wǎng)狀數(shù)據(jù)結(jié)構(gòu)相結(jié)合的關(guān)系路徑搜索方法一個具體的實施方案是首先從保存用戶所有資料的關(guān)系型數(shù)據(jù)庫[101]中抽取節(jié)點關(guān)系數(shù)據(jù),以網(wǎng)狀結(jié)構(gòu)(如圖2所示)保存在某個數(shù)據(jù)區(qū)[102]中,然后使用自定義的算法流程(如圖4)在此節(jié)點關(guān)系數(shù)據(jù)區(qū)中搜索節(jié)點關(guān)系路徑,然后在關(guān)系型數(shù)據(jù)庫中搜索關(guān)系路徑節(jié)點上用戶的其它資料[106],最后組成某種形式(條形路徑狀或者網(wǎng)狀)的呈現(xiàn)方式??梢苑譃閮蓚€實施階段 第一階段創(chuàng)建關(guān)系型數(shù)據(jù)庫和抽取關(guān)系型數(shù)據(jù)庫中節(jié)點關(guān)系數(shù)據(jù)構(gòu)建節(jié)點關(guān)系數(shù)據(jù)區(qū)。如圖5所示,在邏輯上分為節(jié)點關(guān)系服務(wù)器、數(shù)據(jù)庫服務(wù)器、前端應(yīng)用服務(wù)器(在物理上,可能是同一 臺物理服務(wù)器)。 a)數(shù)據(jù)庫服務(wù)器采用關(guān)系型數(shù)據(jù)庫保存用戶的所有資料(比如用戶ID、用戶名、性別、年齡、所屬組、用戶的朋友關(guān)系等)。 b)節(jié)點關(guān)系服務(wù)器以網(wǎng)狀結(jié)構(gòu)保存節(jié)點關(guān)系(如圖2所示)以及需要參加條件判斷的用戶其它資料(比如用戶所屬組)。用戶基本列表[201]中保存的不是用戶ID,保存的是其中的用戶的關(guān)系列表的句柄(這里的句柄根據(jù)實現(xiàn)語言的不同,所指的數(shù)據(jù)類型不同,在C和C++里,指的是指針類型,在C#里指的是引用類型,其共同點就是都能直接指向相對應(yīng)的關(guān)系列表,并且可以快速定位到所指向的關(guān)系列表)以及和判斷相關(guān)的用戶其它數(shù)據(jù),用戶基本列表[201]的索引號和用戶ID有個簡單的對應(yīng)關(guān)系(比如,索引號等于用戶ID加上一個常數(shù),這個常數(shù)可以是0,正整數(shù)、負整數(shù))。用戶的關(guān)系列表中保存的是和這個用戶的有關(guān)聯(lián)關(guān)系的用戶ID。舉例說明用戶基本列表[201]的索引號和用戶ID的差值常數(shù)取值為O,那么索引號和用戶ID就是一一對應(yīng)關(guān)系,假設(shè)接受到輸入條件的源ID是2,那么就可以快速定位到列表索引號為2的位置,讀取其中的內(nèi)容是ID為2的用戶的關(guān)系列表句柄,根據(jù)此句柄直接定位到ID為2的用戶的關(guān)系列表[202],關(guān)系列表[202]中保存的是和ID為2的用戶有關(guān)聯(lián)關(guān)系的用戶ID(比如如果ID為3的用戶和ID為2的用戶是朋友關(guān)系,就把3保存入ID為2的用戶關(guān)系列表)。 c)節(jié)點關(guān)系數(shù)據(jù)同步[501],指的是當關(guān)系型數(shù)據(jù)中和節(jié)點關(guān)系數(shù)據(jù)區(qū)有關(guān)系的數(shù)據(jù)發(fā)生添加、刪除、修改等更新時,實時通知節(jié)點關(guān)系服務(wù)器更新相關(guān)數(shù)據(jù)。使用SQL語句編寫存儲過程,響應(yīng)關(guān)系型數(shù)據(jù)庫中添加、刪除、修改等事件,調(diào)用通訊例程,通知節(jié)點關(guān)系服務(wù)器更新相關(guān)數(shù)據(jù)。節(jié)點關(guān)系服務(wù)器之間的負載均衡和數(shù)據(jù)庫服務(wù)器之間的負載均衡,不是本發(fā)明要突出的主題,不在此贅述了 。 d)前端應(yīng)用服務(wù)器[502]包括Web服務(wù)端、應(yīng)用程序服務(wù)端(物理上可以是一臺或多臺服務(wù)器)等,在此層可以處理業(yè)務(wù)邏輯,接收用戶終端的請求,分解業(yè)務(wù)邏輯,生成搜索關(guān)系路徑的輸入條件,然后將此條件通過Socket、 Http或者遠程函數(shù)調(diào)用等通訊機制傳給后臺的節(jié)點關(guān)系服務(wù)器,搜索關(guān)系路徑,然后在關(guān)系型數(shù)據(jù)庫中搜索路徑上的用戶的其它資料,生成需要傳給用戶終端的數(shù)據(jù),傳給用戶終端。 第二階段搜索關(guān)系路徑并組成呈現(xiàn)圖。如圖l和圖5所示,前端應(yīng)用服務(wù)器[502]接收到搜索請求條件[103],然后在節(jié)點關(guān)系數(shù)據(jù)區(qū)中搜索節(jié)點關(guān)系路徑[105],得到節(jié)點關(guān)系路徑后,在關(guān)系型數(shù)據(jù)庫中搜索關(guān)系路徑節(jié)點上用戶的其它資料[106],然后把需要傳遞給用戶終端的數(shù)據(jù)傳遞給用戶終端,用戶終端得到相關(guān)數(shù)據(jù)后,組成呈現(xiàn)方式[107](單條路徑圖或者網(wǎng)狀圖)等。關(guān)系路徑搜索部分具體分解為如下步驟(如圖3所示) 1)接收搜索請求條件[301]。輸入的條件至少包含源ID和目標ID。除了源ID和目標ID以外的其它條件(比如所屬組、搜索關(guān)系層次、搜索多少條路徑等)如果沒有輸入,則使用系統(tǒng)設(shè)置的默認值。 2)搜索關(guān)系路徑緩存區(qū)[302]。關(guān)系路徑緩存區(qū)是根據(jù)源ID和目標ID的組合為索引保存的搜索歷史,同時也保存每條關(guān)系路徑的搜索條件,關(guān)系路徑緩存區(qū)可以加速搜索。 3)將搜索結(jié)果存入臨時緩存區(qū)[303]。通常請求端和服務(wù)端不在同一臺計算機上,它們之間采用Socket、 Http和遠程函數(shù)調(diào)用等遠程通訊機制,將搜索結(jié)果存入臨時緩存區(qū),可以由其它線程根據(jù)不同的通訊機制發(fā)送至請求端。 4)判斷是否完成請求條件[304]。比如,輸入的條件是搜索兩個節(jié)點間6層以內(nèi)的5條關(guān)系路徑,如果上述步驟只搜索到3條,沒有完成搜索條件,則將條件傳入下一個步驟(5)。 5)在節(jié)點關(guān)系數(shù)據(jù)區(qū)中搜索關(guān)系路徑[305]。為更詳細說明,此步驟搜索又分為如下子步驟(如圖4所示) 子步驟①接收輸入條件[401]。輸入的條件至少包含源ID和目標ID,在除了源ID和目標ID以外的其它條件(比如所屬組、搜索關(guān)系層次、搜索多少條路徑等)沒有輸入時,使用系統(tǒng)設(shè)置的默認值。 子步驟②將源ID壓入路徑棧[402]。路徑棧是一種保存在全局訪問區(qū)的后進先出的數(shù)據(jù)結(jié)構(gòu),在進行迭代搜索時,保存在路徑棧中的ID按先后順序排列正是要搜索的關(guān)系路徑。 子步驟③根據(jù)源ID直接定位到用戶基本列表[201]中相應(yīng)位置,并取出此用戶的用戶關(guān)系列表的句柄[403](節(jié)點關(guān)系數(shù)據(jù)結(jié)構(gòu)如圖2所示)。 子步驟 :根據(jù)上述句柄,直接定位到相應(yīng)的用戶關(guān)系列表[404](節(jié)點關(guān)系數(shù)據(jù)結(jié)構(gòu)如圖2所示)。 子步驟⑤如圖4所示,從判斷當前用戶關(guān)系列表是否已經(jīng)完全遍歷[405]- >按順序讀取當前用戶關(guān)系列表中下一個用戶的資料[406]_>判斷當前取出的用戶ID和目標ID是否一致[407]->判斷是否滿足其它的輸入條件[408]->讀取路徑棧,計算關(guān)系路徑,并將關(guān)系路徑存入臨時緩存區(qū)[409] >判斷是否搜索完成要求的條數(shù)或者滿足其它退出條件[410] >判斷當前用戶關(guān)系列表是否已經(jīng)完全遍歷[405],這是一個循環(huán)過程。按順序遍歷訪問當前用戶關(guān)系列表(當前用戶關(guān)系列表,是指在此層次迭代搜索中子步驟④所得到的用戶關(guān)系列表),當找到符合條件的ID時,讀取路徑棧,計算關(guān)系路徑,并將關(guān)系路徑存入臨時緩存區(qū)。在循環(huán)中,判斷是否搜索完成要求的條數(shù)或者滿足其它退出條件[410],滿足則退出。 子步驟⑥完成子步驟⑤之后,判斷當前正在搜索的層是否達到用戶設(shè)定或系統(tǒng)設(shè)定的最大搜索層數(shù)[411],如果否,進入子步驟⑦;如果是,進入子步驟⑧。
子步驟⑦重新遍歷當前用戶關(guān)系列表,以當前用戶關(guān)系列表中的ID代替源ID,其它條件不變,進入下一層進行迭代搜索[412]。 子步驟⑧判斷當前正在搜索的層是否是第一層[413],如果是,則退出;如果否,則彈出路徑棧中當層的源ID,返回上一層迭代搜索[414]。 6)將步驟(5)搜索的結(jié)果存入臨時緩存區(qū),同時存入關(guān)系路徑緩沖區(qū)[306]。
7)將臨時緩存區(qū)中的搜索結(jié)果發(fā)送至請求端[307]。根據(jù)選擇的通訊機制,同步方式或者異步方式將搜索結(jié)果發(fā)送至請求端。 上述實施方案中,充分發(fā)揮了關(guān)系型數(shù)據(jù)庫的SQL語句搜索和網(wǎng)狀數(shù)據(jù)結(jié)構(gòu)的關(guān)系路徑搜索的優(yōu)勢。并且,如圖l所示,在節(jié)點關(guān)系數(shù)據(jù)區(qū)中搜索節(jié)點關(guān)系路徑[105],在關(guān)系型數(shù)據(jù)庫中搜索關(guān)系路徑節(jié)點上用戶的其它資料[106],其中關(guān)聯(lián)的是"節(jié)點關(guān)系路徑",所以,可以依據(jù)系統(tǒng)需求針對上述關(guān)系路徑搜索算法進行優(yōu)化,甚至替換,只要得到"節(jié)點
7關(guān)系路徑",就能在關(guān)系型數(shù)據(jù)庫中搜索關(guān)系路徑節(jié)點上用戶的其它資料[106]。這種設(shè)計被認為是松耦合的。
權(quán)利要求
一種關(guān)系型數(shù)據(jù)庫和網(wǎng)狀數(shù)據(jù)結(jié)構(gòu)相結(jié)合的關(guān)系路徑搜索方法,包括以下4個步驟1)收集數(shù)據(jù)保存到關(guān)系型數(shù)據(jù)庫中。注冊賬戶、填寫資料、添加好友等操作。2)從關(guān)系型數(shù)據(jù)庫中抽取節(jié)點關(guān)系數(shù)據(jù),并保存成網(wǎng)狀數(shù)據(jù)結(jié)構(gòu)。3)在網(wǎng)狀數(shù)據(jù)結(jié)構(gòu)的節(jié)點關(guān)系數(shù)據(jù)區(qū)中,搜索節(jié)點關(guān)系路徑。4)在關(guān)系型數(shù)據(jù)庫中使用SQL語句搜索節(jié)點關(guān)系路徑上的用戶的其它資料,并組成單條路徑狀或多條路徑網(wǎng)狀等呈現(xiàn)方式。
2. 如權(quán)利要求1所述,一種關(guān)系型數(shù)據(jù)庫和網(wǎng)狀數(shù)據(jù)結(jié)構(gòu)相結(jié)合的關(guān)系路徑搜索方法,其特征是節(jié)點關(guān)系數(shù)據(jù)從關(guān)系型數(shù)據(jù)庫的其它數(shù)據(jù)中抽取出來,獨立保存到節(jié)點關(guān)系數(shù)據(jù)區(qū)。
3. 如權(quán)利要求1所述,一種關(guān)系型數(shù)據(jù)庫和網(wǎng)狀數(shù)據(jù)結(jié)構(gòu)相結(jié)合的關(guān)系路徑搜索方法,其特征是節(jié)點關(guān)系路徑的搜索和關(guān)系型數(shù)據(jù)庫中的SQL語句搜索分離開,并使用節(jié)點關(guān)系路徑在兩者間聯(lián)系。
4. 如權(quán)利要求1所述,一種關(guān)系型數(shù)據(jù)庫和網(wǎng)狀數(shù)據(jù)結(jié)構(gòu)相結(jié)合的關(guān)系路徑搜索方法,其特征是從關(guān)系型數(shù)據(jù)庫中抽取的節(jié)點關(guān)系數(shù)據(jù)是以網(wǎng)狀數(shù)據(jù)結(jié)構(gòu)保存的。
5. 如權(quán)利要求1所述,一種關(guān)系型數(shù)據(jù)庫和網(wǎng)狀數(shù)據(jù)結(jié)構(gòu)相結(jié)合的關(guān)系路徑搜索方法,其特征是步驟(3)在網(wǎng)狀數(shù)據(jù)結(jié)構(gòu)的節(jié)點關(guān)系數(shù)據(jù)中,搜索節(jié)點關(guān)系路徑,其搜索方法是被設(shè)計為松耦合嵌入的,可以使用任何搜索節(jié)點關(guān)系路徑的搜索方法替換。
全文摘要
本發(fā)明公開了一種關(guān)系型數(shù)據(jù)庫和網(wǎng)狀數(shù)據(jù)結(jié)構(gòu)相結(jié)合的關(guān)系路徑搜索方法,涉及到對現(xiàn)有的關(guān)系型數(shù)據(jù)庫中SQL語句不擅長搜索關(guān)系路徑的改進。隨著現(xiàn)在各種社交網(wǎng)站、社交軟件及社交工具的興起,這些大型網(wǎng)站通常都有數(shù)千萬甚至數(shù)億的會員量,這些會員的數(shù)據(jù)以及會員之間的關(guān)系數(shù)據(jù)通常都保存在關(guān)系型數(shù)據(jù)庫中,然而,現(xiàn)有的關(guān)系型數(shù)據(jù)庫SQL語句并不擅長于在這樣復(fù)雜的關(guān)系數(shù)據(jù)中求解兩個節(jié)點的關(guān)系路徑。本發(fā)明采用將一般數(shù)據(jù)和節(jié)點關(guān)系數(shù)據(jù)分離,以及節(jié)點路徑搜索步驟也從SQL語句中分離出來的方式,有效的提高了搜索效率。
文檔編號G06F17/30GK101727479SQ20091020012
公開日2010年6月9日 申請日期2009年12月8日 優(yōu)先權(quán)日2009年12月8日
發(fā)明者張玉峰 申請人:張玉峰