欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

基于列存儲的多核并行哈希分區(qū)優(yōu)化方法

文檔序號:6621938閱讀:197來源:國知局
基于列存儲的多核并行哈希分區(qū)優(yōu)化方法
【專利摘要】本發(fā)明公開了一種基于列存儲的多核并行哈希分區(qū)優(yōu)化方法,主要解決現(xiàn)有并行哈希分區(qū)算法不能高效利用多核處理器資源的問題。其實(shí)現(xiàn)方案是:首先,利用映射-化簡并行編程模型將數(shù)據(jù)分區(qū)任務(wù)動態(tài)分配到各個核來執(zhí)行,根據(jù)列存儲數(shù)據(jù)集存儲結(jié)構(gòu)的不同,選擇相應(yīng)的避免寫沖突策略;然后,用映射線程進(jìn)行第一次哈希劃分,并將所得到的第一次哈希分區(qū)結(jié)果經(jīng)過數(shù)據(jù)傾斜優(yōu)化后交給化簡進(jìn)程進(jìn)行第二次哈希分區(qū);最后,返回最終的哈希分區(qū)結(jié)果。本發(fā)明很好的利用了在多核處理器上任務(wù)可并行執(zhí)行的特性,并能夠適應(yīng)各種分布的輸入數(shù)據(jù),提高了高速緩存效率和多核處理器的整體性能,可用于列存儲數(shù)據(jù)集的多核并行多步哈希分區(qū)。
【專利說明】基于列存儲的多核并行哈希分區(qū)優(yōu)化方法

【技術(shù)領(lǐng)域】
[0001]本發(fā)明屬于數(shù)據(jù)處理【技術(shù)領(lǐng)域】,特別涉及一種多核并行哈希分區(qū)優(yōu)化方法,可用于列存儲數(shù)據(jù)庫的數(shù)據(jù)分區(qū)。

【背景技術(shù)】
[0002]分區(qū)是數(shù)據(jù)庫中的重要操作,同時也是其他數(shù)據(jù)庫操作的基本操作,例如:連接、聚集、排序等操作。分區(qū)是將一個較大的任務(wù)分成若干個較小的子任務(wù)。處理若干個子任務(wù)所用的總時間常常小于處理一個較大任務(wù)所用的時間,這是因?yàn)檩^小的任務(wù)能夠高效的利用緩存和內(nèi)存。分區(qū)操作在不同的應(yīng)用中已經(jīng)有了大量的研究,這些研究主要是針對數(shù)據(jù)庫操作。在連接操作和聚集操作中,分區(qū)能夠明顯的提升其性能;在并行排序操作中,分區(qū)也是其中重要的一步。Manegold等人提出的Radix_cluster分區(qū)算法通過減少緩存丟失和快表丟失獲得了較好的效果。Cieslewicz等人提出了在多核處理器中并行分區(qū)的方法,在處理均勻分布的輸入數(shù)據(jù)時取得了較好的效果。
[0003]HASH分區(qū)主要用來分散熱點(diǎn)讀,確保數(shù)據(jù)在預(yù)先確定個數(shù)的分區(qū)中盡可能平均分布。傳統(tǒng)HASH分區(qū)方式通過取模的方式使數(shù)據(jù)盡可能平均分布在每個分區(qū)中,讓每個分區(qū)管理的數(shù)據(jù)都減少,提高查詢的效率;可是當(dāng)需要增加分區(qū)或者合并分區(qū)的時候,就會出現(xiàn)問題。假設(shè)原來是5個常規(guī)HASH分區(qū),現(xiàn)在需要新增一個常規(guī)HASH分區(qū),原來的取模算法是M0D(eXpr,5),根據(jù)余數(shù)O?4分布在5個分區(qū)中,現(xiàn)在新增一個分區(qū)后,取模算法變成M0D(expr, 6),根據(jù)余數(shù)O?5分區(qū)在6個分區(qū)中,原來5個分區(qū)中的數(shù)據(jù)大部分都需要通過重新計算重新分區(qū)。
[0004]伴隨當(dāng)今的硬件發(fā)展十分迅速,CPU擁有更多的核心,每個核心擁有更多的線程。常見的CPU擁有4個或者更多的核心,每個核心擁有2個或者更多的線程。最近,IBM推出了新一代的P0WER8處理器,支持12核心96線程,共享96MB的三級緩存,這說明多核CPU有廣闊的應(yīng)用前景。面對新型的硬件架構(gòu),傳統(tǒng)的并行哈希分區(qū)算法不能高效地利用多核處理器的并行資源,且不能較好地處理有傾斜的輸入數(shù)據(jù)。


