本發(fā)明涉及一種數(shù)據(jù)查找領(lǐng)域,尤其涉及一種快速查找關(guān)聯(lián)數(shù)據(jù)的方法。
背景技術(shù):
:在大數(shù)據(jù)挖掘中,對于一些有關(guān)聯(lián)的數(shù)據(jù)需要進行整合,例如電信套餐資費上需要以用戶或套餐信息進行存儲與關(guān)聯(lián),根據(jù)需要獲取相關(guān)聯(lián)的所有信息,再比如在設(shè)置一些推薦功能(菜單推薦、音樂推薦等)時,同樣需要獲取大量的相關(guān)信息進行處理。目前,對于相關(guān)數(shù)據(jù)的收集與處理,一般通過集合進行分類后在關(guān)聯(lián),而集合之間的合并與關(guān)聯(lián)的效率直接影響著數(shù)據(jù)處理的效率。當(dāng)數(shù)據(jù)通過集合進行分類表示時,通常采用大寫字母表示集合,小寫字母表示集合的元素,并將集合A中不同元素的數(shù)目稱為集合A的基數(shù),記作card(A),當(dāng)存在多個集合A0,A1,A2,……,An,每個集合中包含有不同數(shù)量的有限多個元素,那么在計算各個集合的關(guān)聯(lián)度時,需要對所有有交集的集合進行合并,要求合并完成后的最終的新的集合之間無交集,并獲取此時最大元素個數(shù)的集合Ax,計算其元素的個數(shù)card(Ax)。在現(xiàn)有技術(shù)中,合并存在關(guān)聯(lián)的集合時的處理方式是這樣的:如圖1所示,把集合從左到右排列分別為A0,A1,A2,……,An-1,An,從最左邊的第一個集合A0開始作為主端集合,依次與其右邊A1,A2,A3直到An(這輪比較這些集合稱作副端)進行交集判斷,邏輯如下:若主端A0集合與副端A1集合有交集,則A0集合與A1集合需要進行合并,生成的并集替換原有的副端的A1集合中內(nèi)容,如此反復(fù),從左到右依次完成主端集合A0集合的交集計算;A0集合的所有交集計算完成后,依次向右從A1作為主端集合開始,從左到右分別與A2、A3直到An逐一計算A1的交集,處理的方式與A0一致,以此反復(fù);最后一輪是計算An-1和An的交集情況(由于An右邊沒有集合了,就此結(jié)束)。所有計算完成后將形成所有無交集的集合,這就是我們最終要的集合分組,分別計算每個集合的元素個數(shù),最大的集合就是包含最多元素數(shù)量的集合。上述方案邏輯比較簡潔清晰,但是該方案的效率一般,處理過程中會發(fā)現(xiàn)處理最慢的地方是在集合操作中的交集判斷,當(dāng)集合數(shù)量巨大(超過百萬),且每個集合之間的關(guān)聯(lián)度很大時(如十萬個集合以上有相互的關(guān)聯(lián)關(guān)系,并將最終形成交集),處理性能將急劇下降。技術(shù)實現(xiàn)要素:本發(fā)明要解決的技術(shù)問題,在于提供一種快速查找關(guān)聯(lián)數(shù)據(jù)的方法,提高數(shù)據(jù)分類以及數(shù)據(jù)關(guān)聯(lián)查詢的效率。本發(fā)明是這樣實現(xiàn)的:一種快速查找關(guān)聯(lián)數(shù)據(jù)的方法,包括如下步驟:步驟10、獲取待處理數(shù)據(jù)進行分類,將同一類別的數(shù)據(jù)劃分在一個集合下,作為該集合的元素,每一集合包含數(shù)量不等的元素;步驟20、對每一集合的每一元素創(chuàng)建一條記錄插入二維表中,每一記錄包含元素字段、集合字段以及分組編號字段;步驟30、將所述二維表按集合字段進行排列得到表A,按元素字段進行排列得到表B,所述表A和表B均包含元素字段、集合字段、索引字段、反向索引字段以及分組編號字段;步驟40、依次獲取表A中的一分組編號為空的記錄作為源記錄,設(shè)置本輪次的分組編號值,通過反向索引在表A和表B中反復(fù)查找,得到與所述源記錄所在的源集合的所有關(guān)聯(lián)集合,并將所述源集合的記錄以及所述源集合的所有關(guān)聯(lián)集合的記錄所對應(yīng)的分組編號置為本輪次的分組編號值;步驟50、根據(jù)相同的分組編號快速查詢到所有關(guān)聯(lián)的集合,從而得到所有相關(guān)的記錄,得到所有關(guān)聯(lián)數(shù)據(jù)群;其中,所述表A和表B互為對應(yīng)列表,所述索引字段按對應(yīng)記錄所在列表的位置進行編號,所述反向索引字段按照對應(yīng)記錄在對應(yīng)列表中的位置進行編號。進一步的,所述分組編號初始值為空。進一步的,所述步驟40進一步包括:步驟41、創(chuàng)建一新的二維表relaA,用于存儲表A中的待遍歷記錄;步驟42、依次獲取表A中一條分組編號為空的記錄作為源記錄,并設(shè)置本輪次的分組編號值,通過反向索引查詢表B中所有與所述源記錄存在相同元素字段的第一相關(guān)記錄集,再逐一通過所述第一相關(guān)記錄集中每一條記錄的反向索引查詢表A中所有與該條記錄存在相同集合字段的第二相關(guān)記錄集,逐一判斷所述第二相關(guān)記錄集中每一記錄對應(yīng)的分組編號是否為空,若是,則將第二相關(guān)記錄集的記錄插入列表relaA的尾部,并將其對應(yīng)的分組編號置為本輪次的分組編號值,否則,跳過對該條記錄的操作;步驟43、依次獲取列表relaA中未被遍歷到的一記錄作為源記錄,通過反向索引查詢表B中所有與源記錄存在相同元素字段的第三相關(guān)記錄集,再逐一通過所述第三相關(guān)記錄集中每一條記錄的反向索引查詢表A中所有與該條記錄存在相同集合字段的第四相關(guān)記錄集,逐一判斷所述第四相關(guān)記錄集中每一記錄對應(yīng)的分組編號是否為空,若是,則將所述第四相關(guān)記錄集的記錄插入到列表relaA的尾部,并將其對應(yīng)的分組編號置為本輪次的分組編號值,否則,跳過對該條記錄的操作;步驟44、判斷列表relaA中是否存在未被遍歷到的記錄,若是,則返回步驟43,否則,進入步驟45;步驟45、判斷表A中是否存在分組編號為空的記錄,若是,則返回步驟42,否則,結(jié)束流程。進一步的,所述本輪次對應(yīng)的分組編號值為與所述表A中非空的分組編號值不同的數(shù)值。本發(fā)明具有如下優(yōu)點:本發(fā)明通過將數(shù)據(jù)劃分集合后存入二維表,并引入反向索引,在兩個列表之間的往返關(guān)聯(lián)查找能直接命中被關(guān)聯(lián)記錄,最大限度減少計算中的無用性遍歷,極大的提升了集合關(guān)聯(lián)性分析的處理性能,提高大數(shù)據(jù)處理效率。附圖說明下面參照附圖結(jié)合實施例對本發(fā)明作進一步的說明。圖1為現(xiàn)有技術(shù)中集合合并的原理示意圖。圖2為本發(fā)明一種快速查找關(guān)聯(lián)數(shù)據(jù)的方法執(zhí)行流程圖。具體實施方式如圖2所示,一種快速查找關(guān)聯(lián)數(shù)據(jù)的方法,包括如下步驟:步驟10、獲取待處理數(shù)據(jù)進行分類,將同一類別的數(shù)據(jù)劃分在一個集合下,作為該集合的元素,每一集合包含數(shù)量不等的元素;步驟20、對每一集合的每一元素創(chuàng)建一條記錄插入二維表中,每一記錄包含元素字段、集合字段、索引字段、反向索引字段以及分組編號字段,所述分組編號初始值為空;步驟30、將所述二維表按集合字段進行排列得到表A,按元素字段進行排列得到表B,所述表A和表B均包含元素字段、集合字段、索引字段、反向索引字段以及分組編號字段,所述分組編號初始值為空;步驟40、依次獲取表A中的一記錄作為源記錄,設(shè)置本輪次的分組編號值,作為最外圍大循環(huán),從這里開始,會給個分組編號,通常是從0或1開始,這條記錄處理完,開始處理第二條記錄后,組號就+1,就這樣把分組編號定出來,即每一大輪中的分組編號都是一樣的,都取本輪最開始訂立的分組編號,通過反向索引在表A和表B中反復(fù)查找,得到與所述源記錄所在的源集合的所有關(guān)聯(lián)集合,并將所述源集合的記錄以及所述源集合的所有關(guān)聯(lián)集合的記錄所對應(yīng)的分組編號置為本輪次的分組編號值;所述步驟40進一步包括步驟41至步驟45:步驟41、創(chuàng)建一新的二維表relaA,用于存儲表A中的待遍歷記錄;步驟42、依次獲取表A中一條分組編號為空的記錄作為源記錄,并設(shè)置本輪次的分組編號值,通過反向索引查詢表B中所有與所述源記錄存在相同元素字段的第一相關(guān)記錄集,再逐一通過所述第一相關(guān)記錄集中每一條記錄的反向索引查詢表A中所有與該條記錄存在相同集合字段的第二相關(guān)記錄集,逐一判斷所述第二相關(guān)記錄集中每一記錄對應(yīng)的分組編號是否為空,若是,則將第二相關(guān)記錄集的記錄插入列表relaA的尾部,并將其對應(yīng)的分組編號置為本輪次的分組編號值,否則,跳過對該條記錄的操作;步驟43、依次獲取列表relaA中未被遍歷到的一記錄作為源記錄,通過反向索引查詢表B中所有與源記錄存在相同元素字段的第三相關(guān)記錄集,再逐一通過所述第三相關(guān)記錄集中每一條記錄的反向索引查詢表A中所有與該條記錄存在相同集合字段的第四相關(guān)記錄集,逐一判斷所述第四相關(guān)記錄集中每一記錄對應(yīng)的分組編號是否為空,若是,則將所述第四相關(guān)記錄集的記錄插入到列表relaA的尾部,并將其對應(yīng)的分組編號置為本輪次的分組編號值,否則,跳過對該條記錄的操作;步驟44、判斷列表relaA中是否存在未被遍歷到的記錄,若是,則返回步驟43,否則,進入步驟45;步驟45、判斷表A中是否存在分組編號為空的記錄,若是,則返回步驟42,否則,結(jié)束流程。步驟50、根據(jù)相同的分組編號快速查詢到所有關(guān)聯(lián)的集合,從而得到所有相關(guān)的記錄,得到所有關(guān)聯(lián)數(shù)據(jù)群;其中,所述表A和表B互為對應(yīng)列表,所述索引字段按對應(yīng)記錄所在列表的位置進行編號,所述反向索引字段按照對應(yīng)記錄在對應(yīng)列表中的位置進行編號。下面結(jié)合一具體實施例對本發(fā)明做進一步說明:一種快速查找關(guān)聯(lián)數(shù)據(jù)的方法,通過事先將數(shù)據(jù)進行集合劃分后存入二維表中,根據(jù)具有記錄進行關(guān)聯(lián)查找后重新分組,即可得到關(guān)聯(lián)集合組,具體的,將二維表按不同字段進行排列的得到兩個列表,并引入索引和反向索引對列表中的記錄位置進行標記,使得在查詢時候可以直接命中相應(yīng)記錄,實現(xiàn)快速查找,以及引入一個中間列表relaA,用于存儲即將被遍歷的記錄,使得遍歷有序輪詢,不浪費多余的遍歷判斷,實現(xiàn)有效遍歷的同時節(jié)省遍歷時間。例如,采用本發(fā)明的關(guān)聯(lián)數(shù)據(jù)查找方法對電信計費批價處理,因為電信用戶的海量數(shù)據(jù),計費應(yīng)用按照分布式部署,由多臺計費應(yīng)用構(gòu)成集群完成批價處理,為了性能的考慮,計費應(yīng)用集群被設(shè)計成只訪問本地檔案數(shù)據(jù),不跨網(wǎng)絡(luò)訪問,因此需要把海量檔案進行關(guān)聯(lián)分組,并把有關(guān)聯(lián)關(guān)系的所有檔案分發(fā)到對應(yīng)每臺應(yīng)用節(jié)點,確保計費批價時通過本地對檔案數(shù)據(jù)進行訪問(即不產(chǎn)生跨主機的檔案訪問),這就需要按照上述的檔案關(guān)聯(lián)關(guān)系進行分組,不管直接地、還是間接地,只要兩個集合具備某種業(yè)務(wù)關(guān)系,則最終它們都被歸并到同一關(guān)聯(lián)分組,并加載到相同的主機,從而避免存在關(guān)聯(lián)的數(shù)據(jù)被分到不同的應(yīng)用主機,確保批價正確性。在電信計費中,可以按密集計算框架的分組思想,將業(yè)務(wù)關(guān)聯(lián)性歸為銷售品關(guān)聯(lián)用戶、賬戶關(guān)聯(lián)用戶、支付客戶關(guān)聯(lián)用戶、銀行賬號關(guān)聯(lián)用戶、用戶關(guān)聯(lián)用戶和產(chǎn)權(quán)客戶關(guān)聯(lián)用戶6類,對應(yīng)的銷售品關(guān)聯(lián)用戶集合、賬戶關(guān)聯(lián)用戶集合、支付客戶關(guān)聯(lián)用戶集合、銀行賬號關(guān)聯(lián)用戶集合、用戶關(guān)聯(lián)用戶集合、產(chǎn)權(quán)客戶關(guān)聯(lián)用戶集合,按這六大關(guān)聯(lián)關(guān)系對一區(qū)域內(nèi)的所有檔案進行分組計算。具體的,當(dāng)一用戶M訂閱了電信的e家套餐,套餐中包括M的寬帶b0、M的天翼手機號b1、母親的天翼手機號b2和配偶的天翼手機號b3,將這些元素劃入M的銷售品關(guān)聯(lián)用戶的e家套餐集合A1中,即A1={b0,b1,b2,b3},同時M還訂閱了公司wpn群套餐,該套餐包括M的天翼手機號和公司的其他4名同事的手機號,分別為b1、bA21、bA22、bA23和bA24,將5個元素劃入M的銷售品關(guān)聯(lián)用戶的vpn群套餐集合A2中,即A2={b1,bA21,bA22,bA23,bA24},另外該用戶M家庭中成員的所有電芯費用都通過M的一個電信賬戶進行支付,支付范圍包括M的寬度b0、M的天翼手機號b1、母親的天翼手機號b2和配偶的天翼手機號b3以及父親的天翼手機號b4,將上述的這5個元素劃入M對應(yīng)的賬戶關(guān)聯(lián)用戶的集合A3中,即A3={b0,b1,b2,b3,b4},其中,父親的天翼手機號不在M的e家套餐中,而是自己訂閱了一個4g套餐,將父親訂閱的這個銷售品關(guān)聯(lián)用戶的4g套餐定義為集合A4,則A4={b4},M的朋友自己訂閱了一個天翼88套餐,其手機號B5,將這個銷售品關(guān)聯(lián)用戶定義為A5,則A5={b5};將上述5個集合存入二維表中,將分組編號字段初始化為空,如表1:表1集合元素分組編號A1b0(空)A1b1(空)A1b2(空)A1b3(空)A2b1(空)A2bA21(空)A2bA22(空)A2bA23(空)A2bA24(空)A3b0(空)A3b1(空)A3b2(空)A3b3(空)A3b4(空)A4b4(空)A5b5(空)根據(jù)表1創(chuàng)建表A和表B;表A表B元素集合索引反向索引分組編號b0A100(空)b0A319(空)b1A121(空)b1A234(空)b1A3410(空)b2A152(空)b2A3611(空)b3A173(空)b3A3812(空)b4A3913(空)b4A41014(空)b5A51115(空)bA21A2125(空)bA22A2136(空)bA23A2147(空)bA24A2158(空)從表A的第一條記錄開始遍歷,將表A中第一條記錄作為源記錄,通過源記錄的反向索引找到該記錄在表B中的位置,并得到包含該記錄中元素b0的兩個關(guān)聯(lián)集合A1和A3,再到表A中查找集合A1和集合A3的所有記錄,由于此時的集合A1和A3的記錄中的分組編號均為空,因此將這兩個集合存入一個中間表relaA(為不重復(fù)記錄,將除源記錄的其他A1和A3集合的記錄存入即可),并將集合A1和A3的記錄的分組編號寫入本輪次的分組編號值1,如下表relaA:表relaA集合元素索引反向索引分組編號A1b1121A1b2251A1b3371A3b0911A3b11041A3b21161A3b31281A3b41391然后對表relaA進行遍歷,具體的,將第一條記錄作為源記錄,到表B中查找到與元素b1相關(guān)的集合A1、A2、A3,再到表A中查找集合A1、A2、A3的所有記錄,判斷集合A1和A3的分組編號不為空(為1),A2集合的分組編號為空,此時將A2集合的所有記錄插入到表relaA尾部,并將A2集合的所有記錄的分組編號寫入與A1和A3相同的分組編號1;將relaA中的第二條記錄作為源記錄,到表B中查找與元素b2關(guān)聯(lián)的集合A1和A3,再到表A中查找A1和A3所有記錄,判斷得到A1和A3的分組編號均不為空,即已被分組,則忽略,依次對表relaA中的其他未遍歷的記錄進行相同操作,直至遍歷完所有表relaA的記錄,即找到了第一條源記錄b1的關(guān)聯(lián)集合,包括b1直接關(guān)聯(lián)的A1、A2、A3集合以及通過A3間接關(guān)聯(lián)到的A4,此時集合A1、A2、A3和A4的所有記錄的分組編號均為1;依次取表A的未遍歷到的分組編號為空的記錄為源記錄,設(shè)置本輪次的分組編號值為2,到表B中查找到與元素b5相關(guān)的集合A5,再到表A中查找集合A5的所有記錄只有一條,且該記錄的分組編號為空,將該記錄的分組編號寫入本輪次的分組編號值為2,本次在表A中查找到的記錄只有一條源記錄,不需要存入表relaA中,即表relaA中無未遍歷到的記錄,再返回表A進行遍歷,此時的表A中也無未遍歷的分組編號為空的記錄,即完成分組操作,得到的最終結(jié)果如表4:表4集合元素分組編號A1b01A1b11A1b21A1b31A2b11A2bA211A2bA221A2bA231A2bA241A3b01A3b11A3b21A3b31A3b41A4b41A5b52此時可以很快速查詢到具有相同分組編號的集合A1、A2、A3和A4,這4個集合是關(guān)聯(lián)的集合,從而快速獲取所有相關(guān)的記錄:b0,b1,b2,b3,bA21,bA22,bA23,bA24,b4;將這些有關(guān)聯(lián)的數(shù)據(jù)快速查詢到后分配到同一主機進行數(shù)據(jù)處理,可避免因?qū)⑦@些有關(guān)聯(lián)的數(shù)據(jù)分配到不同主機節(jié)點上,再跨網(wǎng)絡(luò)訪問數(shù)據(jù)時造成的訪問性能下降以及延時的問題,提高了電信計費系統(tǒng)效率。本發(fā)明的這種查找關(guān)聯(lián)數(shù)據(jù)的方法還可以應(yīng)用于行為分析以及數(shù)據(jù)挖掘中,可以大大提高分析效率。例如,發(fā)現(xiàn)存在于大量數(shù)據(jù)集中的關(guān)聯(lián)性或相關(guān)性,或描述了一個事物中某些屬性同時出現(xiàn)的規(guī)律和模式等。具體的,比如,購物籃分析,通過發(fā)現(xiàn)顧客放入其購物籃中的不同商品之間的聯(lián)系,分析顧客的購買習(xí)慣,從而找到哪些商品頻繁地被顧客同時購買的這種關(guān)聯(lián),去幫助零售商制定營銷策略;比如,某個時期某個物品最經(jīng)常被客戶購買,針對這些客戶群進行針對性營銷可提高超市的服務(wù)質(zhì)量和效益;還比如,關(guān)聯(lián)數(shù)據(jù)查找還用于行為分析中“由于某些事件的發(fā)生而引起另外一些事件的發(fā)生”。雖然以上描述了本發(fā)明的具體實施方式,但是熟悉本
技術(shù)領(lǐng)域:
的技術(shù)人員應(yīng)當(dāng)理解,我們所描述的具體的實施例只是說明性的,而不是用于對本發(fā)明的范圍的限定,熟悉本領(lǐng)域的技術(shù)人員在依照本發(fā)明的精神所作的等效的修飾以及變化,都應(yīng)當(dāng)涵蓋在本發(fā)明的權(quán)利要求所保護的范圍內(nèi)。當(dāng)前第1頁1 2 3