• 
    <ul id="o6k0g"></ul>
    <ul id="o6k0g"></ul>

    基于分片關系型數據庫的查詢方法和系統技術方案

    技術編號:14242530 閱讀:126 留言:0更新日期:2016-12-21 19:40
    本發明專利技術提供一種基于分片關系型數據庫的查詢方法和系統解決現有技術中將大量數據讀取到中心節點的內存中,中間節點順序執行性能非常差,在數據量大的時候,無法滿足在線查詢的需求的問題。該方法包括步驟:接收語義如下的查詢語句:SELECT列名稱A,COUNT(DISTINCT列名稱B)FROM表名稱T?GROUP?BY列名稱G;列名稱G是列名稱A的子集;其能避免中心節點內存消耗甚至內存溢出。

    【技術實現步驟摘要】

    本專利技術涉及分布式數據的查詢,特別涉及包含count,distinct和groupby的查詢。
    技術介紹
    大數據時代,數據統計是一個常見業務。現在的統計型業務常常構建在關系型數據庫之上,比如mysql。這類關系型數據庫,因為單機的限制,數據量在千萬級別之后,統計性能就會急劇下降。通常地,可以通過對關系型數據庫做水平分片,將數據分布在多個機器上,來解決單機瓶頸的問題。在分片之后,統計類型SQL的執行過程會變成在各個分片節點執行一次統計,然后在中心節點進行一次匯總統計,以保證SQL的語義。對于具有分組,去重,計數功能的SQL會遇到功能和性能上的問題。該類SQL如下:select group_col,count(distinct dist_col)from table group by group_col。其中group_col和dist_col可以是一個或者多個字段名。通常的,如果將該類SQL直接下發到各個分片執行,并在中心節點將各個分片返回的結果進行匯總,會出現結果錯誤。因為在多個分片中,可能出現group_col和dist_col一樣的數據,分片執行再匯總會出現重復計數導致結果變大。另外地,為了保證結果正確,可能采用以下方法執行該類SQL。1.從各個分片節點讀取group_col和dist_col包含的字段值。具體SQL為:select group_col,dist_col from table;2.順序遍歷所有的數據,先根據group_col計算數據所屬于的分組,再在該分組內根據dist_col執行去重操作。3.所有數據遍歷完成后,計算各個分組中去重后的dist_col數量。該方法遇到的問題是,會將大量數據讀取到中心節點的內存中,中間節點順序執行性能非常差,在數據量大的時候,無法滿足在線查詢的需求。
    技術實現思路
    以下給出對一個或更多個方面的簡化概述以力圖提供對此類方面的基本理解。此概述不是所有構想到的方面的詳盡綜覽,并且既非旨在指認出所有方面的關鍵性或決定性要素亦非試圖界定任何或所有方面的范圍。其唯一的目的是要以簡化形式給出一個或更多個方面的一些概念以作為稍后給出的更加具體的說明之序。本專利技術提供一種基于分片關系型數據庫的查詢方法和系統解決現有技術中將大量數據讀取到中心節點的內存中,中間節點順序執行性能非常差,在數據量大的時候,無法滿足在線查詢的需求的問題。為實現上述目的,專利技術人提供基于分片關系型數據庫的查詢方法,包括步驟:S101、接收語義如下的查詢語句:SELECT列名稱A,COUNT(DISTINCT列名稱B)FROM表名稱T GROUP BY列名稱G;列名稱G是列名稱A的子集;S102、在各分片節點分別執行SELECT列名稱C FROM表名稱T,列名稱C是列名稱A與列名稱B的并集;將上述各分片節點的查詢結果中的每條紀錄進行處理,處理即根據每條記錄的b值取其hash值,hash值相同的記錄放入相同的數據管道,b值為記錄中列名稱B所對應的值;S103、在相同數據管道的紀錄,分別根據G列的值進行分組,在各分組內計算該分組內不同b值出現的個數count,每個分組計算結果對應一條對應關系(g,count);S104、將各管道中上述分組計算獲得的對應關系(G,COUNT)合并,即根據列名稱G,合并g值相同的紀錄,合并后的記錄的COUNT列的值為合并的所有對應關系的COUNT列的值相加;合并的結果即為查詢結果。進一步,列名稱G等于列名稱A。進一步,數據管道的個數N為機器cpu核心數的兩倍,所述步驟“處理即根據每條記錄b值取其hash值,hash值相同的記錄放入相同的數據管道”為根據每條記錄的b值求取該b值對應的hash值,并將該hash值模N,根據模N的值分配該條記錄到對應的數據管道,數值0-到N-1分別唯一對應1個數據管道。進一步,在步驟“接收語義如下的查詢語句:SELECT列名稱A,COUNT(DISTINCT列名稱B)FROM表名稱T GROUP BY列名稱G;”之前還包括步驟:讀取數據庫查詢語句,判斷查詢語句是否符合語意;若不符合語意,則返回;若符合語意,則執行上述接收查詢語句的步驟。進一步,其中上述S101、S102為根據分片節點中的表T的大小分批執行,上述步驟S103在分片節點執行。本文還提供一種分布式數據庫系統,其包括至少第一分片節點和第二分片節點、接收模塊、第一處理模塊、第二處理模塊、第三處理模塊;第一分片節點和第二分片節點分別存儲有數據庫的水平切片數據;接收模塊接收語義如下的查詢語句:SELECT列名稱A,COUNT(DISTINCT列名稱B)FROM表名稱T GROUP BY列名稱G;列名稱G是列名稱A的子集;第一處理模塊用于向第一分片節點和第一分片節點分別發送查詢語句SELECT列名稱C FROM表名稱T,列名稱C是列名稱A與列名稱B的并集,將各分片節點的查詢結果中的每條紀錄進行處理,處理即根據每條記錄的b值取其hash值,hash值相同的記錄放入相同的數據管道,b值為記錄中列名稱B所對應的值;第二處理模塊用于在相同數據管道的紀錄,分別根據G列的值進行分組,在各分組內計算該分組內不同b值出現的個數count,每個分組計算結果為對應的一條對應關系(g,count);第三處理模塊用于將各管道中上述分組計算獲得的對應關系(G,COUNT)合并,即根據列名稱G,合并g值相同的紀錄,合并后的記錄的COUNT列的值為合并的所有對應關系的COUNT列的值相加;合并的結果即為查詢結果。進一步,列名稱G等于列名稱A。進一步,數據管道的個數N為機器cpu核心數的兩倍,第一處理模塊用于根據每條記錄的b值求取該b值對應的hash值,并將該hash值模N,根據模N值分配該條記錄到對應的數據管道,數值0-到N-1分別唯一對應1個數據管道。進一步,接收模塊用于在“接收語義如下的查詢語句:SELECT列名稱A,COUNT(DISTINCT列名稱B)FROM表名稱T GROUP BY列名稱G;”之前,還用于讀取數據庫查詢語句,判斷查詢語句符合語意;若不符合語意,則返回;若符合語意,則繼續執行。進一步,第一處理模塊、第二處理模塊為根據分片節點中表T的大小,對表T數據分批執行;第三處理模塊位于分片節點。區別于現有技術,上述技術方案讀取數據的過程采用流式(小批量)讀取,批量按需地把數據從各個分片讀取到內存,避免一次性大量數據涌入中心節點造成過大的內存消耗甚至內存溢出。為能達成前述及相關目的,這一個或更多個方面包括在下文中充分描述并在所附權利要求中特別指出的特征。以下描述和附圖詳細闡述了這一個或更多個方面的某些說明性特征。但是,這些特征僅僅是指示了可采用各種方面的原理的各種方式中的若干種,并且本描述旨在涵蓋所有此類方面及其等效方面。附圖說明以下將結合附圖來描述所公開的方面,提供附圖是為了說明而非限定所公開的方面,附圖中相似的標號標示相似要素,并且在其中:圖1為結合具體數據說明本文所述基于分片關系型數據庫的查詢方法;圖2為本文所述基于分片關系型數據庫的查詢方法。圖1中的標號用于指代其指向的表。具體實施方式為詳細說明技術方案的
    技術實現思路
    、構造特征、所實現目的及效果,以下結合具體實施例并配合附圖詳予說明。在以下描述中,出于本文檔來自技高網
    ...
    基于分片關系型數據庫的查詢方法和系統

    【技術保護點】
    基于分片關系型數據庫的查詢方法,其特征在于,包括步驟:S101、接收語義如下的查詢語句:SELECT列名稱A,COUNT(DISTINCT列名稱B)FROM表名稱T?GROUP?BY列名稱G;列名稱G是列名稱A的子集;S102、在各分片節點分別執行SELECT列名稱C?FROM表名稱T,列名稱C是列名稱A與列名稱B的并集;將上述各分片節點的查詢結果中的每條紀錄進行處理,處理即根據每條記錄的b值取其hash值,hash值相同的記錄放入相同的數據管道,b值為記錄中列名稱B所對應的值;S103、對在相同數據管道的紀錄,分別根據G列的值進行分組,在各分組內計算該分組內不同b值出現的個數count,每個分組計算結果對應一條對應關系(g,count);S104、將各管道中上述分組計算獲得的對應關系(G,COUNT)合并,即根據列名稱G,合并g值相同的紀錄,合并后的記錄的COUNT列的值為合并的所有對應關系的COUNT列的值相加;合并的結果即為查詢結果。

    【技術特征摘要】
    1.基于分片關系型數據庫的查詢方法,其特征在于,包括步驟:S101、接收語義如下的查詢語句:SELECT列名稱A,COUNT(DISTINCT列名稱B)FROM表名稱T GROUP BY列名稱G;列名稱G是列名稱A的子集;S102、在各分片節點分別執行SELECT列名稱C FROM表名稱T,列名稱C是列名稱A與列名稱B的并集;將上述各分片節點的查詢結果中的每條紀錄進行處理,處理即根據每條記錄的b值取其hash值,hash值相同的記錄放入相同的數據管道,b值為記錄中列名稱B所對應的值;S103、對在相同數據管道的紀錄,分別根據G列的值進行分組,在各分組內計算該分組內不同b值出現的個數count,每個分組計算結果對應一條對應關系(g,count);S104、將各管道中上述分組計算獲得的對應關系(G,COUNT)合并,即根據列名稱G,合并g值相同的紀錄,合并后的記錄的COUNT列的值為合并的所有對應關系的COUNT列的值相加;合并的結果即為查詢結果。2.根據權利要求1所述的基于分片關系型數據庫的查詢方法,其特征在于列名稱G等于列名稱A。3.根據權利要求1所述的基于分片關系型數據庫的查詢方法,其特征在于,數據管道的個數N為機器cpu核心數的兩倍,所述步驟“處理即根據每條記錄b值取其hash值,hash值相同的記錄放入相同的數據管道”為根據每條記錄的b值求取該b值對應的hash值,并將該hash值模N,根據模N的值分配該條記錄到對應的數據管道,數值0到N-1分別唯一對應1個數據管道。4.根據權利要求1所述的基于分片關系型數據庫的查詢方法,其特征在在于,在步驟“接收語義如下的查詢語句:SELECT列名稱A,COUNT(DISTINCT列名稱B)FROM表名稱T GROUP BY列名稱G;”之前還包括步驟:讀取數據庫查詢語句,判斷查詢語句是否符合語意;若不符合語意,則返回;若符合語意,則執行上述接收查詢語句的步驟。5.根據權利要求1所述的基于分片關系型數據庫的查詢方法,其特征在于,其中上述S101、S102為根據分片節點中的表T的大小分批執行,上述步驟S103在分片節點執行...

    【專利技術屬性】
    技術研發人員:劉德建邱宗銘陳霖吳擁民陳宏展
    申請(專利權)人:福建天晴數碼有限公司
    類型:發明
    國別省市:福建;35

    網友詢問留言 已有0條評論
    • 還沒有人留言評論。發表了對其他瀏覽者有用的留言會獲得科技券。

    1
    主站蜘蛛池模板: 亚洲国产精品无码久久久久久曰 | 亚洲av永久无码精品天堂久久| 国产成人无码网站| 日韩人妻无码免费视频一区二区三区| 人妻无码一区二区三区四区| 免费无码VA一区二区三区| 国产精品白浆无码流出| 91无码人妻精品一区二区三区L| 日韩成人无码一区二区三区| 国产精品无码无需播放器| 岛国av无码免费无禁网站| 亚洲欧洲美洲无码精品VA| 无码人妻精品一区二区三区99不卡| 日韩成人无码中文字幕| 国产成人综合日韩精品无码| 在线观看成人无码中文av天堂| 国产爆乳无码一区二区麻豆| 日韩精品人妻系列无码av东京| 中文字幕无码乱码人妻系列蜜桃| 国产aⅴ无码专区亚洲av麻豆| 无码一区二区三区AV免费| 无码国产精品一区二区免费| 无码精品国产一区二区三区免费| 成人免费无码H在线观看不卡| 国产午夜激无码av毛片| 国产精品无码一区二区三区不卡 | 亚洲日韩国产精品无码av| 亚洲va中文字幕无码| 无码人妻精品一二三区免费| 2021无码最新国产在线观看| 久久久久久人妻无码| 亚洲av永久无码嘿嘿嘿| 亚洲韩国精品无码一区二区三区| 国产真人无码作爱免费视频| 精品久久久无码中文字幕| 久久青青草原亚洲av无码| 亚洲色偷拍区另类无码专区| 午夜亚洲av永久无码精品| 成年轻人电影www无码| 免费无码又爽又黄又刺激网站| 亚洲熟妇无码av另类vr影视|