【發(fā)明內(nèi)容】

[0005]鑒于現(xiàn)有技術(shù)的不足,本發(fā)明的目的是克服上述傳統(tǒng)哈希分區(qū)方法的兩個缺陷,采用多核處理器,利用線性哈希分區(qū)技術(shù)和基于映射-化簡模型的單CPU多核處理器并行技術(shù),動態(tài)地將要分區(qū)的列存儲數(shù)據(jù)集加載到內(nèi)存,并使用映射-化簡模型將分區(qū)操作分配到處理器的多個核上并行運(yùn)行,以縮短大數(shù)據(jù)集分區(qū)結(jié)果的返回時間,提高數(shù)據(jù)分區(qū)的效率,并較好地處理了有傾斜的輸入數(shù)據(jù)。
[0006]實(shí)現(xiàn)本發(fā)明目的的技術(shù)思路是:采用映射-化簡框架在多核處理器環(huán)境下對列存儲數(shù)據(jù)集進(jìn)行哈希分區(qū),并在映射-化簡執(zhí)行時將列存儲數(shù)據(jù)集均勻分為若干塊,通過映射-化簡模型將各個塊分配給不同的映射線程并行執(zhí)行,通過選擇合適的策略避免寫沖突,進(jìn)行第一次映射線程哈希分區(qū),再將所得到的中間結(jié)果集進(jìn)行數(shù)據(jù)傾斜優(yōu)化后作為輸入進(jìn)行第二次化簡線程哈希分區(qū),以實(shí)現(xiàn)列存儲數(shù)據(jù)集的多核并行哈希分區(qū)。
[0007]根據(jù)上述思路本發(fā)明的實(shí)現(xiàn)步驟包括如下:
[0008](I)讀取用戶輸入的列存儲數(shù)據(jù)集,該列存儲數(shù)據(jù)集的數(shù)據(jù)格式為(Key,Value)形式的鍵值對,其中Key表示鍵值對所對應(yīng)的編號,Value表示鍵值對所存儲的值;
[0009](2)將用戶輸入的列存儲數(shù)據(jù)集分割為若干大小相同的塊,并將每一塊數(shù)據(jù)交給一個映射線程進(jìn)行第一次哈希分區(qū);
[0010](3)對于列存儲數(shù)據(jù)集不同的哈希存儲結(jié)構(gòu),選擇相應(yīng)的避免寫沖突策略,以確保第一次哈希分區(qū)時映射線程的并行執(zhí)行;
[0011](4)通過映射線程并行執(zhí)行第一次哈希分區(qū),產(chǎn)生m個一次哈希分區(qū)結(jié)果:







HashBi ts
[0012](4a)設(shè)映射線程的映射哈希函數(shù)為' (Key) =Key mod T一^一其中HashBits
是用戶自定義的哈希參數(shù),其取值范圍為[2,+⑴),mod為模運(yùn)算,L I為向下取整運(yùn)算;
[0013](4b)每個映射線程依據(jù)映射哈希函數(shù)(Key),對于列存儲數(shù)據(jù)集(Key, Value)鍵值對中的Key值進(jìn)行哈希運(yùn)算,將運(yùn)算結(jié)果相同的鍵值對分到同一個分區(qū)中,共產(chǎn)生m個一次哈希分區(qū),其大小分別為D1, D2,...,Di,..., Dm, i e I, 2,…,m,m彡2 ;
[0014](5)將產(chǎn)生的m個分區(qū)結(jié)果通過化簡進(jìn)程進(jìn)行第二次哈希分區(qū):







H<ishBi ts
[0015](5a)設(shè)化簡線程的化簡哈希函數(shù)為:& (Key)= Key mod 2,其中「I為向上取整運(yùn)算;
[0016](5b)通過數(shù)據(jù)傾斜優(yōu)化方法優(yōu)化m個一次哈希分區(qū)結(jié)果,將數(shù)據(jù)傾斜優(yōu)化后的分區(qū)結(jié)果交給m個化簡線程進(jìn)行分區(qū),即由化簡線程依據(jù)化簡哈希函數(shù)f2 (Key),對每個分區(qū)結(jié)果(Key,Value)鍵值對中的Key值進(jìn)行哈希運(yùn)算,再將運(yùn)算結(jié)果相同的鍵值對分到同一個分區(qū)中,分別產(chǎn)生η個分區(qū)結(jié)果,η彡2,共產(chǎn)生mXn個二次哈希分區(qū),mXn ^ 4 ;
[0017](6)將最終的mXη個分區(qū)結(jié)果輸出給用戶。
[0018]本發(fā)明具有如下優(yōu)點(diǎn):
[0019]1.本發(fā)明基于多核處理器可并行執(zhí)行的特性,利用映射-化簡模型,將列存儲數(shù)據(jù)集分為若干塊交給線程進(jìn)行并行處理,實(shí)現(xiàn)多步并行的哈希分區(qū),提高了高速緩存效率,從而使多核處理器的整體性能得到提升;
[0020]2.本發(fā)明根據(jù)列存儲數(shù)據(jù)集兩種的不同存儲結(jié)構(gòu),選擇四種避免線程寫沖突策略,解決了各線程之間并行寫入數(shù)據(jù)集到同一分區(qū)位置時的寫沖突;
[0021]3.本發(fā)明對有數(shù)據(jù)傾斜的列存儲數(shù)據(jù)集提出數(shù)據(jù)傾斜優(yōu)化方法,實(shí)現(xiàn)了對各種分布的輸入數(shù)據(jù)集的哈希分區(qū)。

