尹人黄色性交网黄曰片毛片|国产一级Av免费观看|曰韩色图视频免费在线黄视频|超碰97在线免费播放|五月情色丁香亭亭|亚洲无码在线大全|国产成人+亚洲+欧洲在线|欧美丰满少妇人妻精品性爱不卡|久草视频免费在线观看免费|日本一黄色网亚洲第一成视频

您的位置:首頁(yè) > 企業(yè)觀察

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

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

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

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

以字典編碼為例,對(duì)于只有3個(gè)不同值的字符串列的一個(gè)段,為每個(gè)字符串存儲(chǔ)一個(gè)2位的ID號(hào),ID號(hào)被用作字典的參考。當(dāng)存儲(chǔ)在列存儲(chǔ)中時(shí),這些ID被緊緊地打包在一起。請(qǐng)參考以下字典:

當(dāng)它被存儲(chǔ)到列段中時(shí),可以表示為打包字符串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)

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

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

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

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

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

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

●過濾器Filters

●分組 Group by

●聚合 Aggregates

●聚合表達(dá)式

●分組表達(dá)式

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

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

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

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

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

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

這個(gè)例子展示了編碼連接的作用:

后面的關(guān)聯(lián)查詢?cè)陔p核筆記本電腦上,只需要0.02秒算出結(jié)果。 注意了,它是對(duì)表r做一百萬(wàn)行的全表掃描,然后與維表d(110行)做連接。

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

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

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

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

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

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

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

●支持的操作和限制

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

●掃描Scan:

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

●過濾Filter:

●下列過濾器:

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

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

●過濾器表達(dá)式中的“或”運(yùn)算;篩選器表達(dá)式必須包含單個(gè)字符串列,以加快處理速度

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

●聚合Aggregates:

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

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

●支持的聚合表達(dá)式:一個(gè)表達(dá)式中允許有多個(gè)表列

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

●分組Group-by

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

●分組計(jì)數(shù)啟動(dòng)非?

●分組:

●允許有多個(gè)分組列

●允許混合使用列和表達(dá)式

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

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

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

●排序關(guān)鍵字上的分組可能不如其他列上的分組高效,因?yàn)榭梢詧?zhí)行有序分組,而哈希分組可能更好

●分組的表達(dá)式:

●一個(gè)表達(dá)式中只允許一個(gè)輸入列

●表達(dá)式結(jié)果必須為整數(shù)

●在分組列和表達(dá)式集中,每個(gè)列表只能使用一次

●關(guān)聯(lián)Joins

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

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

●連接必須是多對(duì)一的關(guān)系

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

●對(duì)連接結(jié)果的查詢中必須存在按操作分組和聚合

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

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

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

(新媒體責(zé)編:pl0902)

聲明:

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

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

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

時(shí)政 | 交通 | 交警 | 公路 | 鐵路 | 民航 | 物流 | 水運(yùn) | 汽車 | 財(cái)經(jīng) | 輿情 | 郵局

人民交通24小時(shí)值班手機(jī):17801261553 商務(wù)合作:010-67683008轉(zhuǎn)602 E-mail:zzs@rmjtzz.com

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

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

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