鮑斌國,秦小麟,李星羅,張 彤
南京航空航天大學 計算機科學與技術(shù)學院,南京 211106
隨著數(shù)據(jù)庫的發(fā)展,如何有效精準地從大數(shù)據(jù)集中獲取有價值的信息作為用戶決策的參考已經(jīng)成為一個研究熱點。給定一組數(shù)據(jù)項,Skyline查詢[1]旨在得到不被其他數(shù)據(jù)支配的數(shù)據(jù)項集合。其中,一個數(shù)據(jù)項p支配數(shù)據(jù)項q,當且僅當p在所有維度上優(yōu)于或等于q,且至少存在一個維度p優(yōu)于q。比如,一個旅客想要在某個區(qū)域?qū)ふ乙粋€離沙灘近且價格低的旅館,這種情況下Skyline 查詢只會返回那些不被支配的旅館。在不失一般性的情況下,假設(shè)較低的值對于所有維度上的所有用戶都是較優(yōu)的。Skyline查詢的主要目標是為用戶提供有價值的參考,由于其重要性,近些年來已經(jīng)得到了廣泛的研究[2-4]。這些算法主要是基于完整數(shù)據(jù)庫的,但這并不能覆蓋所有真實的應(yīng)用場景。
考慮一個來自電影評分應(yīng)用的真實數(shù)據(jù)集Movie-Lens。該數(shù)據(jù)集中每個數(shù)據(jù)項中包含多個觀眾對于電影評分的維度。但事實上,一個用戶僅評價那些他看過或了解的電影,因此數(shù)據(jù)項可能會在多個維度上存在數(shù)據(jù)缺失的情況。傳統(tǒng)的Skyline查詢無法處理這種數(shù)據(jù)缺失的數(shù)據(jù)集,因此Khalefa 等[5]提出了一種非完整數(shù)據(jù)庫中Skyline 查詢的定義,各個數(shù)據(jù)項僅在它們都不缺失數(shù)據(jù)的維度上進行比較。如表1所示,O1和O2只能在第一個維度上進行比較,因此O1支配O2。之后的許多非完整數(shù)據(jù)庫研究[6-9]是基于該工作的。
但是傳統(tǒng)的非完整數(shù)據(jù)庫Skyline查詢明顯有以下兩個缺點:(1)支配傳遞性的丟失。這不僅大大增加計算量,因為不得不對所有數(shù)據(jù)進行兩兩比較,而且會使Skyline查詢結(jié)果過少甚至是空集。(2)一些非正常的數(shù)據(jù)項出現(xiàn)在結(jié)果集中。比如僅有極少維度數(shù)據(jù)完整的數(shù)據(jù)項,它們難以為用戶提供有效的選擇。這些缺點都會嚴重誤導用戶的選擇。
對于傳統(tǒng)非完整數(shù)據(jù)Skyline查詢的缺點,Zhang等[10]提出了非完整數(shù)據(jù)庫概率Skyline。他將數(shù)據(jù)項之間的支配關(guān)系用概率值表示,最后的Skyline 結(jié)果集取最不可能被支配的前K個數(shù)據(jù)項。但是傳統(tǒng)Skyline查詢大多假設(shè)數(shù)據(jù)項所有屬性均存儲在單個關(guān)系中,然而實際應(yīng)用場景經(jīng)常會涉及到多表連接操作。若盲目地先對所有關(guān)系進行連接操作,那么可能會產(chǎn)生海量的數(shù)據(jù)項,從而導致Skyline 查詢效率低下的問題。
因此提出了PSkyline-join算法,該算法主要有四個步驟:對于單個關(guān)系中的數(shù)據(jù)項進行多層次分組;確定每組的局部Skyline 結(jié)果集;采用剪枝策略連接局部Skyline結(jié)果集;確定全局Skyline集合。本文的主要貢獻如下:
(1)對概率Skyline 的定義進行補充使其適用于多表連接Skyline查詢。
(2)提出了PSkyline-join 算法,通過多層次分組高效計算局部Skyline候選集。
(3)利用局部Skyline 概率上界與全局Skyline 概率下界剪枝策略去除了無用的Skyline 概率計算,大幅提升了算法效率。
本文的組織結(jié)構(gòu)如下:第2章介紹了非完整數(shù)據(jù)庫Skyline 查詢的相關(guān)工作;第3 章給出了非完整數(shù)據(jù)庫及概率Skyline 的基礎(chǔ)定義;第4 章詳細介紹了Skyline-join 的算法流程,包括多層次分組及兩種剪枝策略;第5 章通過實驗評估了該算法性能;第6 章總結(jié)全文。
關(guān)于非完整數(shù)據(jù)庫中的Skyline 查詢最早由Khalefa 等[5]提出,文獻給出了一種非完整數(shù)據(jù)庫中Skyline 查詢的定義,即兩個數(shù)據(jù)項僅在它們都不缺失數(shù)據(jù)的維度上進行比較來得出支配關(guān)系。同時也提出了Bucket 和ISkyline 算法以計算非完整數(shù)據(jù)庫中的Skyline查詢結(jié)果集。
Bucket算法基于數(shù)據(jù)項的位圖,即數(shù)據(jù)在某個維度上未缺失數(shù)據(jù)記為1,若缺失數(shù)據(jù)則記為0,將所有數(shù)據(jù)項根據(jù)位圖進行桶劃分;然后確定每個桶的局部Skyline 候選集;最后根據(jù)所有桶的局部候選集得到全局Skyline 結(jié)果集。ISkyline 在Bucket 算法的基礎(chǔ)上添加了更多剪枝策略,從而優(yōu)化了原算法效率。后來幾乎所有的非完整數(shù)據(jù)Skyline查詢研究都基于該工作。Bharuka 等[6]提出了一種基于排序的Bucket 算法(sorted bucket algorithm,SOBA),該算法在桶層次及點層次對數(shù)據(jù)項進行排序,從而減少了桶之間的數(shù)據(jù)項比較。
但是基于傳統(tǒng)非完整數(shù)據(jù)庫Skyline的算法面臨著循環(huán)支配的問題,丟失了完整數(shù)據(jù)庫下的支配傳遞性。對于表1 的數(shù)據(jù)集,O1支配O2,O2支配O3,按照在完整數(shù)據(jù)庫下的傳遞性O(shè)1支配O3,但此處O3支配O1,因此這三個數(shù)據(jù)項形成了循環(huán)支配。這會導致Skyline查詢結(jié)果過少甚至是空集。對于上述定義存在的缺陷,Zhang等[10]提出了非完整數(shù)據(jù)庫概率Skyline的概念。概率Skyline將數(shù)據(jù)項之間的支配關(guān)系用概率值表示,最后的Skyline 結(jié)果集取最不可能被支配的前K位數(shù)據(jù)項。同時提出了PISkyline 算法,采用兩種剪枝策略和排序技術(shù)來加速Skyline 概率的計算。但該研究僅局限在單關(guān)系,還不能很好地支持多關(guān)系Skyline 查詢,因此本文擴展了概率Skyline使其適用于多關(guān)系Skyline查詢。
近些年來Skyline-join方面的主要研究有:Jin等[11]提出了一種基于排序的多關(guān)系Skyline 查詢算法,但該算法是非平凡的,需要多次遍歷每個關(guān)系才能得出正確的Skyline 結(jié)果集。Sun 等[12]提出了一種基于SaLSa[13]的分布式環(huán)境下Skyline-join查詢算法,但該算法并不支持提前終止并依賴于每個關(guān)系的多個索引。而后Vlachou 等[14]提出了提前終止條件概念,該條件用于確定算法是否已經(jīng)遍歷了足夠多的數(shù)據(jù)項用來生成完整的Skyline 結(jié)果集。Awasthi 等[15]提出了KSJQ(K-dominant Skyline join queries)算法以解決多關(guān)系完整庫中的K支配Skyline查詢問題。針對多數(shù)據(jù)流的Skyline 查詢問題,Zhang 等[16]提出了NPSWJ(naive parallel sliding window join)和IP-SWJ(incremental parallel sliding window join)算法。但是這些工作均未涉及非完整數(shù)據(jù)庫。Alwan 等[17]提出了一種非完整數(shù)據(jù)庫下的Skyline-join 算法JincoSkyline算法,但該算法是基于傳統(tǒng)的非完整數(shù)據(jù)庫Skyline,返回的Skyline 結(jié)果集不符合用戶需求,本文基于概率Skyline 的PSkyline-join 算法能夠返回具有高參考價值的Skyline查詢結(jié)果。
本章主要介紹非完整數(shù)據(jù)庫和Skyline查詢的相關(guān)定義與概念。
定義1(單關(guān)系概率支配[10])對于兩個擁有d維屬性的數(shù)據(jù)項p和q∈D,q支配p的概率定義為:
其中,E(p)表示與p完全相等的數(shù)據(jù)項集合。
為了便于分析,該定義做了如下假設(shè):
(1)所有的數(shù)據(jù)項之間都是獨立的;
(2)數(shù)據(jù)項各個維度的屬性都是獨立的;
(3)缺失值是隨機出現(xiàn)在各個維度上的。
有了以上假設(shè),當p(i)和q(i)都是缺失值時:
定義1僅考慮了單個關(guān)系情形下的概率支配,但當Skyline 查詢涉及到多關(guān)系時,定義1 假設(shè)所有的數(shù)據(jù)項之間都是獨立的,該條件明顯不成立,因為連接操作后兩個數(shù)據(jù)項中的部分維度有可能來自同一個關(guān)系的同一數(shù)據(jù)項。因此定義2 對定義1 進行了拓展,使其可以應(yīng)用于多關(guān)系Skyline查詢。
定義2(多關(guān)系概率支配)對于由多個關(guān)系連接而來的數(shù)據(jù)項p和q,q支配p的定義為:
其中,βi表示數(shù)據(jù)項中來自關(guān)系Ri的屬性:
由定義2可知,當p和q的部分屬性來自同一關(guān)系的同一數(shù)據(jù)項時,這部分屬性將不會對支配概率產(chǎn)生任何影響。
定義3(非完整數(shù)據(jù)下概率Skyline查詢)對于一個非完整數(shù)據(jù)集S,用戶指定一個參數(shù)K(K>0),概率Skyline查詢結(jié)果集表示為:
其中:
直觀上來看,概率Skyline 查詢的結(jié)果就是Skyline概率排名前K位的數(shù)據(jù)項,即最不可能被支配的前K個數(shù)據(jù)項。
考慮表2 中的數(shù)據(jù)集,用戶設(shè)置K=2。首先計算每一維度上的概率分布函數(shù)
Table 2 Incomplete data set S2表2 非完整數(shù)據(jù)集S2
如圖1 所示PSkyline-join 算法主要有四個步驟:數(shù)據(jù)項多層次分組;確定局部Skyline概率;連接數(shù)據(jù)項;確定全局Skyline結(jié)果集。
Fig.1 Steps of PSkyline-join algorithm圖1 PSkyline-join算法步驟
第一層分組:對于某個關(guān)系將連接鍵值相同的數(shù)據(jù)項劃分到一組中。第二層分組:在進行上述第一層分組后,再根據(jù)數(shù)據(jù)項的缺失位圖對數(shù)據(jù)項進行二次劃分,即桶劃分[5]。
考慮例子:對于表3 中的關(guān)系R1假設(shè)連接鍵為id,首先將id 值相同的屬性項劃分到同一組中,表4展示了上述劃分結(jié)果。然后對于每一組中的數(shù)據(jù)項根據(jù)缺失位圖進行桶劃分,劃分結(jié)果如表5所示。
數(shù)據(jù)項多層次分組主要是為了輔助計算局部Skyline概率上界。
對于每個桶中的數(shù)據(jù)項,僅比較兩個數(shù)據(jù)項都未缺失數(shù)據(jù)項的維度,從而得到它們之間的支配關(guān)系。按照上述支配定義,兩兩比較桶中的數(shù)據(jù)項求得每個桶的局部Skyline候選集。表5灰色背景填充的數(shù)據(jù)項即為局部Skyline候選集。
Table 3 R1data set表3 R1數(shù)據(jù)集示例
Table 4 R1group dividing表4 R1組劃分
Table 5 R1bucket dividing表5 R1桶劃分
定理1?τ1p∈bucket,若?τ1q∈bucket且τ1q?τ1p,則?p≡τ1p?τ2p,其Skyline概率上界為,記為:
其中,w表示該桶缺失的維度數(shù)量。
證明S={τ|τ≡τ1?τ2,τ1∈R1,τ2∈R2},?p∈S,不妨假設(shè)p≡τ1p?τ2p,若?τ1q?τ1p,則?q≡τ1q?τ2p在各個非缺失維度上支配p,由此:
定理1 主要闡明了桶內(nèi)數(shù)據(jù)項在與其他數(shù)據(jù)項連接后所能達到的Skyline概率上限值。同時由定理1可知局部Skyline候選集的概率上界為1。
根據(jù)定理1可以設(shè)計高效的局部Skyline 概率上界更新算法。算法1 的第1 行對數(shù)據(jù)項的局部Skyline 概率上界進行了初始化。初始化時假設(shè)各個數(shù)據(jù)項不會被其他數(shù)據(jù)項支配,因此對各個數(shù)據(jù)項的局部Skyline概率上界賦值為1。算法第2行至第4行根據(jù)連接鍵值對數(shù)據(jù)項進行組劃分,再根據(jù)數(shù)據(jù)項的位圖進行桶劃分。為了提高分組效率,可以將數(shù)據(jù)項的連接鍵值及缺失位圖作為數(shù)據(jù)項的分組鍵,再將所有具有相同鍵的數(shù)據(jù)項映射到同一集合中??紤]到映射操作的時間復(fù)雜度為O(1),可知采用這種分組算法的時間復(fù)雜度為O(n),其中n為數(shù)據(jù)項總數(shù)。對于每一個桶中的數(shù)據(jù)項,將它與桶中的其他數(shù)據(jù)項進行比較,若桶內(nèi)沒有數(shù)據(jù)項在非缺失維度上支配該數(shù)據(jù)項,則將其加入局部Skyline 候選集。由于要兩兩比較數(shù)據(jù)項,因此計算局部Skyline 候選集的算法時間復(fù)雜度為O(dm2),其中d為數(shù)據(jù)項維數(shù),m為桶內(nèi)數(shù)據(jù)項的數(shù)量。算法第8 行,若數(shù)據(jù)項不為局部Skyline 點,則根據(jù)定理1 更新其局部Skyline概率上界。
算法1局部Skyline概率上界算法LocalSkyline-UpBound
輸入:非完整數(shù)據(jù)集S。
輸出:各個數(shù)據(jù)項的局部Skyline概率上界。
在連接數(shù)據(jù)項時,除了正常的連接操作外,還需要計算數(shù)據(jù)項的全局Skyline概率上界。
定理2?p∈R1?R2,p≡τ1p?τ2p,其中τ1p∈R1,τ2p∈R2,p的概率上界為:
Psup(p)=Psup(τ1p)×Psup(τ2p)
證明若Psup(τ1p)與Psup(τ2p)均為1,則上式明顯成立。若Psup(τ1p)<1 或Psup(τ2p)<1,不失一般性假設(shè)Psup(τ1p)<1,Psup(τ2p)=1,由定理1 可知τ1p在與其他數(shù)據(jù)項連接后的Skyline 概率上限值為Psup(τ1p),故P(p)≤Psup(τ1p),Psup(p)=Psup(τ1p)上式成立。若Psup(τ1p)<1且Psup(τ2p)<1,由定理1證明過程可知?m≡τ1q?τ2p及n≡τ1p?τ2q在非缺失維度上支配p,由此得:
定理2 主要闡明了局部Skyline概率上界與全局Skyline 概率上界的關(guān)系,從而可以高效地計算數(shù)據(jù)項的全局Skyline 概率上界,故可以建立高效的剪枝策略。
在連接各個關(guān)系的數(shù)據(jù)項后,需要為用戶返回全局的Skyline 集合。為了去除不必要的Skyline 概率計算,采用了兩種剪枝策略。
剪枝策略1若數(shù)據(jù)項p在與數(shù)據(jù)項q比較后,其Skyline概率已經(jīng)小于全局的Skyline概率下界,則可以中斷計算p的Skyline概率。
算法2Skyline概率算法SkylinePro
輸入:非完整數(shù)據(jù)集Q,數(shù)據(jù)項p,globalLowBound。
輸出:數(shù)據(jù)項Skyline概率。
剪枝策略2若數(shù)據(jù)項p的全局Skyline概率上界小于全局Skyline 概率下界,則無需計算數(shù)據(jù)項p的Skyline概率。
算法3PSkyline-join算法PSkyline-join
輸入:非完整數(shù)據(jù)集{R1,R2,…,Rn},Skyline 結(jié)果集大小K。
輸出:Skyline結(jié)果集。
算法3 的第1 行對全局Skyline 概率下界和全局Skyline 結(jié)果集進行初始化,由于開始時全局Skyline結(jié)果集為空,因此對Skyline概率下界賦值0。算法第2 到3 行對各個數(shù)據(jù)集的局部Skyline 概率上界進行計算。第4 行將各個數(shù)據(jù)集進行連接,并根據(jù)定理2計算每個數(shù)據(jù)項的全局Skyline概率上界。第5行根據(jù)數(shù)據(jù)項的全局Skyline 概率上界對數(shù)據(jù)項進行分類,Q1中的數(shù)據(jù)項Skyline 概率上界均為1,Q2中的數(shù)據(jù)項Skyline 概率上界小于1。第6 到8 行對Q1中的數(shù)據(jù)項進行Skyline概率計算,并更新Skyline結(jié)果集和全局Skyline 概率下界。全局Skyline 概率下界更新為Skyline 結(jié)果集數(shù)據(jù)項中最小的Skyline 概率。第9到13行結(jié)合剪枝策略2對Q2中的數(shù)據(jù)項進行Skyline 概率計算。將連接后的數(shù)據(jù)分類為Q1和Q2的出發(fā)點:由于Q1中數(shù)據(jù)項的Skyline概率上界都為1,因此這部分數(shù)據(jù)項最有可能進入全局Skyline結(jié)果集,并且能夠大幅提升全局Skyline概率下界,使得在兩種剪枝策略能夠發(fā)揮更大的作用。盡管存在兩種剪枝策略,但最壞情況下所有數(shù)據(jù)項依然需要進行兩兩比較,因此算法3的時間復(fù)雜度為O(dn2),其中d為數(shù)據(jù)項連接后的維數(shù),n為數(shù)據(jù)項連接后的數(shù)量。
所有的對比算法都使用Python 實現(xiàn),運行環(huán)境為Ubuntu16.04,Intel Core i5-7500 3.4 GHz 處理器,8 GB內(nèi)存。
由于目前沒有符合實驗需求的公開數(shù)據(jù)集,因此實驗主要在人造數(shù)據(jù)集上進行,主要關(guān)注兩個數(shù)據(jù)集R1和R2在進行多對多連接操作后的Skyline 查詢問題。實驗主要有5 個參數(shù):數(shù)據(jù)集基數(shù)、分組基數(shù)、數(shù)據(jù)集維數(shù)、缺失率、自定義Skyline 候選集大小K。數(shù)據(jù)集基數(shù)指一個數(shù)據(jù)集中的數(shù)據(jù)項的數(shù)量。分組大小指每個數(shù)據(jù)集按照連接鍵值分組后每組包含的數(shù)據(jù)項數(shù)量。數(shù)據(jù)集維度指一個數(shù)據(jù)集的屬性維數(shù)。缺失率指發(fā)生數(shù)據(jù)缺失的數(shù)據(jù)單元與所有數(shù)據(jù)單元的比例。人造數(shù)據(jù)集的每一維數(shù)據(jù)均為0,1之間的實數(shù)且服從隨機分布。
每一組實驗主要對比基準算法、PISkyline算法、PSkyline-join 算法處理Skyline-join 查詢的性能。其中基準算法為未經(jīng)任何優(yōu)化的概率Skyline[10]查詢算法,與該算法進行比較可以很好地觀察兩種剪枝策略對于多關(guān)系概率Skyline查詢效率的影響。
該組實驗的具體設(shè)置為:R1和R2的缺失率和數(shù)據(jù)集維度固定為20%和3,Skyline候選集大小K固定為10,R2的數(shù)據(jù)集基數(shù)和分組基數(shù)固定為100和10,R1的數(shù)據(jù)集基數(shù)分別為1×103、2×103、3×103、4×103、5×103,R1的分組基數(shù)分別設(shè)置為100、200、300、400、500。由上述設(shè)置可知R1與R2連接后的數(shù)據(jù)集基數(shù)分別為1×104、2×104、3×104、4×104、5×104。圖2展示了3 種算法在各個數(shù)據(jù)基數(shù)上的性能。由圖2(a)可知PSkyline-join的算法效率最高,其耗時隨數(shù)據(jù)基數(shù)線性增長,基線算法耗時隨數(shù)據(jù)基數(shù)平方增長。圖2(b)展示了概率Skyline 計算涉及到的兩兩數(shù)據(jù)項比較次數(shù),由于PSkyline-join 算法的剪枝策略2 是在多層次分組后進行,而非像PISkyline 算法在單層次地進行桶劃分后進行剪枝,故而剪枝率不如PISkyline高。圖2(c)展示了兩種剪枝策略的剪枝率,可以看出隨基數(shù)增長PSkyline-join 算法總的剪枝率基本不變,但剪枝策略2隨數(shù)據(jù)基數(shù)的增長發(fā)揮的作用線性增長。
該組實驗設(shè)置為:R1和R2的缺失率固定為20%,Skyline候選集大小K固定為10,R1的數(shù)據(jù)基數(shù)和分組基數(shù)固定為1 000和100,R2的數(shù)據(jù)基數(shù)和分組基數(shù)固定為100和10,R1和R2的數(shù)據(jù)集維數(shù)分別為2、3、4、5、6。由上述設(shè)置可知R1和R2連接后的數(shù)據(jù)集基數(shù)為4、6、8、10、12。從圖3(a)可知PSkyline-join算法在各個維度的效率都為最優(yōu),由圖3(c)可知當維數(shù)為8 時PSkyline-join 算法的總體剪枝效率最低,從而造成該維度下的算法效率低下。同時隨著維數(shù)的上升剪枝策略2 的作用越來越小。因為隨著維數(shù)的上升單個桶中的數(shù)據(jù)項數(shù)量下降,從而造成其中的數(shù)據(jù)項被支配的概率變小,局部Skyline 候選集變小。
圖4展示了各個缺失率下各個算法的性能表現(xiàn)。該組實驗設(shè)置為R1數(shù)據(jù)集基數(shù)固定1 000,R1分組基數(shù)固定100,R2數(shù)據(jù)集基數(shù)固定100,R2分組基數(shù)固定10,缺失率分別為10%、20%、30%、40%、50%。如圖4(a)所示,注意該圖y軸刻度為對數(shù)型而非線性的,PSkyline-join算法始終表現(xiàn)最優(yōu)。從圖4(b)可以看出PSkyline算法在計算Skyline概率時的兩兩比較次數(shù)略少于PSkyline-join算法,但由于其桶劃分是針對連接后的所有數(shù)據(jù)項,因此在劃分并計算概率上界時消耗了大量時間,導致消耗的總時間多于PSkyline-join 算法。圖4(c)主要展示了兩種剪枝策略的剪枝率,可以看出隨著缺失率的增長,PSkylinejoin 算法的總體剪枝率緩慢下降,但剪枝策略2 的作用隨著缺失率增長有所提升。
Fig.3 Effect of dimensionality on performance圖3 數(shù)據(jù)維度對算法性能的影響
Fig.4 Effect of missing ratio on performance圖4 缺失率對算法性能的影響
本文針對非完整數(shù)據(jù)庫下的Skyline-join查詢問題進行了深入的分析和研究,提出了一種基于多層次分組的概率Skyline 查詢算法PSkyline-join。對單關(guān)系下的概率Skyline 進行了補充,使其適用于多關(guān)系。PSkyline-join 算法通過多層次分組計算數(shù)據(jù)項的Skyline概率上界,結(jié)合全局Skyline概率下界有效地對Skyline概率計算進行剪枝。當算法結(jié)束時為用戶返回最不可能被支配的K個數(shù)據(jù)項,從而滿足用戶的真實需求。實驗證明了PSkyline-join 算法能有效地解決非完整數(shù)據(jù)庫下的Skyline-join 查詢,其效率相較未優(yōu)化算法有著最多百倍的提升。