【專利附圖】

【附圖說明】
[0022]圖1為本發(fā)明的運(yùn)行流程示意圖;
[0023]圖2為本發(fā)明利用映射-化簡模型執(zhí)行多步哈希分區(qū)示意圖;
[0024]圖3為傳統(tǒng)的哈希存儲結(jié)構(gòu)圖;
[0025]圖4為本發(fā)明優(yōu)化的哈希存儲結(jié)構(gòu)圖;
[0026]圖5為本發(fā)明進(jìn)行第二次哈希分區(qū)前使用數(shù)據(jù)傾斜優(yōu)化方法的流程示意圖;
[0027]圖6為用本發(fā)明在無鎖策略下分別進(jìn)行單步分區(qū)與多步分區(qū)的效率對比圖;
[0028]圖7為用本發(fā)明在四種不同策略下分別進(jìn)行單步分區(qū)的效率對比圖;
[0029]圖8為用本發(fā)明在兩次遍歷策略下使用數(shù)據(jù)傾斜優(yōu)化與未使用數(shù)據(jù)傾斜優(yōu)化分別進(jìn)行分區(qū)的效率對比圖。

【具體實(shí)施方式】
[0030]為了更好的理解本發(fā)明,下面將結(jié)合附圖對本發(fā)明進(jìn)行詳細(xì)的說明。
[0031]參照圖1,本發(fā)明的實(shí)現(xiàn)步驟如下:
[0032]步驟1,讀取列存儲數(shù)據(jù)集。
[0033]將用戶所輸入的列存儲數(shù)據(jù)集保存在一個txt的文本文件中,每個鍵值對占txt文本文件的一行;
[0034]通過讀取txt文件每一行讀取用戶輸入的列存儲數(shù)據(jù)集,該列存儲數(shù)據(jù)集數(shù)的數(shù)據(jù)格式為(Key,Value)形式的鍵值對,其中每對鍵值對大小16字節(jié),含有8字節(jié)的編號Key和8字節(jié)存儲的值Value ;
[0035]對讀取的列存儲數(shù)據(jù)集選擇傳統(tǒng)的哈希存儲結(jié)構(gòu)或者優(yōu)化的哈希存儲結(jié)構(gòu)進(jìn)行存儲。
[0036]步驟2,分割用戶輸入的列存儲數(shù)據(jù)集。
[0037]將用戶輸入的列存儲數(shù)據(jù)集分割為t個大小相同的塊,如圖2中的分塊所示,數(shù)據(jù)集分塊數(shù)目t應(yīng)當(dāng)?shù)扔谟成渚€程的數(shù)目,其中t e 2,3,4,…;
[0038]依據(jù)用戶輸入數(shù)據(jù)集大小C和數(shù)據(jù)集分塊數(shù)目t計算每一塊數(shù)據(jù)集的大小f,映射線程依據(jù)每塊數(shù)據(jù)集的大小從總的數(shù)據(jù)集中取出數(shù)據(jù)。
[0039]步驟3,選擇并行分區(qū)時的避免寫沖突策略。
[0040]依據(jù)存儲用戶輸入數(shù)據(jù)集時所選擇的哈希存儲結(jié)構(gòu),對列存儲數(shù)據(jù)集不同的哈希存儲結(jié)構(gòu),選擇相應(yīng)的避免寫沖突策略,以確保第一次哈希分區(qū)時映射線程的并行執(zhí)行,其選擇原則如下:
[0041]原則一,對于存儲數(shù)據(jù)集采用傳統(tǒng)的哈希存儲結(jié)構(gòu),即用一個容器或者數(shù)組存儲鍵值對,則選擇使用兩次遍歷策略或并行緩存策略,以避免寫沖突;
[0042]原則二,對于列存儲數(shù)據(jù)集采用優(yōu)化的哈希存儲結(jié)構(gòu),則選擇使用加鎖策略或無鎖策略,以避免寫沖突。
[0043]所述傳統(tǒng)的哈希存儲結(jié)構(gòu),是用一個容器或者數(shù)組存儲鍵值對;當(dāng)用一個容器存儲某一個分區(qū)中的鍵值對時,由于用容器存儲鍵值對時只能通過順序遍歷找到該容器空閑的存儲位置,然后進(jìn)行寫入操作,隨著鍵值對數(shù)目的增加,鍵值對的存儲效率會明顯降低;當(dāng)用一個數(shù)組存儲某一個分區(qū)中的鍵值對時,其結(jié)構(gòu)如圖3所示,哈希存儲結(jié)構(gòu)由一個指針數(shù)組組成,該指針數(shù)組中的每一個指針指向一個新的數(shù)組,用于存儲鍵值對,由于數(shù)組可以通過下標(biāo)進(jìn)行定位,數(shù)組存儲鍵值對的存儲效率較高且存儲效率不會隨著存儲鍵值對的數(shù)目的增加而降低,但初始化一個容量較大的數(shù)組所需時間較長。
[0044]所述優(yōu)化的哈希存儲結(jié)構(gòu),其結(jié)構(gòu)如圖4所示,用一個連續(xù)的數(shù)組表示,數(shù)組的每一位表示一個哈希桶,每一個哈希桶存儲結(jié)果集中某一個分區(qū)中的鍵值對。每一個哈希桶由空閑指針(free指針),后繼指針(next指針)和一段連續(xù)的存儲空間組成,其中連續(xù)的存儲空間用于存儲鍵值對,free指針指向該連續(xù)存儲空間中下一個空閑位置,next指針指向新的哈希桶位置,這樣的設(shè)計既保證了鍵值對存儲效率又降低了初始化存儲結(jié)構(gòu)時的花銷;
[0045]所述的兩次遍歷策略,是指先通過線程進(jìn)行第一次遍歷,將每個線程分區(qū)所產(chǎn)生的各分區(qū)中鍵值對個數(shù)存儲到二維數(shù)組Km,其中q表示線程的編號,P表示該線程分區(qū)所產(chǎn)生的分區(qū)編號;然后通過公式=計算出第q個線程的第P個分區(qū)中鍵值對寫入


