本發(fā)明屬于存儲器技術(shù)領(lǐng)域,具體涉及一種用于NVM的頻繁模式挖掘方法。
背景技術(shù):
中國專利文獻(xiàn)CN106250549A于2016年12月21日公開了一種基于內(nèi)存的頻繁模式挖掘方法,它包括以下步驟:步驟1,構(gòu)建頻繁模式初始樹,創(chuàng)建頻繁模式樹的根結(jié)點T,以“null”標(biāo)記;再次掃描數(shù)據(jù)庫,將讀取的每條事務(wù)中的頻繁項選出并按L中的次序排序;排序后以null為根結(jié)點構(gòu)建一條頻繁模式樹的路徑,只對路徑上位于最末的結(jié)點的計數(shù)加1,路徑上的其他結(jié)點的計數(shù)保持不變;依次掃描完整個數(shù)據(jù)庫中所有事務(wù)后獲得頻繁模式初始樹;步驟2,用深度優(yōu)先搜索算法對頻繁模式初始樹依次進(jìn)行遍歷,遍歷結(jié)點的計數(shù)器值為該結(jié)點本身的值加上其所有孩子結(jié)點的值。該專利能減少對NVM的寫操作,能快速的構(gòu)建頻繁模式樹;且能減少對靠近根結(jié)點的結(jié)點計數(shù)域大量密集的寫操作,延長了NVM壽命。
但是,當(dāng)待挖掘的數(shù)據(jù)集非常大,用該專利的方法構(gòu)建樹的效率很低,有必要探索一種快速構(gòu)建頻繁模式樹的方法。
技術(shù)實現(xiàn)要素:
針對現(xiàn)有技術(shù)中存在的技術(shù)問題,本發(fā)明所要解決的技術(shù)問題就是提供一種基于非易失性存儲器的頻繁模式挖掘方法,它在挖掘大數(shù)據(jù)集時,能夠快速構(gòu)建頻繁模式樹。
本發(fā)明所要解決的技術(shù)問題是通過這樣的技術(shù)方案實現(xiàn)的,它包括以下步驟:
步驟1、利用多核系統(tǒng)對頻繁模式樹進(jìn)行并行構(gòu)建
先將數(shù)據(jù)庫中的多條交易記錄大致均勻地分配到每個核中,利用CN106250549A記載的方法,在每一個核上構(gòu)建一棵本地頻繁模式樹;
步驟2、對步驟1所構(gòu)建的頻繁模式樹進(jìn)行合并
將本地頻繁模式樹的信息搜集起來,合并成一棵大的全局頻繁模式樹。
由于本發(fā)明采用并行構(gòu)建頻繁模式樹,大幅度縮短了構(gòu)建的時間,提高了構(gòu)建頻繁模式樹的效率,解決了挖掘大數(shù)據(jù)集時構(gòu)建樹的速度慢的問題。
附圖說明
本發(fā)明的附圖說明如下:
圖1為本發(fā)明構(gòu)建頻繁模式樹的示意圖;
圖2為brute-force合并樹的流程圖;
圖3為本發(fā)明合并樹的流程圖;
圖4為實驗中讀操作的測試效果圖;
圖5為實驗中寫操作的測試效果圖;
圖6為實驗中構(gòu)建全局樹時間的測試效果圖;
圖7為本發(fā)明與現(xiàn)有并行構(gòu)建樹時間的對比圖。
具體實施方式
下面結(jié)合附圖和實施例對本發(fā)明作進(jìn)一步說明:
本發(fā)明應(yīng)用于多核系統(tǒng)中,硬件包含有CPU、存儲器管理單元MMU、作為內(nèi)存的NVM等,NVM直接連接在內(nèi)存總線上。發(fā)明應(yīng)用的上下文環(huán)境為:上層是應(yīng)用層,下層具體的硬件,存儲器包括NVM以及SSD等。應(yīng)用層發(fā)出操作請求,對作為內(nèi)存的NVM進(jìn)行操作。
如圖1所示,對本發(fā)明包括以下步驟:
步驟1、利用多核系統(tǒng)對頻繁模式樹進(jìn)行并行構(gòu)建
先將數(shù)據(jù)庫中的多條交易記錄大致均勻地分配到每個核中,利用CN106250549A記載的方法,在每一個核上構(gòu)建一棵本地頻繁模式樹;例如總共十條交易記錄以及3個核,大致均勻分配后每個核的交易記錄條數(shù)為3、3、4;每個核根據(jù)分配到的交易記錄來構(gòu)建一棵樹。
步驟2、對步驟1所構(gòu)建的頻繁模式樹進(jìn)行合并
將本地頻繁模式樹的信息搜集起來,合并成一棵大的全局頻繁模式樹。
Brute-force是現(xiàn)有的一種合并樹的方法,用brute-force方法合并樹1和樹2的步驟,流程圖如圖2所示:
步驟1)、從根結(jié)點出發(fā),依次線性查找樹1和樹2中根結(jié)點的所有孩子結(jié)點,檢查是否存在相同結(jié)點,如存在,用T1和T2分別表示樹1和樹2中相同的結(jié)點,然后執(zhí)行步驟2);如不存在,則執(zhí)行步驟3);
步驟2)、T1計數(shù)域的值=T1計數(shù)域的值+T2計數(shù)域的值,并將T1和T2分別作為樹1和樹2的根結(jié)點,返回步驟1);
步驟3)、將樹2中的根結(jié)點的所有子樹都拷貝到樹1中,并將樹2中根結(jié)點的所有孩子結(jié)點作為樹1中根結(jié)點的孩子結(jié)點;
步驟4)、程序結(jié)束。
采用本發(fā)明上述步驟構(gòu)建頻繁模式樹時,如果沒有優(yōu)化的管理,會產(chǎn)生許多不必要的讀寫操作,帶來巨大的內(nèi)存開銷,降低構(gòu)建樹的效率,且大量的讀寫操作會導(dǎo)致NVM的使用壽命減少。
針對合并過程中多次拷貝操作帶來的寫開銷的問題,在上述步驟1中,構(gòu)建本地頻繁模式樹時,采用左孩子右兄弟鏈表結(jié)構(gòu)來存儲結(jié)點信息。(左孩子右兄弟鏈表結(jié)構(gòu)的參見文獻(xiàn):T. H. Cormen, C. Stein, R. L. Rivest, and C. E. Leiserson. Introduction to Algorithms.McGraw-Hill Higher Education, 2nd edition, 2001. ( T. H. Cormen, C. Stein, R. L. Rivest, and C. E. Leiserson. 算法導(dǎo)論.McGraw-Hill高等教育, 第二版, 2001.))
以下為本發(fā)明中合并樹1和樹2的步驟,流程圖如圖3所示:
步驟(1)、從根結(jié)點出發(fā),將樹1的根結(jié)點的最末孩子結(jié)點的兄弟指針指向樹2的根結(jié)點的第一個孩子結(jié)點;
步驟(2)、利用所建立的哈希表查找樹1和樹2根結(jié)點的孩子結(jié)點中是否存在相同結(jié)點,如存在,用T1和T2分別表示樹1和樹2中相同的結(jié)點,然后執(zhí)行步驟(3);如不存在,則執(zhí)行步驟(5);
步驟(3)、T1計數(shù)域的值=T1計數(shù)域的值+T2計數(shù)域的值,并將T2結(jié)點從該鏈表中刪除;
步驟(4)、將T1和T2分別作為樹1和樹2的根結(jié)點,返回步驟(1);
步驟(5)、結(jié)束程序。
上述步驟(1)-(5)直接將相同父結(jié)點的所有孩子結(jié)點結(jié)點鏈接起來,如果在這些孩子結(jié)點中有重復(fù)的結(jié)點,則將這些孩子結(jié)點的計數(shù)域的值相加并存儲到其中一個結(jié)點中,再將其他重復(fù)的孩子結(jié)點從孩子結(jié)點鏈中刪除。通過鏈接結(jié)點的方式避免了在內(nèi)存空間中拷貝已經(jīng)存儲過的結(jié)點,能夠有效減少合并本地頻繁模式樹的過程中大量的不必要的內(nèi)存寫操作,減少寫開銷,提高性能,降低能耗。
針對合并過程中對指定結(jié)點查找效率低的問題以及避免多次查找指定結(jié)點操作帶來的讀開銷問題,在上述步驟1中,在構(gòu)建頻繁模式初始樹過程中創(chuàng)建新節(jié)點時,為根結(jié)點T以下的孩子結(jié)點建立了哈希表(建立哈希表參見文獻(xiàn):T. H. Cormen, C. Stein, R. L. Rivest, and C. E. Leiserson. Introduction to Algorithms.McGraw-Hill Higher Education, 2nd edition, 2001. ( T. H. Cormen, C. Stein, R. L. Rivest, and C. E. Leiserson. 算法導(dǎo)論.McGraw-Hill高等教育, 第二版, 2001.))。在建立哈希表時僅存儲孩子結(jié)點的項目名稱以節(jié)省空間,用該結(jié)點的孩子結(jié)點數(shù)目作為關(guān)鍵字,采用直接取余法建立哈希表,并利用鏈表法解決哈希沖突。
由于為結(jié)點建立了哈希表,在合并頻繁模式樹時能夠快速定位到指定結(jié)點,能避免線性查找法對子結(jié)點進(jìn)行挨個查找。當(dāng)某些結(jié)點的孩子結(jié)點較多時,可有效減少對結(jié)點的讀操作,提高查找效率,加快樹的合并。
試驗測試
選取不同類型的數(shù)據(jù)集進(jìn)行試驗,統(tǒng)計各個數(shù)據(jù)集的讀寫操作總量和總的構(gòu)建樹的時間。這些數(shù)據(jù)集的名稱分別為T10I4D100K、T40I10D100K、retail、chess、mushroom、pumsb*、connect、pumsb、accidents、C73D10、C20D10、T20I6D100。
測試時,本發(fā)明與單核采用背景技術(shù)方法構(gòu)建的樹以及多核采用brute-force方法合并的樹相對比,其中以單核構(gòu)建方法作為基準(zhǔn)對結(jié)果進(jìn)行歸一化處理,實驗結(jié)果參見圖4至圖7。
圖4中,縱坐標(biāo)代表讀的總量,橫坐標(biāo)代表各個數(shù)據(jù)集,從圖4看出,本發(fā)明減少了大量的讀操作;
圖5中,縱坐標(biāo)代表寫的總量,橫坐標(biāo)代表各個數(shù)據(jù)集,從圖5看出,本發(fā)明減少了大量的寫操作;
圖6中,縱坐標(biāo)代表總的構(gòu)建樹的時間,橫坐標(biāo)代表各個數(shù)據(jù)集,從圖6看出,本發(fā)明減少了構(gòu)建樹的時間,本發(fā)明最少可減少的建樹時間為15.45%(發(fā)生在數(shù)據(jù)集C73D10),最大可減少58.09%(發(fā)生在數(shù)據(jù)集T10I4D100K),極大地增加了構(gòu)建樹的效率。
圖7中,縱坐標(biāo)代表總的構(gòu)建樹的時間,橫坐標(biāo)代表不同的核數(shù),從圖7看出,隨著核數(shù)的增多,本發(fā)明減少了構(gòu)建樹的時間,且減少得比brute-force算法多。