韩剧19禁啪啪无遮挡大尺_国产精品白嫩白嫩大学美女_日韩一区二区电影在线观看_日韩电影一区二区三区四区_一区二区三区激情_黄色在线观看视频免费_欧美福利小视频_久久99精品久久久久久国产越南_视频一区二区三区免费观看_九一午夜精品av

  • 手機站
  • 微信
  • 搜索
    搜新聞
    您的位置:首頁 > 企業(yè)觀察

    深入淺出話DB|柏睿數(shù)據(jù)RapidsDB高性能解密之數(shù)據(jù)編碼

    經(jīng)過前文對數(shù)據(jù)存儲的介紹,大家對RapidsDB的數(shù)據(jù)存儲方面有了一定的認知。同時朋友們可能也會思考,作為新一代的分布式數(shù)據(jù)庫,RapidsDB還有沒有更硬核的優(yōu)化手段?摳細節(jié)能摳出個三室一廳那種?

    好!!本文我們就RapidsDB數(shù)據(jù)編碼方面來看如何做到性能加速。

    介紹RapidsDB的數(shù)據(jù)編碼,準確地說,是介紹存在磁盤內(nèi)的列存儲表的數(shù)據(jù)編碼。列存儲表的數(shù)據(jù)以多種不同形式編碼存儲,包括字典編碼、游程編碼和值編碼。只有某些編碼可以直接處理,即直接“操作”,如字典編碼、游程編碼和整數(shù)值編碼。

    以字典編碼為例,對于只有3個不同值的字符串列的一個段,為每個字符串存儲一個2位的ID號,ID號被用作字典的參考。當存儲在列存儲中時,這些ID被緊緊地打包在一起。請參考以下字典:

    當它被存儲到列段中時,可以表示為打包字符串ID的位向量:

    ●Strings:”red”,”blue”,”green”,”green”,”red”

    ●Strings IDs:0,2,1,1,0

    ●Bit vector:00 10 01 01 00 (2 bits per string ID)

    作為直接對編碼數(shù)據(jù)進行操作的例子,RapidsDB可以對字符串字典編碼的列段執(zhí)行過濾操作,比如說“t.a=’xyz’”,方法是首先找到字典中每個條目的過濾結果,然后在掃描該段時,查詢執(zhí)行系統(tǒng)簡單地獲取t.a中每個值的編碼ID號,并使用它來查找在字典的初始掃描中計算的該ID的字符串比較結果。這往往比實際情況中的字符串比較要快得多。其他類型的操作也可以直接在編碼數(shù)據(jù)ID值上完成,包括比較進行分組操作所需的ID值。更多細節(jié)可自行拓展了解。

    在列存儲掃描之外的RapidsDB中的大多數(shù)查詢處理都是一次一行地完成的。對編碼數(shù)據(jù)的列存儲處理以矢量化的方式完成,其中來自一列的大批量數(shù)據(jù)在一個或多個相對簡單的循環(huán)中處理。與一次一行的處理相比,這些循環(huán)對現(xiàn)在CPU更加友好,通過降低指令數(shù)量,提高了高速緩存使用率,并提高了處理器指令流水線的效率。

    基于上述編碼,通過使用特殊的編碼處理技術以及支持英特爾AVX2指令集的處理器上的單指令多數(shù)據(jù)(SIMD)指令,使包括過濾和聚合在內(nèi)的某些操作可以在非常高效的狀態(tài)下運行。

    硬件上的SIMD不是編碼數(shù)據(jù)優(yōu)化的唯一核心,即使沒有SIMD的支持,對編碼數(shù)據(jù)的操作性能也會提高幾倍到30倍;使用了SIMD則可以進一步提升性能,帶來至少2-3倍的增益。具體優(yōu)化結果將取決于數(shù)據(jù)及查詢。個別查詢的一些部分可能不需要對編碼數(shù)據(jù)進行操作,因此用戶體驗到的加速效果可能會有所不同。

    默認情況下,對數(shù)據(jù)編碼的操作是數(shù)據(jù)庫內(nèi)部自動執(zhí)行的。用戶不需要更改任何設置就能從中受益。對數(shù)據(jù)編碼使用操作是查詢在系統(tǒng)運行時生成的,而不是由查詢優(yōu)化器做出的。

    編碼數(shù)據(jù)的查詢優(yōu)化只能在列式表中體現(xiàn),需要具備以下一個或多個組件:

    ●過濾器Filters

    ●分組 Group by

    ●聚合 Aggregates

    ●聚合表達式

    ●分組表達式

    ●整數(shù)列上的Star joins

    不管運行中的編碼列不同值的數(shù)量是多少,都可以對編碼數(shù)據(jù)進行優(yōu)化操作。編碼中不同值的數(shù)量越少,優(yōu)化性能越好。這是因為當字典變小時,意味著列存儲數(shù)據(jù)被壓縮到更小的尺寸,進而查找表過程中更容易適配到處理器的高速緩存。

    先舉個查詢例子,它通過使用了幾個包含性能優(yōu)化的組件從而在對編碼數(shù)據(jù)的操作中提升了性能:

    如果再加上一張列式表f,也可以從編碼數(shù)據(jù)的連接操作中得到性能優(yōu)化。查詢示例:

    這個查詢是星型模型Star joins的一個簡單例子。如果用戶使用星型模型Star joins做關聯(lián),并且關聯(lián)鍵是整數(shù)類型,那么查詢就可以在編碼數(shù)據(jù)的操作中得到性能優(yōu)化。簡單說明,這里是使用group by子句和聚合函數(shù)從編碼數(shù)據(jù)的連接操作中加速性能。

    ●再舉個表關聯(lián)的例子:

    這個例子展示了編碼連接的作用:

    后面的關聯(lián)查詢在雙核筆記本電腦上,只需要0.02秒算出結果。 注意了,它是對表r做一百萬行的全表掃描,然后與維表d(110行)做連接。

    通過查看RapidsDB的圖形計劃或者show profile json的結果輸出,可以了解數(shù)據(jù)編碼功能連接正被用于上述語句配置文件的查詢計劃中:在HashJoin運算符上,可以看到屬性"encoded_join_enabled":"yes"。此外,還可以看到對編碼數(shù)據(jù)的操作被推送到ColumnStoreScan列存掃描運算符。ColumnStoreScan、 HashJoin和各種GroupBy運算符可以在掃描過程中通過一個或多個散列連接(hash joins)的序列來共同實現(xiàn)星型連接(star join)。

    ●支持的編碼數(shù)據(jù)

    目前RapidsDB僅對以下情況支持對編碼數(shù)據(jù)的操作:

    ●帶有字符串字典和字符串游程編碼的字符串類型;

    ●具有值和行程編碼的整數(shù)列。

    分組、聚合操作僅支持整數(shù)類型做數(shù)據(jù)編碼。過濾支持字符串和整數(shù)類型做編碼數(shù)據(jù)。

    通常RapidsDB會自動對列存儲數(shù)據(jù)進行編碼。但是,在極少數(shù)情況下,本該自動編碼的操作沒有被編碼數(shù)據(jù)識別到,但對用戶的應用程序來說,這次數(shù)據(jù)編碼優(yōu)化十分重要,則可以通過option ''符號來實現(xiàn),例如:

    ●支持的操作和限制

    對編碼數(shù)據(jù)支持的操作以及對操作的限制做個詳細分類說明:

    ●掃描Scan:

    ●整數(shù)編碼更快解碼

    ●過濾Filter:

    ●下列過濾器:

    ●字符串字典和字符串游程編碼的字符串類型

    ●用于游程編碼的整數(shù)類型

    ●過濾器表達式中的“或”運算;篩選器表達式必須包含單個字符串列,以加快處理速度

    ●支持字符串列上的Bloom篩選器(消除單個字符串列上沒有匹配連接的行)

    ●聚合Aggregates:

    ●支持的聚合:sum, min, max, count, any

    ●支持的聚合數(shù)據(jù)類型:全數(shù)字

    ●支持的聚合表達式:一個表達式中允許有多個表列

    ●支持的聚合編碼:整數(shù)、整數(shù)游程編碼

    ●分組Group-by

    ●沒有分組的聚合(也稱為標量聚合)不會對編碼數(shù)據(jù)執(zhí)行操作

    ●分組計數(shù)啟動非?

    ●分組:

    ●允許有多個分組列

    ●允許混合使用列和表達式

    ●分組列必須僅使用以下編碼:整數(shù)、整數(shù)游程編碼

    ●每列幾千行不同值的數(shù)量有一個限制,超過這個限制,系統(tǒng)將恢復到一次一行的處理,并且行段的數(shù)據(jù)的本地聚合將向父全局聚合運算符輸出行

    ●類似的,對幾千個組的組總數(shù)也有一個限制,超過這個限制就不使用優(yōu)化的分組處理

    ●排序關鍵字上的分組可能不如其他列上的分組高效,因為可以執(zhí)行有序分組,而哈希分組可能更好

    ●分組的表達式:

    ●一個表達式中只允許一個輸入列

    ●表達式結果必須為整數(shù)

    ●在分組列和表達式集中,每個列表只能使用一次

    ●關聯(lián)Joins

    ●連接必須在某種類型的整數(shù)列上,或者在內(nèi)部表示為整數(shù)的另一種列類型上,如datetime

    ●查詢優(yōu)化器選擇的一個或多個連接必須是HashJoin類型

    ●連接必須是多對一的關系

    ●HashJoin(或一些列HashJoin)必須出現(xiàn)在上 ColumnStoreScan

    ●對連接結果的查詢中必須存在按操作分組和聚合

    柏睿數(shù)據(jù)RapidsDB在某國有大行普惠金融項目應用中,對應用開發(fā)人員進行了開發(fā)優(yōu)化建議和幾次針對性查詢優(yōu)化中,就使用了數(shù)據(jù)編碼的方法,取得了明顯的效果:優(yōu)化前后得到5-20倍的效果。

    好了,數(shù)據(jù)編碼我們介紹到這。如果您有疑問或建議,歡迎在后臺留言,我們將針對大家的共性問題,發(fā)布【答疑篇】,互動的同學有機會獲得神秘獎品呦。

    RapidsDB極限性能數(shù)據(jù)庫有何妙處?第二回將開啟“高性能篇—行列混存”解讀。歡迎關注“柏睿數(shù)據(jù)”公眾號,繼續(xù)修煉數(shù)據(jù)庫~

    (新媒體責編:pl0902)

    聲明:

    1、凡本網(wǎng)注明“人民交通雜志”/人民交通網(wǎng),所有自采新聞(含圖片),如需授權轉載應在授權范圍內(nèi)使用,并注明來源。

    2、部分內(nèi)容轉自其他媒體,轉載目的在于傳遞更多信息,并不代表本網(wǎng)贊同其觀點和對其真實性負責。

    3、如因作品內(nèi)容、版權和其他問題需要同本網(wǎng)聯(lián)系的,請在30日內(nèi)進行。電話:010-67683008

    時政 | 交通 | 交警 | 公路 | 鐵路 | 民航 | 物流 | 水運 | 汽車 | 財經(jīng) | 輿情 | 郵局

    人民交通24小時值班手機:17801261553 商務合作:010-67683008轉602 E-mail:zzs@rmjtzz.com

    Copyright 人民交通雜志 All Rights Reserved 版權所有 復制必究 百度統(tǒng)計 地址:北京市豐臺區(qū)南三環(huán)東路6號A座四層

    增值電信業(yè)務經(jīng)營許可證號:京B2-20201704 本刊法律顧問:北京京師(蘭州)律師事務所 李大偉

    京公網(wǎng)安備 11010602130064號 京ICP備18014261號-2  廣播電視節(jié)目制作經(jīng)營許可證:(京)字第16597號