J=I 克=1
存儲結(jié)構(gòu)的位置;最后進(jìn)行第二次遍歷,將鍵值對并行寫入分區(qū)區(qū)域存儲結(jié)構(gòu);該策略最終的分區(qū)結(jié)果存儲在一段連續(xù)的存儲空間,提高了程序的局部空間利用率,但該策略對輸入的數(shù)據(jù)集要進(jìn)行兩次遍歷;
[0046]所述的并行緩存策略,是指每個線程有大小一定的獨(dú)立存儲空間,將鍵值對寫入線程自己的存儲空間時不需要進(jìn)行加鎖解鎖操作,但當(dāng)該存儲空間耗盡時,需要通過加鎖解鎖操作獲取新的存儲空間;
[0047]所述的加鎖策略,是指所有線程共享一個鍵值對存儲結(jié)構(gòu),每一個分區(qū)區(qū)域是一個連續(xù)的存儲空間,每個線程并行地將鍵值對寫入分區(qū)區(qū)域,當(dāng)不同線程寫入同一分區(qū)區(qū)域時,需要先對該分區(qū)區(qū)域進(jìn)行加鎖操作,然后加鎖線程進(jìn)行寫入;加鎖線程將鍵值對寫入完畢后需要進(jìn)行解鎖操作,并由另一個線程加鎖該分區(qū)區(qū)域進(jìn)行寫入,直至所有線程執(zhí)行完畢,使用該策略進(jìn)行哈希分區(qū)時內(nèi)存消耗較小,且內(nèi)存消耗不會隨著線程數(shù)目的增加而增加,但頻繁的加鎖解鎖操作影響了哈希分區(qū)的整體效率;
[0048]所述的無鎖策略,是指每個線程有一個獨(dú)立的鍵值對存儲結(jié)構(gòu),每個線程只將數(shù)據(jù)寫入自己的存儲結(jié)構(gòu)中,避免頻繁的加鎖解鎖操作,但該策略需要額外的操作將所有線程分區(qū)所產(chǎn)生的存儲結(jié)構(gòu)進(jìn)行合并,同時進(jìn)行哈希分區(qū)時的內(nèi)存消耗會隨著線程數(shù)目的增加而增加。
[0049]步驟4,映射線程進(jìn)行第一次哈希分區(qū)。
[0050]映射線程依據(jù)所選擇的避免寫沖突策略利用映射哈希函數(shù)并行執(zhí)行第一次哈希分區(qū),產(chǎn)生m個分區(qū)結(jié)果:







