本發(fā)明實(shí)施例涉及數(shù)據(jù)處理技術(shù)領(lǐng)域,尤其涉及一種數(shù)據(jù)分組聚集方法及裝置。
背景技術(shù):
數(shù)據(jù)分組聚集是數(shù)據(jù)業(yè)務(wù)處理和分析應(yīng)用中的關(guān)鍵問題,是數(shù)據(jù)庫管理系統(tǒng)、數(shù)據(jù)倉庫等系統(tǒng)中的重要功能?;诠1硎菍?duì)數(shù)據(jù)進(jìn)行分組聚集計(jì)算的一種常見的方法,而鏈?zhǔn)焦1硎枪1碇凶罹哂袑?shí)用價(jià)值的哈希結(jié)構(gòu)。
近年來,隨著計(jì)算機(jī)硬件技術(shù)的發(fā)展,內(nèi)存容量越來越大,更多的數(shù)據(jù)可以存放在內(nèi)存中,在具有大量數(shù)據(jù)的情況下,為了提高對(duì)數(shù)據(jù)的處理效率,單指令多數(shù)據(jù)流(Single Instruction Multiple Data,簡(jiǎn)稱SIMD)指令集已經(jīng)被越來越多的處理器產(chǎn)品所支持,成為CPU性能提升的途徑。SIMD是一種實(shí)現(xiàn)數(shù)據(jù)級(jí)并行的技術(shù),支持在一條指令中同時(shí)操作多個(gè)數(shù)據(jù)。以兩個(gè)數(shù)組對(duì)應(yīng)元素相加為例,在單指令單數(shù)據(jù)流的操作模式下,一對(duì)數(shù)組元素分別從內(nèi)存讀到CPU的寄存器里執(zhí)行相加運(yùn)算,然后再讀取并處理下一對(duì)元素。如果增加寄存器的長(zhǎng)度,則可使得一條指令能夠同時(shí)將一個(gè)數(shù)組的多個(gè)元素讀取到CPU里,并對(duì)多對(duì)元素同時(shí)進(jìn)行相加操作。但目前利用鏈?zhǔn)焦1韺?duì)數(shù)據(jù)進(jìn)行分組聚集時(shí),缺乏能夠適應(yīng)SIMD架構(gòu)的解決方案,造成分組聚集效率低下的問題。
技術(shù)實(shí)現(xiàn)要素:
針對(duì)現(xiàn)有技術(shù)存在的問題,本發(fā)明實(shí)施例提供一種數(shù)據(jù)分組聚集方法及裝置。
一方面,本發(fā)明實(shí)施例提供一種數(shù)據(jù)分組聚集方法,包括:
獲取多個(gè)待分組聚集數(shù)據(jù),并根據(jù)所述待分組聚集數(shù)據(jù)和掩碼向量構(gòu)建待分組向量;
計(jì)算所述待分組向量中各所述待分組聚集數(shù)據(jù)對(duì)應(yīng)的哈希值,并根據(jù)所述哈希值并利用SIMD操作獲得索引向量;
根據(jù)所述索引向量和所述SIMD操作建立插入掩碼向量和更新掩碼向量,根據(jù)所述插入掩碼向量從待分組向量中獲得需要?jiǎng)?chuàng)建新分組項(xiàng)的數(shù)據(jù),根據(jù)所述更新掩碼向量從待分組向量中獲得需要更新聚集信息的數(shù)據(jù);
將所述需要?jiǎng)?chuàng)建新分組的數(shù)據(jù)利用SIMD操作插入到鏈?zhǔn)焦1碇?,?duì)所述需要更新聚集信息的數(shù)據(jù)利用SIMD操作更新對(duì)應(yīng)的聚集信息,形成所述鏈?zhǔn)焦1怼?/p>
另一方面,本發(fā)明實(shí)施例提供一種數(shù)據(jù)分組聚集裝置,包括:
構(gòu)建模塊,用于獲取多個(gè)待分組聚集數(shù)據(jù),并根據(jù)所述待分組聚集數(shù)據(jù)和掩碼向量構(gòu)建待分組向量;
計(jì)算模塊,用于計(jì)算所述待分組向量中各所述待分組聚集數(shù)據(jù)對(duì)應(yīng)的哈希值,根據(jù)所述哈希值并利用SIMD操作獲得索引向量;
掩碼向量建立模塊,用于根據(jù)所述索引向量和所述SIMD操作建立插入掩碼向量和更新掩碼向量,根據(jù)所述插入掩碼向量從待分組向量中獲得需要?jiǎng)?chuàng)建新分組項(xiàng)的數(shù)據(jù),根據(jù)所述更新掩碼向量從待分組向量中獲得需要更新聚集信息的數(shù)據(jù);
哈希表生成模塊,用于將所述需要?jiǎng)?chuàng)建新分組項(xiàng)的數(shù)據(jù)利用SIMD操作插入到鏈?zhǔn)焦1碇?,?duì)所述需要更新聚集信息的數(shù)據(jù)利用SIMD操作更新對(duì)應(yīng)的聚集信息,形成所述鏈?zhǔn)焦1怼?/p>
本發(fā)明實(shí)施例提供的一種數(shù)據(jù)分組聚集方法及裝置,通過將多個(gè)待分組聚集數(shù)據(jù)構(gòu)建待分組向量,并通過SIMD操作完成基于鏈?zhǔn)焦1淼臄?shù)據(jù)分組聚集,以向量為單位進(jìn)行分組聚集,提高了對(duì)數(shù)據(jù)進(jìn)行分組聚集的效率。
附圖說明
為了更清楚地說明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對(duì)實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作一簡(jiǎn)單地介紹,顯而易見地,下面描述中的附圖是本發(fā)明的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
圖1為本發(fā)明實(shí)施例提供的一種數(shù)據(jù)分組聚集方法流程示意圖;
圖2為本發(fā)明實(shí)施例提供的數(shù)據(jù)表結(jié)構(gòu)示意圖;
圖3為本發(fā)明實(shí)施例提供的構(gòu)建待分組向量的方法流程示意圖;
圖4為本發(fā)明實(shí)施例提供的鏈?zhǔn)焦1斫Y(jié)構(gòu)示意圖;
圖5為本發(fā)明實(shí)施例提供的獲得索引向量方法流程示意圖;
圖6為本發(fā)明實(shí)施例提供的獲得插入掩碼向量和更新掩碼向量方法流程示意圖;
圖7為本發(fā)明實(shí)施例提供的需要?jiǎng)?chuàng)建新分組項(xiàng)的數(shù)據(jù)插入到鏈?zhǔn)焦1矸椒鞒淌疽鈭D;
圖8為本發(fā)明實(shí)施例提供的更新聚集信息方法流程示意圖;
圖9為本發(fā)明實(shí)施例提供的更新再分組聚集數(shù)據(jù)對(duì)應(yīng)的分組項(xiàng)方法流程示意圖;
圖10為本發(fā)明實(shí)施例提供的一種數(shù)據(jù)分組聚集裝置結(jié)構(gòu)示意圖;
圖11為本發(fā)明另一實(shí)施例提供的一種數(shù)據(jù)分組聚集裝置結(jié)構(gòu)示意圖;
圖12為本發(fā)明實(shí)施例提供的一種數(shù)據(jù)分組聚集裝置實(shí)體結(jié)構(gòu)示意圖。
具體實(shí)施方式
為使本發(fā)明實(shí)施例的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有作出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
圖1為本發(fā)明實(shí)施例提供的一種數(shù)據(jù)分組聚集方法流程示意圖,如圖1所示,所述方法,包括:
步驟101:獲取多個(gè)待分組聚集數(shù)據(jù),并根據(jù)所述待分組聚集數(shù)據(jù)和掩碼向量構(gòu)建待分組向量;
具體地,首先獲取多個(gè)待分組聚集數(shù)據(jù),其中待分組聚集數(shù)據(jù)的個(gè)數(shù)是預(yù)先設(shè)定好的,然后,將獲取到的多個(gè)待分組聚集數(shù)據(jù)和掩碼向量構(gòu)建成一個(gè)待分組向量。應(yīng)當(dāng)說明的是,如果本次分組聚集操作是第一次進(jìn)行分組聚集操作,或上次分組聚集操作中所有待分組聚集數(shù)據(jù)全部完成分組聚集,則在本次進(jìn)行分組聚集操作時(shí),多個(gè)待分組聚集數(shù)據(jù)全部來自于數(shù)據(jù)表中未經(jīng)過分組聚集的數(shù)據(jù),掩碼向量為初始化后的掩碼向量或通過上次分組聚集操作獲得;如果上次分組聚集操作中所有待分組聚集數(shù)據(jù)都沒有完成分組聚集,則在本次進(jìn)行分組聚集操作時(shí),多個(gè)待分組聚集數(shù)據(jù)全部來自上次分組聚集操作中未完成分組聚集的數(shù)據(jù);如果上次分組聚集操作中有部分待分組聚集數(shù)據(jù)未完成分組聚集,則多個(gè)待分組聚集數(shù)據(jù)包括數(shù)據(jù)表中未經(jīng)過分組聚集的數(shù)據(jù)和上次分組聚集操作中未完成分組聚集的數(shù)據(jù),此時(shí)掩碼向量通過上次分組聚集操作獲得。圖2為本發(fā)明實(shí)施例提供的數(shù)據(jù)表結(jié)構(gòu)示意圖,如圖2所示,數(shù)據(jù)表中存放有未經(jīng)過分組聚集的數(shù)據(jù),且是以列存儲(chǔ)的方式進(jìn)行存儲(chǔ)的,其中數(shù)據(jù)表中包括兩個(gè)屬性k1和k2,邏輯上,k1和k2中下標(biāo)相同的待分組聚集數(shù)據(jù)屬于同一條記錄,例如:k1可以存儲(chǔ)一個(gè)班級(jí)學(xué)生的學(xué)號(hào),k2可以存儲(chǔ)學(xué)生的成績(jī),若要獲取到一個(gè)班級(jí)每個(gè)學(xué)生的各科成績(jī)之和,則需要將同一個(gè)學(xué)生學(xué)號(hào)對(duì)應(yīng)的成績(jī)進(jìn)行相加,因此首先需要將k1和k2中的屬于同一個(gè)學(xué)號(hào)的記錄進(jìn)行分組再將分組后的k2的數(shù)據(jù)進(jìn)行相加。圖3為本發(fā)明實(shí)施例提供的構(gòu)建待分組向量的方法流程示意圖,如圖3所示,如果待分組聚集數(shù)據(jù)中包括數(shù)據(jù)表中未經(jīng)過分組聚集的數(shù)據(jù)和上次分組聚集操作中未完成分組聚集的數(shù)據(jù),通過掩碼向量獲知在上次分組聚集操作中哪些數(shù)據(jù)是已經(jīng)完成分組的,從圖3中可以看出A、B、C、E、F是已經(jīng)完成分組的,則A、B、C、E、F對(duì)應(yīng)的位置可以空出來,讀入本次分組聚集操作的數(shù)據(jù)表中未經(jīng)過分組聚集的數(shù)據(jù),使用SIMD中選擇性載入操作基于掩碼向量將數(shù)據(jù)表中未經(jīng)過分組聚集的數(shù)據(jù)依次讀入到合適的位置上,形成待分組向量。在上次分組聚集操作中未完成分組聚集的數(shù)據(jù)有兩種情況,一種是與其他數(shù)據(jù)發(fā)生了哈希沖突的數(shù)據(jù),例如數(shù)據(jù)D,另一種是還沒有找到正確分組項(xiàng)的數(shù)據(jù),例如數(shù)據(jù)G和數(shù)據(jù)H,這兩類數(shù)據(jù)需要在本次分組聚集操作中進(jìn)行進(jìn)一步處理。
步驟102:計(jì)算所述待分組向量中各所述待分組聚集數(shù)據(jù)對(duì)應(yīng)的哈希值,根據(jù)所述哈希值并利用SIMD操作獲得索引向量;
具體地,計(jì)算組成待分組向量的各個(gè)待分組聚集數(shù)據(jù)所對(duì)應(yīng)的哈希值,其中,哈希值決定了頭指針中索引值在頭指針數(shù)組中的位置,索引值預(yù)示著索引值對(duì)應(yīng)的待分組聚集數(shù)據(jù)可能的分組項(xiàng),根據(jù)哈希值通過SIMD操作獲得索引向量。
步驟103:根據(jù)所述索引向量和所述SIMD操作建立插入掩碼向量和更新掩碼向量,根據(jù)所述插入掩碼向量從待分組向量中獲得需要?jiǎng)?chuàng)建新分組項(xiàng)的數(shù)據(jù),根據(jù)所述更新掩碼向量從待分組向量中獲得需要更新聚集信息的數(shù)據(jù);
具體地,分別建立插入掩碼向量和更新掩碼向量,其中插入掩碼向量用于指示需要?jiǎng)?chuàng)建新分組項(xiàng)的數(shù)據(jù),更新掩碼向量用于對(duì)已有分組項(xiàng)進(jìn)行更新的數(shù)據(jù)。并判斷發(fā)生哈希沖突的數(shù)據(jù),根據(jù)沖突情況對(duì)插入掩碼向量和更新掩碼向量進(jìn)行調(diào)整。如果兩個(gè)待分組聚集數(shù)據(jù)對(duì)應(yīng)的哈希值相同,就說明這兩個(gè)待分組聚集數(shù)據(jù)發(fā)生了沖突。根據(jù)索引向量和SIMD操作建立插入掩碼向量和更新掩碼向量。
步驟104:將所述需要?jiǎng)?chuàng)建新分組項(xiàng)的數(shù)據(jù)利用SIMD操作插入到鏈?zhǔn)焦1碇?,?duì)所述需要更新聚集信息的數(shù)據(jù)利用SIMD操作更新對(duì)應(yīng)的聚集信息,形成所述鏈?zhǔn)焦1怼?/p>
具體地,根據(jù)插入掩碼向量獲知待分組向量中哪些待分組聚集數(shù)據(jù)需要?jiǎng)?chuàng)建新分組項(xiàng),將這些待分組聚集數(shù)據(jù)利用SIMD操作插入到鏈?zhǔn)焦1碇校瑥亩纬涉準(zhǔn)焦1?;根?jù)更新掩碼向量獲知待分組向量中哪些待分組聚集數(shù)據(jù)需要更新聚集信息,將這些待分組聚集數(shù)據(jù)對(duì)應(yīng)的聚集信息利用SIMD操作進(jìn)行更新,從而形成鏈?zhǔn)焦1?。圖4為本發(fā)明實(shí)施例提供的鏈?zhǔn)焦1斫Y(jié)構(gòu)示意圖,如圖4所示,鏈?zhǔn)焦1碛蓄^指針、分組屬性、鏈表指針、聚集信息,以全局?jǐn)?shù)組模式分別存儲(chǔ)這些信息,其中聚集信息包括相同分組屬性出現(xiàn)的次數(shù)和對(duì)應(yīng)的待分組數(shù)據(jù)之和。鏈?zhǔn)焦1碇械念^指針和鏈表指針將具有相同哈希值的分組屬性及聚集信息對(duì)應(yīng)的數(shù)據(jù)鏈接起來,同一個(gè)鏈表中的分組屬性對(duì)應(yīng)的數(shù)值可以不同,但哈希值相同,分組屬性中只記錄不同的數(shù)據(jù)。下標(biāo)相同的分組屬性、鏈表指針和聚集信息組合成一個(gè)鏈表結(jié)點(diǎn),可以由全局下標(biāo)控制分組聚集操作時(shí)使用的鏈表結(jié)點(diǎn),形成鏈?zhǔn)焦1碇械姆纸M項(xiàng),頭指針和鏈表指針通過記錄數(shù)組的下標(biāo)值進(jìn)行分組項(xiàng)的鏈接。另外,根據(jù)本次分組聚集操作得到的插入掩碼向量和更新掩碼向量獲得下次分組聚集操作中的掩碼向量,用于表示可讀入新的待分組聚集數(shù)據(jù),并在下次分組聚集操作中依然執(zhí)行步驟101-步驟104,直到待分組聚集數(shù)據(jù)的數(shù)量不足以組合成一個(gè)待分組向量,此時(shí),對(duì)剩余待分組聚集數(shù)據(jù)采用傳統(tǒng)的基于鏈?zhǔn)焦1淼臄?shù)據(jù)分組聚集方法。
本發(fā)明實(shí)施例通過將多個(gè)待分組聚集數(shù)據(jù)構(gòu)建待分組向量,并通過SIMD操作完成基于鏈?zhǔn)焦1淼臄?shù)據(jù)分組聚集,以向量為單位進(jìn)行分組聚集,提高了對(duì)數(shù)據(jù)進(jìn)行分組聚集的效率。
在上述實(shí)施例的基礎(chǔ)上,所述根據(jù)所述哈希值并利用SIMD操作獲得索引向量,包括:
根據(jù)所述哈希值利用SIMD操作,將數(shù)據(jù)表中未經(jīng)過分組聚集的數(shù)據(jù)對(duì)應(yīng)的待確定分組項(xiàng)和上次分組聚集操作中發(fā)生沖突的數(shù)據(jù)對(duì)應(yīng)的所述待確定分組項(xiàng)存入第一中間向量中;
獲取在上次分組聚集操作中需再分組聚集的數(shù)據(jù)對(duì)應(yīng)的第二中間向量;
根據(jù)所述第一中間向量和所述第二中間向量獲得所述索引向量。
具體地,如果待分組聚集數(shù)據(jù)中包括數(shù)據(jù)表中未經(jīng)過分組聚集的數(shù)據(jù)和上次分組聚集操作中未完成分組聚集的數(shù)據(jù),在獲取索引向量時(shí),圖5為本發(fā)明實(shí)施例提供的獲得索引向量方法流程示意圖,如圖5所示,索引向量由鏈表結(jié)點(diǎn)的下標(biāo)組成,表示每個(gè)待分組聚集數(shù)據(jù)對(duì)應(yīng)的待確定分組項(xiàng),也就是每個(gè)待分組聚集數(shù)據(jù)可能所在的分組項(xiàng)。首先計(jì)算待分組向量中各個(gè)待分組聚集數(shù)據(jù)對(duì)應(yīng)的哈希值,即根據(jù)哈希值確定索引值存儲(chǔ)在頭指針數(shù)組中的位置,基于該位置信息將索引值通過收集操作收集到向量v1中。對(duì)于待分組聚集數(shù)據(jù)I、J、K、L、M和上次分組聚集操作中與其他數(shù)據(jù)發(fā)生沖突的數(shù)據(jù)D,索引值預(yù)示著待分組聚集數(shù)據(jù)對(duì)應(yīng)的待確定分組項(xiàng),通過位操作將向量v1中的上述對(duì)應(yīng)的值過濾到第一中間向量v2中。對(duì)上次分組聚集操作中未完成分組聚集且需要再分組聚集的數(shù)據(jù)G和數(shù)據(jù)H,之前已經(jīng)通過鏈表指針找到待確定分組項(xiàng),記錄在第二中間向量v3中,將向量第一中間v2和第二中間向量v3合并起來得到索引向量。
本發(fā)明實(shí)施例通過對(duì)待分組向量進(jìn)行哈希值計(jì)算,然后利用SIMD操作獲得索引向量,其計(jì)算是通過向量的形式進(jìn)行計(jì)算,提高了計(jì)算的效率。
在上述實(shí)施例的基礎(chǔ)上,所述根據(jù)所述索引向量建立插入掩碼向量和更新掩碼向量,包括:
將所述索引向量和空指針向量進(jìn)行比較操作獲得比較結(jié)果向量,根據(jù)所述比較結(jié)果向量獲得所述插入掩碼向量;
根據(jù)所述比較結(jié)果向量獲取中間掩碼向量,對(duì)所述中間掩碼向量進(jìn)行修正,獲得修正后向量,根據(jù)所述索引向量和所述修正后向量獲得所述更新掩碼向量。
具體地,圖6為本發(fā)明實(shí)施例提供的獲得插入掩碼向量和更新掩碼向量方法流程示意圖,如圖6所示,將索引向量與空指針向量進(jìn)行比較操作,即將索引向量中的各個(gè)值與空指針比較,如果索引向量中的某個(gè)數(shù)值為空,說明該數(shù)值與空指針向量中對(duì)應(yīng)的值相同,則索引向量中與空指針向量中對(duì)應(yīng)的值作比較后的結(jié)果為1,如果索引向量中的某個(gè)數(shù)值不為空,則比較結(jié)果為0。向量v4表示待分組聚集數(shù)據(jù)L與其他待分組數(shù)據(jù)發(fā)生了沖突,因此,待分組聚集數(shù)據(jù)L不會(huì)被繼續(xù)處理。所以向量v4為未發(fā)生哈希沖突數(shù)據(jù)的向量,將比較結(jié)果向量與向量v4進(jìn)行與操作,形成插入掩碼向量。另外,對(duì)比較結(jié)果向量取反操作獲得中間掩碼向量,利用向量v4對(duì)中間掩碼向量進(jìn)行修正,即進(jìn)行與操作,獲得修正后向量,根據(jù)修正后向量和索引向量從鏈?zhǔn)焦1淼姆纸M屬性中選擇性收集已分組數(shù)據(jù),并與待分組向量中的待分組聚集數(shù)據(jù)進(jìn)行比較操作,最終獲得更新掩碼向量。
從圖6中可以看出,待分組聚集數(shù)據(jù)J和待分組聚集數(shù)據(jù)G已經(jīng)在鏈?zhǔn)焦1碇写嬖冢虼?,需要?duì)待分組聚集數(shù)據(jù)J和待分組聚集數(shù)據(jù)G的聚集信息進(jìn)行更新。而待分組聚集數(shù)據(jù)D對(duì)應(yīng)的分組屬性為A,則說明A和D哈希到了相同的位置上,需要繼續(xù)為D尋找新的分組項(xiàng)。
本發(fā)明實(shí)施例通過比較操作建立插入掩碼向量和更新掩碼向量,指示需要?jiǎng)?chuàng)建新分組項(xiàng)的數(shù)據(jù)和需要更新分組聚集信息的數(shù)據(jù)。
在上述實(shí)施例的基礎(chǔ)上,所述將所述需要?jiǎng)?chuàng)建新分組項(xiàng)的數(shù)據(jù)利用SIMD操作插入到鏈?zhǔn)焦1碇?,?duì)所述需要更新聚集信息的數(shù)據(jù)利用SIMD操作更新對(duì)應(yīng)的聚集信息,形成所述鏈?zhǔn)焦1?,包括?/p>
將所述需要?jiǎng)?chuàng)建新分組項(xiàng)的數(shù)據(jù)利用SIMD操作插入到鏈?zhǔn)焦1淼南噜忢?xiàng)中;
根據(jù)所述更新掩碼向量和所述索引向量利用所述SIMD操作對(duì)所述需要更新聚集信息的數(shù)據(jù)更新對(duì)應(yīng)的聚集信息。
具體地,圖7為本發(fā)明實(shí)施例提供的需要?jiǎng)?chuàng)建新分組項(xiàng)的數(shù)據(jù)插入到鏈?zhǔn)焦1矸椒鞒淌疽鈭D,如圖7所示,根據(jù)插入掩碼向量獲知待分組聚集數(shù)據(jù)I、K、M、H需要?jiǎng)?chuàng)建新分組項(xiàng)并插入到鏈?zhǔn)焦1碇校藭r(shí),待分組聚集數(shù)據(jù)I、K、M、H通過選擇性存儲(chǔ)操作插入到分組屬性的相鄰項(xiàng)中,起始位置由全局下標(biāo)p決定,p一直指向第一個(gè)空的分組項(xiàng),在分組聚集操作完成后更新p的值。若聚集操作包括相同分組屬性出現(xiàn)的次數(shù)和數(shù)據(jù)和,則鏈?zhǔn)焦1碇行录尤氲姆纸M項(xiàng)對(duì)應(yīng)的相同分組屬性出現(xiàn)的次數(shù)均為1,數(shù)據(jù)和就是相同分組項(xiàng)數(shù)據(jù)對(duì)應(yīng)的數(shù)據(jù)之和。鏈表指針也是類似,數(shù)據(jù)來自于向量v1,向量v1在相應(yīng)位置上的指針部分是空指針,部分指向鏈表的第一個(gè)分組項(xiàng),不管是哪種情況,新建分組項(xiàng)將成為鏈表中新的第一個(gè)分組項(xiàng),因此還要修改頭指針的數(shù)據(jù)。在修改頭指針時(shí),將從p開始的數(shù)據(jù)基于I、K、M和H的哈希值插入到頭指針合適的位置上,通過選擇性分散指令完成這一過程。
圖8為本發(fā)明實(shí)施例提供的更新聚集信息方法流程示意圖,如圖8所示,根據(jù)更新掩碼向量獲知待分組聚集數(shù)據(jù)J和G需要更新鏈?zhǔn)焦1碇械木奂畔?,聚集信息以?shù)據(jù)和為例。在更新鏈?zhǔn)焦1碇芯奂畔r(shí),先將數(shù)據(jù)和中已有的J和G的數(shù)據(jù)通過選擇性收集操作收集到向量v5中,然后與k2中數(shù)據(jù)對(duì)應(yīng)的數(shù)據(jù)向量進(jìn)行相加,獲得和向量,再將和向量通過選擇性分散操作分散到數(shù)據(jù)和中。應(yīng)當(dāng)說明的是相同分組屬性出現(xiàn)的次數(shù)更新采用同樣的方法進(jìn)行,本發(fā)明實(shí)施例對(duì)此不再贅述。
本發(fā)明實(shí)施例通過SIMD操作將需要?jiǎng)?chuàng)建新分組項(xiàng)的數(shù)據(jù)插入哈希表中,以及將需要更新聚集信息的數(shù)據(jù)更新對(duì)應(yīng)的聚集信息,以向量的形式進(jìn)行操作,提高了分組效率。
在上述實(shí)施例的基礎(chǔ)上,所述方法還包括:
若所述待分組向量中包含需要再次進(jìn)行所述分組聚集操作的再分組聚集數(shù)據(jù),則通過鏈表指針更新所述再分組聚集數(shù)據(jù)對(duì)應(yīng)的分組項(xiàng)。
具體地,如果在本次分組聚集操作中待分組向量中包含需要再次進(jìn)行分組聚集操作的數(shù)據(jù),稱為再分組聚集數(shù)據(jù),說明再分組聚集數(shù)據(jù)在本次分組聚集操作中還沒有找到正確的分組項(xiàng),則需要對(duì)再分組聚集數(shù)據(jù)通過鏈表指針更新對(duì)應(yīng)的分組項(xiàng)。本次待分組向量中包含的上次分組聚集操作后需要再分組聚集數(shù)據(jù)有G和H,G和H在本次分組聚集操作中找到了正確的分組項(xiàng),而D在本次分組聚集操作后仍未找到正確的分組項(xiàng),因此,D將作為下次分組聚集操作中的需要再分組聚集的數(shù)據(jù)。圖9為本發(fā)明實(shí)施例提供的更新再分組聚集數(shù)據(jù)對(duì)應(yīng)的分組項(xiàng)方法流程示意圖,如圖9所示,已建立分組項(xiàng)的數(shù)據(jù)和完成聚集信息更新的數(shù)據(jù)都屬于處理完畢的數(shù)據(jù),將插入掩碼向量和更新掩碼向量結(jié)合起來形成掩碼向量v6,表示在下一個(gè)循環(huán)中可以讀入新的待分組聚集數(shù)據(jù)。將掩碼向量v6取反后與向量v4作與操作,在不考慮沖突數(shù)據(jù)的情況下,根據(jù)索引向量對(duì)需要更新分組項(xiàng)的數(shù)據(jù)D在鏈表指針中由當(dāng)前分組項(xiàng)指向下一個(gè)分組項(xiàng),并選擇性收集到向量v3中,用于在下次分組聚集操作中對(duì)數(shù)據(jù)D繼續(xù)進(jìn)行處理。
本發(fā)明實(shí)施例通過將需要再次進(jìn)行分組聚集的數(shù)據(jù)使用鏈表指針為其預(yù)先指定一個(gè)分組項(xiàng),用于下次分組聚集操作中進(jìn)行比較。
圖10為本發(fā)明實(shí)施例提供的一種數(shù)據(jù)分組聚集裝置結(jié)構(gòu)示意圖,如圖10所示,所述裝置包括:構(gòu)建模塊1001、計(jì)算模塊1002、掩碼向量建立模塊1003和哈希表生成模塊1004,其中:
構(gòu)建模塊1001用于獲取多個(gè)待分組聚集數(shù)據(jù),并根據(jù)所述待分組聚集數(shù)據(jù)和掩碼向量構(gòu)建待分組向量;計(jì)算模塊1002用于計(jì)算所述待分組向量中各所述待分組聚集數(shù)據(jù)對(duì)應(yīng)的哈希值,根據(jù)所述哈希值并利用SIMD操作獲得索引向量;掩碼向量建立模塊1003用于根據(jù)所述索引向量和所述SIMD中的選擇性操作建立插入掩碼向量和更新掩碼向量,根據(jù)所述插入掩碼向量從待分組向量中獲得需要?jiǎng)?chuàng)建新分組項(xiàng)的數(shù)據(jù),根據(jù)所述更新掩碼向量從待分組向量中獲得需要更新聚集信息的數(shù)據(jù);哈希表生成模塊1004用于將所述需要?jiǎng)?chuàng)建新分組項(xiàng)的數(shù)據(jù)利用SIMD操作插入到鏈?zhǔn)焦1碇?,?duì)所述需要更新聚集信息的數(shù)據(jù)利用SIMD操作更新對(duì)應(yīng)的聚集信息,形成所述鏈?zhǔn)焦1怼?/p>
具體地,構(gòu)建模塊1001首先獲取多個(gè)待分組聚集數(shù)據(jù),其中待分組聚集數(shù)據(jù)的個(gè)數(shù)是預(yù)先設(shè)定好的,然后,將獲取到的多個(gè)待分組聚集數(shù)據(jù)和掩碼向量構(gòu)建成一個(gè)待分組向量。計(jì)算模塊1002計(jì)算組成待分組向量的各個(gè)待分組聚集數(shù)據(jù)所對(duì)應(yīng)的哈希值,其中,哈希值決定了頭指針中索引值在頭指針數(shù)組中的位置,索引值預(yù)示著索引值對(duì)應(yīng)的待分組聚集數(shù)據(jù)可能的分組項(xiàng),根據(jù)哈希值通過SIMD操作獲得索引向量。掩碼向量建立模塊1003分別建立插入掩碼向量和更新掩碼向量,其中插入掩碼向量用于指示需要?jiǎng)?chuàng)建新分組項(xiàng)的數(shù)據(jù),更新掩碼向量用于對(duì)已有分組項(xiàng)進(jìn)行更新的數(shù)據(jù)。并判斷發(fā)生哈希沖突的數(shù)據(jù),根據(jù)沖突情況對(duì)插入掩碼向量和更新掩碼向量進(jìn)行調(diào)整。如果兩個(gè)待分組聚集數(shù)據(jù)對(duì)應(yīng)的哈希值相同,就說明這兩個(gè)待分組聚集數(shù)據(jù)發(fā)生了沖突。根據(jù)索引向量和SIMD操作建立插入掩碼向量和更新掩碼向量。哈希表生成模塊1004根據(jù)插入掩碼向量獲知待分組向量中哪些待分組聚集數(shù)據(jù)需要?jiǎng)?chuàng)建新分組項(xiàng),將這些待分組聚集數(shù)據(jù)利用SIMD操作插入到鏈?zhǔn)焦1碇?,從而形成鏈?zhǔn)焦1?;根?jù)更新掩碼向量獲知待分組向量中哪些待分組聚集數(shù)據(jù)需要更新聚集信息,將這些待分組聚集數(shù)據(jù)對(duì)應(yīng)的聚集信息利用SIMD操作進(jìn)行更新,從而形成鏈?zhǔn)焦1怼?/p>
本發(fā)明提供的裝置的實(shí)施例具體可以用于執(zhí)行上述各方法實(shí)施例的處理流程,其功能在此不再贅述,可以參照上述方法實(shí)施例的詳細(xì)描述。
本發(fā)明實(shí)施例通過將多個(gè)待分組聚集數(shù)據(jù)構(gòu)建待分組向量,并通過SIMD操作完成基于鏈?zhǔn)焦1淼臄?shù)據(jù)分組聚集,以向量為單位進(jìn)行分組聚集,提高了對(duì)數(shù)據(jù)進(jìn)行分組聚集的效率。
在上述實(shí)施例的基礎(chǔ)上,所述計(jì)算模塊,具體用于:
根據(jù)所述哈希值利用SIMD操作,將數(shù)據(jù)表中未經(jīng)過分組聚集的數(shù)據(jù)對(duì)應(yīng)的待確定分組項(xiàng)和上次分組聚集操作中發(fā)生沖突的數(shù)據(jù)對(duì)應(yīng)的所述待確定分組項(xiàng)存入第一中間向量中;
獲取在上次分組聚集操作中需再分組聚集的數(shù)據(jù)對(duì)應(yīng)的第二中間向量;
根據(jù)所述第一中間向量和所述第二中間向量獲得所述索引向量。
具體地,如果待分組聚集數(shù)據(jù)中包括數(shù)據(jù)表中未經(jīng)過分組聚集的數(shù)據(jù)和上次分組聚集操作中未完成分組聚集的數(shù)據(jù),在獲取索引向量時(shí),首先計(jì)算待分組向量中各個(gè)待分組聚集數(shù)據(jù)對(duì)應(yīng)的哈希值,即根據(jù)哈希值確定索引值存儲(chǔ)在頭指針數(shù)組中的位置,基于該位置信息將索引值通過收集操作收集到向量v1中。對(duì)于待分組聚集數(shù)據(jù)I、J、K、L、M和上次分組聚集操作中與其他數(shù)據(jù)發(fā)生沖突的數(shù)據(jù)D,索引值預(yù)示著數(shù)據(jù)對(duì)應(yīng)的待確定分組項(xiàng),通過位操作將向量v1中的上述對(duì)應(yīng)的值過濾到第一中間向量v2中。對(duì)上次分組聚集操作中未完成分組聚集的數(shù)據(jù)G和數(shù)據(jù)H,之前已經(jīng)通過鏈表指針找到待確定分組項(xiàng),記錄在第二中間向量v3中,將向量第一中間v2和第二中間向量v3合并起來得到索引向量。
本發(fā)明實(shí)施例通過對(duì)待分組向量進(jìn)行哈希值計(jì)算,然后利用SIMD操作獲得索引向量,其計(jì)算是通過向量的形式進(jìn)行計(jì)算,提高了計(jì)算的效率。
在上述實(shí)施例的基礎(chǔ)上,所述掩碼向量建立模塊,具體用于:
將所述索引向量和空指針向量進(jìn)行比較操作獲得比較結(jié)果向量,根據(jù)所述比較結(jié)果向量獲得所述插入掩碼向量;
根據(jù)所述比較結(jié)果向量獲取中間掩碼向量,對(duì)所述中間掩碼向量進(jìn)行修正,獲得修正后向量,根據(jù)所述索引向量和所述修正后向量獲得所述更新掩碼向量。
具體地,將索引向量與空指針向量進(jìn)行比較操作,即將索引向量中的各個(gè)值與空指針比較,如果索引向量中的某個(gè)數(shù)值為空,說明該數(shù)值與空指針向量中對(duì)應(yīng)的值相同,索引向量中與空指針向量中對(duì)應(yīng)的值作比較獲得比較結(jié)果向量,將比較結(jié)果向量和表示未發(fā)生哈希沖突數(shù)據(jù)的向量進(jìn)行與操作獲得所述插入掩碼向量。另外,對(duì)比較結(jié)果向量取反操作獲得中間掩碼向量,并對(duì)中間掩碼向量進(jìn)行修正處理,獲得修正后向量。其中修正處理為中間掩碼向量與待分組聚集數(shù)據(jù)形成的未發(fā)生沖突的向量進(jìn)行與操作。根據(jù)修正后向量和索引向量從鏈?zhǔn)焦1淼姆纸M屬性中選擇性收集已分組數(shù)據(jù),并與待分組向量中的待分組聚集數(shù)據(jù)進(jìn)行比較操作,最終獲得更新掩碼向量。
本發(fā)明實(shí)施例通過比較操作建立插入掩碼向量和更新掩碼向量,指示需要?jiǎng)?chuàng)建新分組項(xiàng)的數(shù)據(jù)和需要更新分組聚集信息的數(shù)據(jù)。
在上述實(shí)施例的基礎(chǔ)上,所述哈希表生成模塊,具體用于:
將所述需要?jiǎng)?chuàng)建新分組項(xiàng)的數(shù)據(jù)利用SIMD操作插入到鏈?zhǔn)焦1淼南噜忢?xiàng)中;
根據(jù)所述更新掩碼向量和所述索引向量利用所述SIMD操作對(duì)所述需要更新聚集信息的數(shù)據(jù)更新對(duì)應(yīng)的聚集信息。
具體地,哈希表生成模塊根據(jù)插入掩碼向量獲知待分組聚集數(shù)據(jù)I、K、M、H需要?jiǎng)?chuàng)建新分組項(xiàng)并插入到鏈?zhǔn)焦1碇?,此時(shí),待分組聚集數(shù)據(jù)I、K、M、H通過選擇性存儲(chǔ)操作插入到分組屬性的相鄰項(xiàng)中。
另外,哈希表生成模塊根據(jù)更新掩碼向量獲知待分組聚集數(shù)據(jù)J和G需要更新鏈?zhǔn)焦1碇械木奂畔ⅲ奂畔⒁詳?shù)據(jù)和為例。在更新鏈?zhǔn)焦1碇芯奂畔r(shí),先將數(shù)據(jù)和中已有的J和G的數(shù)據(jù)通過選擇性收集操作收集到向量v5中,然后與k2中數(shù)據(jù)對(duì)應(yīng)的數(shù)據(jù)向量進(jìn)行相加,獲得和向量,再將和向量通過選擇性分散操作分散到數(shù)據(jù)和中。應(yīng)當(dāng)說明的是相同分組屬性出現(xiàn)的次數(shù)更新采用同樣的方法進(jìn)行,本發(fā)明實(shí)施例對(duì)此不再贅述。
本發(fā)明實(shí)施例通過SIMD操作將需要?jiǎng)?chuàng)建新分組項(xiàng)的數(shù)據(jù)插入哈希表中,以及將需要更新聚集信息的數(shù)據(jù)更新對(duì)應(yīng)的聚集信息,以向量的形式進(jìn)行操作,提高了分組效率。
在上述實(shí)施例的基礎(chǔ)上,圖11為本發(fā)明另一實(shí)施例提供的一種數(shù)據(jù)分組聚集裝置結(jié)構(gòu)示意圖,如圖11所示,所述裝置包括:構(gòu)建模塊1001、計(jì)算模塊1002、掩碼向量建立模塊1003、哈希表生成模塊1004和分組項(xiàng)更新模塊1005,其中:
分組項(xiàng)更新模塊1005用于若所述待分組向量中包含需要再次進(jìn)行所述分組聚集操作的再分組聚集數(shù)據(jù),則通過鏈表指針更新所述再分組聚集數(shù)據(jù)對(duì)應(yīng)的分組項(xiàng)。
具體地,構(gòu)建模塊1001、計(jì)算模塊1002、掩碼向量建立模塊1003和哈希表生成模塊1004與上述實(shí)施例一致,此處不再贅述。如果在本次分組聚集操作中待分組向量中包含需要再次進(jìn)行分組聚集操作的數(shù)據(jù),稱為再分組聚集數(shù)據(jù),說明再分組聚集數(shù)據(jù)在本次分組聚集操作中還沒有找到正確的分組項(xiàng),則通過分組項(xiàng)更新模塊1005對(duì)再分組聚集數(shù)據(jù)通過鏈表指針更新對(duì)應(yīng)的分組項(xiàng)。
本發(fā)明實(shí)施例通過將多個(gè)待分組聚集數(shù)據(jù)構(gòu)建待分組向量,并通過SIMD操作完成基于鏈?zhǔn)焦1淼臄?shù)據(jù)分組聚集,以向量為單位進(jìn)行分組聚集,提高了對(duì)數(shù)據(jù)進(jìn)行分組聚集的效率。
圖12為本發(fā)明實(shí)施例提供的一種數(shù)據(jù)分組聚集裝置實(shí)體結(jié)構(gòu)示意圖,如圖12所示:所述裝置,包括:處理器(processor)1201、存儲(chǔ)器(memory)1202、和總線1203;其中,
所述處理器1201、存儲(chǔ)器1202通過所述總線1203完成相互間的通信;
所述處理器1201用于調(diào)用所述存儲(chǔ)器1202中的程序指令,以執(zhí)行上述各方法實(shí)施例所提供的方法,例如包括:獲取多個(gè)待分組聚集數(shù)據(jù),并根據(jù)所述待分組聚集數(shù)據(jù)和掩碼向量構(gòu)建待分組向量;計(jì)算所述待分組向量中各所述待分組聚集數(shù)據(jù)對(duì)應(yīng)的哈希值,根據(jù)所述哈希值并利用SIMD操作獲得索引向量;根據(jù)所述索引向量和所述SIMD操作建立插入掩碼向量和更新掩碼向量,根據(jù)所述插入掩碼向量從待分組向量中獲得需要?jiǎng)?chuàng)建新分組項(xiàng)的數(shù)據(jù),根據(jù)所述更新掩碼向量從待分組向量中獲得需要更新聚集信息的數(shù)據(jù);將所述需要?jiǎng)?chuàng)建新分組項(xiàng)的數(shù)據(jù)利用SIMD操作插入到鏈?zhǔn)焦1碇?,?duì)所述需要更新聚集信息的數(shù)據(jù)利用SIMD操作更新對(duì)應(yīng)的聚集信息,形成所述鏈?zhǔn)焦1怼?/p>
以上所描述的裝置實(shí)施例僅僅是示意性的,其中所述作為分離部件說明的單元可以是或者也可以不是物理上分開的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位于一個(gè)地方,或者也可以分布到多個(gè)網(wǎng)絡(luò)單元上??梢愿鶕?jù)實(shí)際的需要選擇其中的部分或者全部模塊來實(shí)現(xiàn)本實(shí)施例方案的目的。本領(lǐng)域普通技術(shù)人員在不付出創(chuàng)造性的勞動(dòng)的情況下,即可以理解并實(shí)施。
通過以上的實(shí)施方式的描述,本領(lǐng)域的技術(shù)人員可以清楚地了解到各實(shí)施方式可借助軟件加必需的通用硬件平臺(tái)的方式來實(shí)現(xiàn),當(dāng)然也可以通過硬件?;谶@樣的理解,上述技術(shù)方案本質(zhì)上或者說對(duì)現(xiàn)有技術(shù)做出貢獻(xiàn)的部分可以以軟件產(chǎn)品的形式體現(xiàn)出來,該計(jì)算機(jī)軟件產(chǎn)品可以存儲(chǔ)在計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)中,如ROM/RAM、磁碟、光盤等,包括若干指令用以使得一臺(tái)計(jì)算機(jī)設(shè)備(可以是個(gè)人計(jì)算機(jī),服務(wù)器,或者網(wǎng)絡(luò)設(shè)備等)執(zhí)行各個(gè)實(shí)施例或者實(shí)施例的某些部分所述的方法。
最后應(yīng)說明的是:以上實(shí)施例僅用以說明本發(fā)明的技術(shù)方案,而非對(duì)其限制;盡管參照前述實(shí)施例對(duì)本發(fā)明進(jìn)行了詳細(xì)的說明,本領(lǐng)域的普通技術(shù)人員應(yīng)當(dāng)理解:其依然可以對(duì)前述各實(shí)施例所記載的技術(shù)方案進(jìn)行修改,或者對(duì)其中部分技術(shù)特征進(jìn)行等同替換;而這些修改或者替換,并不使相應(yīng)技術(shù)方案的本質(zhì)脫離本發(fā)明各實(shí)施例技術(shù)方案的精神和范圍。