I HashBi ts
[0051](4a)設(shè)映射線程的映射哈希函數(shù)為:士' (Key) =Key mod 一2一其中HashBits
是用戶自定義的哈希參數(shù),其取值范圍為[2,+⑴),mod為模運(yùn)算,L」為向下取整運(yùn)算;
[0052](4b)每個映射線程依據(jù)映射哈希函數(shù)(Key),對于列存儲數(shù)據(jù)集(Key, Value)鍵值對中的Key值進(jìn)行哈希運(yùn)算,將運(yùn)算結(jié)果相同的鍵值對分到同一個分區(qū)中,共產(chǎn)生m個一次哈希分區(qū),其大小分別SD11Df1Df1Dm, i e l,2^",m,m>2。
[0053]步驟5,將產(chǎn)生的m個分區(qū)結(jié)果交給化簡線程,進(jìn)行數(shù)據(jù)傾斜優(yōu)化和第二次哈希分區(qū)。
[0054](5a)設(shè)化簡線程的化簡哈希函數(shù)為:& (Key)= Key fflod 2,其中「]為向上取整運(yùn)算;
[0055](5b)通過數(shù)據(jù)傾斜優(yōu)化方法優(yōu)化m個一次哈希分區(qū)結(jié)果:
[0056]參照圖5,本步驟的具體實(shí)現(xiàn)如下:
[0057](5bl)設(shè)定一個閾值T=2 X -;




Hl
[0058](5b2)將m個一次哈希分區(qū)D1, D2,...,Di,...,Dm依次與閾值T進(jìn)行比較:
[0059]若Di < T,則將該哈希分區(qū)直接交給化簡線程;
[0060]若DiXT,則將該哈希分區(qū)暫時保存到隊列D中,直至所有一次哈希分區(qū)全部比較完畢,再將隊列D中的每一個哈希分區(qū)平均分為m份,將每一份分別交給一個化簡線程。
[0061](5c)化簡線程依據(jù)化簡哈希函數(shù)對優(yōu)化后的分區(qū)結(jié)果進(jìn)行第二次哈希分區(qū),即依據(jù)化簡哈希函數(shù)(Key),對每個分區(qū)結(jié)果(Key, Value)鍵值對中的Key值進(jìn)行哈希運(yùn)算,再將運(yùn)算結(jié)果相同的鍵值對分到同一個分區(qū)中,分別產(chǎn)生η個分區(qū)結(jié)果,η >2,共產(chǎn)生mXn個二次哈希分區(qū),mXn彡4。
[0062]步驟6,將最終的mX η個分區(qū)結(jié)果輸出給用戶。
[0063]最終的mXn個分區(qū)結(jié)果通過txt文件形式輸出給用戶,同時進(jìn)行本次哈希分區(qū)所用的初始化時間、第一次分區(qū)時間、第二次分區(qū)時間以及總時間均將輸出給用戶,用戶依據(jù)上述時間參數(shù)對哈希分區(qū)的效率進(jìn)行評定。
[0064]下面將結(jié)合具體實(shí)驗(yàn)對本發(fā)明的效果作進(jìn)一步描述。
[0065]一、實(shí)驗(yàn)環(huán)境
[0066]在Linux系統(tǒng)中用C++編程語言,基于英特爾新型Sandy Bridge架構(gòu)的Xeon8核處理器(E5-26702.6GHZ)共用4個8GB DDR3內(nèi)存進(jìn)行分區(qū),每核包含兩個線程、擁有3個級別的緩存,其中I級緩存為獨(dú)立的32KB,2級緩存為獨(dú)立的256KB,3級緩存為共享的20M。
[0067]二、實(shí)驗(yàn)內(nèi)容
[0068]實(shí)驗(yàn)1,在無鎖策略下比較單步分區(qū)與多步分區(qū)的效率。
[0069]本實(shí)驗(yàn)中,用戶輸入的列存儲數(shù)據(jù)集為16M,共16384對鍵值對,對輸入數(shù)據(jù)集采用優(yōu)化的哈希存儲結(jié)構(gòu)進(jìn)行存儲,映射線程的線程數(shù)為16,即將輸入數(shù)據(jù)集均分為16個含有1024對鍵值對的數(shù)據(jù)集,取多個哈希函數(shù)參數(shù)HashBit,在無鎖策略下分別進(jìn)行單步哈希分區(qū)與多步哈希分區(qū),結(jié)果如圖6所示。
[0070]從圖6可見,當(dāng)HashBits較小時,由于分區(qū)結(jié)果中鍵值對較少,能夠較好地利用高速緩存和快表,而多步分區(qū)相比單步分區(qū)要多進(jìn)行一次分區(qū),因此單步分區(qū)的效率比多步分區(qū)要高。
[0071]當(dāng)HashBits較大時,由于分區(qū)結(jié)果中鍵值對較多,高速緩存和快表未命中的幾率增加,多步分區(qū)能夠?qū)⒎謪^(qū)結(jié)果中較多的鍵值對通過第一次分區(qū)使得分區(qū)結(jié)果中鍵值對數(shù)目減少,因此多步分區(qū)比單步分區(qū)效率更高,當(dāng)多步分區(qū)中第一次分區(qū)數(shù)目等于第二次分區(qū)數(shù)目時,多步分區(qū)效果最好。
[0072]實(shí)驗(yàn)2,比較四種不同策略的下單步分區(qū)的效率。
[0073]本實(shí)驗(yàn)中,用戶輸入的列存儲數(shù)據(jù)集為16M,共16384對鍵值對,使用加鎖策略和無鎖策略進(jìn)行分區(qū)時,輸入數(shù)據(jù)集采用優(yōu)化的哈希存儲結(jié)構(gòu)進(jìn)行存儲,使用兩次遍歷策略和并行緩存策略進(jìn)行分區(qū)時,輸入數(shù)據(jù)集采用傳統(tǒng)的哈希存儲結(jié)構(gòu)進(jìn)行存儲,映射線程的線程數(shù)為16,即將輸入數(shù)據(jù)集均分為16個含有1024對鍵值對的數(shù)據(jù)集,取多個哈希函數(shù)參數(shù)HashBit,通過映射線程進(jìn)行單步哈希分區(qū),結(jié)果如圖7所示。
[0074]從圖7可見,在加鎖策略中,當(dāng)HashBits較小時,每一個分區(qū)結(jié)果有較多的鍵值對,頻繁加鎖解鎖操作會影響整體性能。隨著HashBits的增加,每一個分區(qū)結(jié)果的鍵值對數(shù)目減少,線程之間的沖突減少,整體性能提升。當(dāng)HashBits繼續(xù)增加,高速緩存和快表的未命中會影響程序效率。
[0075]在無鎖策略中,由于沒有加鎖解鎖操作,在HashBits較小時程序性能大大優(yōu)于加鎖策略,但程序需要許多額外的變量記錄當(dāng)前寫入位置、分區(qū)大小等信息,而這些變量的數(shù)目隨著線程數(shù)目的增加而增加,所以隨著HashBits的增加,無鎖策略承擔(dān)的內(nèi)存壓力增力口,再考慮到高速緩存和快表未命中的影響,隨著HashBits的增加,程序整體效率明顯下降。
[0076]在兩次遍歷策略中,受限于第一次遍歷計算分區(qū)鍵值對寫入位置的操作,當(dāng)HashBits增加時,分區(qū)數(shù)目增多,第一次遍歷需要計算的寫入位置數(shù)目也隨著增加,該策略的整體效率就降低。
[0077]在并行緩存策略中,隨著HashBits的增加,考慮到高速緩存和快表未命中的影響,程序整體效率明顯下降。
[0078]實(shí)驗(yàn)3,對含有數(shù)據(jù)傾斜的輸入數(shù)據(jù)集在兩次遍歷策略下比較使用數(shù)據(jù)傾斜優(yōu)化與未使用數(shù)據(jù)傾斜優(yōu)化進(jìn)行分區(qū)的效率。
[0079]本實(shí)驗(yàn)中,用戶輸入的列存儲數(shù)據(jù)集為16M,共16384對鍵值對,用戶輸入的數(shù)據(jù)集是有數(shù)據(jù)傾斜的數(shù)據(jù)集,其傾斜度的齊夫值為1.15,對輸入數(shù)據(jù)集采用傳統(tǒng)的哈希存儲結(jié)構(gòu)進(jìn)行存儲,映射線程的線程數(shù)為16,取多個哈希函數(shù)參數(shù)HashBit,比較在兩次遍歷策略避免下使用數(shù)據(jù)傾斜優(yōu)化數(shù)據(jù)集與不使用數(shù)據(jù)傾斜優(yōu)化數(shù)據(jù)集進(jìn)行分區(qū)的效率,其結(jié)果如圖8所示。
[0080]從圖8可知,在多步分區(qū)處理有數(shù)據(jù)傾斜的輸入數(shù)據(jù)時,使用本發(fā)明提出的優(yōu)化方法比未使用優(yōu)化方法的性能有了明顯的提高。這是因?yàn)楸景l(fā)明提出的優(yōu)化方法將較大的數(shù)據(jù)集暫時保存延后進(jìn)行處理,先并行分區(qū)較小的數(shù)據(jù)集避免多個空閑線程等待一個工作線程的情況,對較大的數(shù)據(jù)集進(jìn)行均分后再由線程進(jìn)行并行分區(qū),因此在有數(shù)據(jù)傾斜的輸入數(shù)據(jù)情況下,可以有效的提高整體分區(qū)性能。
【權(quán)利要求】
1.一種基于列存儲的多核并行哈希分區(qū)優(yōu)化方法,其特征在于,包括以下步驟: (1)讀取用戶輸入的列存儲數(shù)據(jù)集,該列存儲數(shù)據(jù)集的數(shù)據(jù)格式為(Key,Value)形式的鍵值對,其中Key表示鍵值對所對應(yīng)的編號,Value表示鍵值對所存儲的值; (2)將用戶輸入的列存儲數(shù)據(jù)集分割為若干大小相同的塊,并將每一塊數(shù)據(jù)交給一個映射線程進(jìn)行第一次哈希分區(qū); (3)對于列存儲數(shù)據(jù)集不同的哈希存儲結(jié)構(gòu),選擇相應(yīng)的避免寫沖突策略,以確保第一次哈希分區(qū)時映射線程的并行執(zhí)行; (4)通過映射線程并行執(zhí)行第一次哈希分區(qū),產(chǎn)生m個一次哈希分區(qū)結(jié)果:






MashBi ts.(4a)設(shè)映射線程的映射哈希函數(shù)為..a (Key) =Key mod 一_2一其中HashBits是用戶自定義的哈希參數(shù),其取值范圍為[2,+⑴),mod為模運(yùn)算,L I為向下取整運(yùn)算; (4b)每個映射線程依據(jù)映射哈希函數(shù)(Key),對于列存儲數(shù)據(jù)集(Key, Value)鍵值對中的Key值進(jìn)行哈希運(yùn)算,將運(yùn)算結(jié)果相同的鍵值對分到同一個分區(qū)中,共產(chǎn)生m個一次哈希分區(qū),其大小分別為D1, D2, - ,Di, - ,Dm, i e 1,2,彡2 ; (5)將產(chǎn)生的m個分區(qū)結(jié)果通過化簡進(jìn)程進(jìn)行第二次哈希分區(qū): (5a)設(shè)化簡線程的化簡哈希函數(shù)為:^ (Key)= Rey mod 2?^^其中「I為向上取整運(yùn)算; (5b)通過數(shù)據(jù)傾斜優(yōu)化方法優(yōu)化m個一次哈希分區(qū)結(jié)果,將數(shù)據(jù)傾斜優(yōu)化后的分區(qū)結(jié)果交給m個化簡線程進(jìn)行劃分,即由化簡線程依據(jù)化簡哈希函數(shù)f2 (Key),對每個分區(qū)結(jié)果(Key, Value)鍵值對中的Key值進(jìn)行哈希運(yùn)算,再將運(yùn)算結(jié)果相同的鍵值對分到同一個分區(qū)中,分別產(chǎn)生η個分區(qū)結(jié)果,η彡2,共產(chǎn)生mXn個二次哈希分區(qū),mXn彡4 ; (6)將最終的mXn個分區(qū)結(jié)果輸出給用戶。
2.根據(jù)權(quán)利要求1所述的基于列存儲的多核并行哈希分區(qū)優(yōu)化方法,其特征在于,步驟(3)所述對于列存儲數(shù)據(jù)集不同的哈希存儲結(jié)構(gòu),選擇相應(yīng)的避免寫沖突策略,按如下原則選擇: 若列存儲數(shù)據(jù)集采用傳統(tǒng)的哈希存儲結(jié)構(gòu),即用一個容器或者數(shù)組存儲鍵值對,則選擇使用兩次遍歷策略或并行緩存策略,以避免寫沖突; 若列存儲數(shù)據(jù)集采用優(yōu)化的哈希存儲結(jié)構(gòu),則選擇使用加鎖策略或無鎖策略,以避免與沖突; 所述優(yōu)化的哈希存儲結(jié)構(gòu),是用一個連續(xù)的數(shù)組表示,數(shù)組中的每一位表示一個哈希桶,每一個哈希桶由free指針,next指針和一段連續(xù)的存儲空間組成,其中連續(xù)的存儲空間用于存儲鍵值對,free指針指向該連續(xù)存儲空間中下一個空閑位置,next指針指向新的哈希桶位置。
3.根據(jù)權(quán)利要求2所述基于列存儲的多核并行哈希分區(qū)優(yōu)化方法,其中所述的兩次遍歷策略,是指先通過線程進(jìn)行第一次遍歷,將每個線程分區(qū)所產(chǎn)生的各分區(qū)中鍵值對個數(shù)存儲到二維數(shù)組Km,其中q表示線程的編號,P表示該線程分區(qū)所產(chǎn)生的分區(qū)編號;然后通過公式£ ?晃k計算出第q個線程的第P個分區(qū)中鍵值對寫入存儲結(jié)構(gòu)的位置;最后

^/=1 k =1進(jìn)行第二次遍歷,將鍵值對并行寫入分區(qū)區(qū)域存儲結(jié)構(gòu)。
4.根據(jù)權(quán)利要求2所述基于列存儲的多核并行哈希分區(qū)優(yōu)化方法,其中所述的并行緩存策略,是指每個線程有大小一定的獨(dú)立存儲空間,將鍵值對寫入線程自己的存儲空間時不需要進(jìn)行加鎖解鎖操作,但當(dāng)該存儲空間耗盡時,需要通過加鎖解鎖操作獲取新的存儲空間。
5.根據(jù)權(quán)利要求2所述基于列存儲的多核并行哈希分區(qū)優(yōu)化方法,其中所述的加鎖策略,是指每個線程并行地將鍵值對寫入分區(qū)區(qū)域,當(dāng)不同線程寫入同一分區(qū)區(qū)域時,需要先對該分區(qū)區(qū)域進(jìn)行加鎖操作,然后加鎖線程進(jìn)行寫入;加鎖線程將鍵值對寫入完畢后需要進(jìn)行解鎖操作,并由另一個線程加鎖該分區(qū)區(qū)域進(jìn)行寫入,直至所有線程執(zhí)行完畢。
6.根據(jù)權(quán)利要求2所述基于列存儲的多核并行哈希分區(qū)優(yōu)化方法,其中所述的無鎖策略,是指每個線程有一個獨(dú)立的鍵值對存儲結(jié)構(gòu),每個線程只將數(shù)據(jù)寫入自己的存儲結(jié)構(gòu)中,避免頻繁的加鎖解鎖操作。
7.根據(jù)權(quán)利要求1所述的基于列存儲的多核并行哈希分區(qū)優(yōu)化方法,其特征在于,步驟(5b)所述通過數(shù)據(jù)傾斜優(yōu)化方法優(yōu)化m個一次哈希分區(qū)結(jié)果,按如下步驟進(jìn)行: (5bl)設(shè)定一個閾值T=2 X 一,其中C表不輸入列存儲數(shù)據(jù)集的大小;

m (5b2)將m個一次哈希分區(qū)D1, D2,...,Di,...,Dm依次與閾值T進(jìn)行比較: 若Di < T,則將該哈希分區(qū)直接交給化簡線程; 若DiXT,則將該哈希分區(qū)暫時保存到隊列D中,直至所有一次哈希分區(qū)全部比較完畢,執(zhí)行步驟(5b3);(5b3)將隊列D中的每一個哈希分區(qū)平均分為m份,將每一份分別交給一個化簡線程。
【文檔編號】G06F17/30GK104133661SQ201410369674
【公開日】2014年11月5日 申請日期:2014年7月30日 優(yōu)先權(quán)日:2014年7月30日
【發(fā)明者】黃鑫, 劉志鏡, 袁通, 劉慧 , 王梓, 徐曾, 強(qiáng)波, 李宗利, 邱龍濱, 王鵬 申請人:西安電子科技大學(xué)
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點(diǎn)贊!
1
文成县| 饶河县| 三台县| 唐河县| 惠州市| 大余县| 会宁县| 定襄县| 陇西县| 元阳县| 沂源县| 甘南县| 深泽县| 营山县| 江川县| 仙桃市| 定州市| 苍溪县| 航空| 安龙县| 磴口县| 云林县| 光山县| 东兰县| 江口县| 宣威市| 汕头市| 永川市| 河东区| 石台县| 新郑市| 湖口县| 福清市| 华蓥市| 宜章县| 根河市| 来宾市| 化德县| 砚山县| 邻水| 永安市|