0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

面向數(shù)據(jù)特征的內(nèi)存跳表優(yōu)化技術(shù)

li1234567890123 ? 來(lái)源:li1234567890123 ? 作者:li1234567890123 ? 2022-02-24 10:02 ? 次閱讀

面向數(shù)據(jù)特征的內(nèi)存跳表優(yōu)化技術(shù)

摘 要:跳表作為數(shù)據(jù)庫(kù)中被廣泛采用的索引技術(shù),優(yōu)點(diǎn)在于可以達(dá)到類(lèi)似折半查找的復(fù)雜度O(log(n)).但是標(biāo)準(zhǔn)跳表算法中,結(jié)點(diǎn)的層數(shù)是通過(guò)隨機(jī)算法生成的,這就導(dǎo)致跳表的性能是不穩(wěn)定的.在極端情況下,查找復(fù)雜度會(huì)退化到O(n).這是因?yàn)榻?jīng)典跳表結(jié)構(gòu)沒(méi)有結(jié)合數(shù)據(jù)的特征.一個(gè)穩(wěn)定的跳表結(jié)構(gòu)應(yīng)該充分考慮數(shù)據(jù)的分布特征去決定結(jié)點(diǎn)層數(shù).基于核密度估計(jì)的方式估計(jì)數(shù)據(jù)累積分布函數(shù),預(yù)測(cè)數(shù)據(jù)在跳表中的位置,進(jìn)而設(shè)計(jì)用于判定結(jié)點(diǎn)層數(shù)的跳表算法.另外,跳表的查找過(guò)程中,結(jié)點(diǎn)層數(shù)越大的結(jié)點(diǎn)被訪問(wèn)的概率越高.針對(duì)歷史數(shù)據(jù)的訪問(wèn)頻次,設(shè)計(jì)一種保證頻繁訪問(wèn)的“熱”數(shù)據(jù)盡可能地在跳表的上層,而訪問(wèn)較少的“冷”數(shù)據(jù)在跳表的下層的跳表算法.最后,基于合成數(shù)據(jù)和真實(shí)數(shù)據(jù)對(duì)標(biāo)準(zhǔn)跳表和5 種改進(jìn)的跳表算法進(jìn)行了全面的實(shí)驗(yàn)評(píng)估并開(kāi)源代碼.實(shí)驗(yàn)結(jié)果表明,優(yōu)化的跳表最高可以獲取60%的性能提升.這為未來(lái)的科研工作者和系統(tǒng)開(kāi)發(fā)人員指出了一個(gè)很好的方向.

近年來(lái),伴隨著移動(dòng)互聯(lián)網(wǎng)和大數(shù)據(jù)的熱潮,行業(yè)對(duì)數(shù)據(jù)處理能力,尤其是在線聯(lián)機(jī)事務(wù)處理能力(OLTP)提出了更高的要求.一個(gè)比較典型的案例是在2019 年的“雙十一”,阿里巴巴當(dāng)天創(chuàng)下了6100 萬(wàn)次/s 處理峰值的紀(jì)錄(https://developer.aliyun.com/article/727517).如此巨大的數(shù)據(jù)處理能力,與阿里自研數(shù)據(jù)庫(kù)OceanBase[1]息息相關(guān)的.在摩爾定律的作用下,計(jì)算機(jī)硬件(多核、大內(nèi)存、固態(tài)硬盤(pán)等)的性能一直在快速發(fā)展,這很大程度上促進(jìn)了數(shù)據(jù)庫(kù)得以支撐類(lèi)似“雙十一”這種高吞吐率的應(yīng)用.典型地,計(jì)算機(jī)處理器的性能從單方面提高頻率轉(zhuǎn)向增加核心數(shù)的方向轉(zhuǎn)變.為了適配新硬件的特性及最大限度地發(fā)揮硬件的性能,數(shù)據(jù)庫(kù)領(lǐng)域很多模塊都要針對(duì)性地進(jìn)行適配.索引技術(shù)作為數(shù)據(jù)庫(kù)存儲(chǔ)層的核心,同樣需要提出適配.跳表(Skiplist[2])是數(shù)據(jù)庫(kù)領(lǐng)域的一個(gè)重要索引技術(shù),它具有結(jié)構(gòu)簡(jiǎn)單、易于實(shí)現(xiàn)、無(wú)鎖并發(fā)、O(log(n))的查找復(fù)雜度等優(yōu)點(diǎn),因此在LevelDB,MemSQL,Redis 等數(shù)據(jù)庫(kù)中都有廣泛應(yīng)用.

跳表是基于線性鏈表改進(jìn)而來(lái)的.傳統(tǒng)的鏈表中,每個(gè)結(jié)點(diǎn)只包含一個(gè)結(jié)點(diǎn)指針域,而跳表的每個(gè)基礎(chǔ)結(jié)點(diǎn)包含多個(gè)指針域.圖1 是理想情況下的跳表示意圖,水平方向來(lái)看,每一層都是單向鏈表,而且越往上的層級(jí),結(jié)點(diǎn)越稀疏,跳表通過(guò)維護(hù)每個(gè)結(jié)點(diǎn)的層數(shù),保證每層結(jié)點(diǎn)個(gè)數(shù)都比下一層大致減半.跳表的查找操作是從最上層結(jié)點(diǎn)依次往下縮小查找區(qū)間,過(guò)程類(lèi)似于折半查找.對(duì)于跳表的插入操作,先根據(jù)待插入key 查找到待插入的位置,然后算法通過(guò)隨機(jī)算法確定結(jié)點(diǎn)的層數(shù),再插入結(jié)點(diǎn).假設(shè)結(jié)點(diǎn)key 的層數(shù)為3,則維護(hù)下三層鏈表的指針.第1.1 節(jié)將對(duì)跳表做詳細(xì)介紹.

Fig.1 Example of skiplist in ideal case

圖1 理想情況的跳表示例

但我們認(rèn)為,跳表不是一個(gè)穩(wěn)定的數(shù)據(jù)結(jié)構(gòu).計(jì)算機(jī)科學(xué)中,經(jīng)典的不穩(wěn)定的數(shù)據(jù)結(jié)構(gòu)是二叉查找樹(shù).二叉樹(shù)的特性只需要保證左小右大的特質(zhì),一旦數(shù)據(jù)從小到大依次插入二叉樹(shù),二叉樹(shù)便退化為線性表,此時(shí)的查找復(fù)雜度也從O(log(n))退化到O(n).因此提出了平衡二叉樹(shù),通過(guò)左旋和右旋操作,改進(jìn)了二叉樹(shù)的穩(wěn)定性.

跳表結(jié)構(gòu)的查找時(shí)間是通過(guò)多層鏈表指針域達(dá)到加速的效果.但跳表的層數(shù)隨機(jī)算法導(dǎo)致它不是一個(gè)穩(wěn)定的結(jié)構(gòu),具體來(lái)說(shuō),包含以下兩點(diǎn)挑戰(zhàn).

·數(shù)據(jù)偏斜.跳表的優(yōu)點(diǎn)在于可以達(dá)到類(lèi)似折半查找的復(fù)雜度O(log(n)),但是跳表的層數(shù)是通過(guò)隨機(jī)算法生成的,這會(huì)導(dǎo)致性能的不穩(wěn)定.在極端情況下,會(huì)生成類(lèi)似于圖2 的跳表結(jié)構(gòu),此時(shí)的查找復(fù)雜度等價(jià)于鏈表的查找復(fù)雜度(都是O(n)),跳表的優(yōu)點(diǎn)便不復(fù)存在了.這主要是因?yàn)樘淼碾S機(jī)生成層數(shù)的算法并沒(méi)有結(jié)合數(shù)據(jù)特征去生成跳表結(jié)構(gòu).我們認(rèn)為,一個(gè)穩(wěn)定的跳表結(jié)構(gòu)應(yīng)該充分考慮數(shù)據(jù)的分布特征,在插入key 的同時(shí),根據(jù)分布特征去決定層數(shù),而不是隨機(jī)生成;

·熱度數(shù)據(jù).我們發(fā)現(xiàn),跳表的查找過(guò)程中,結(jié)點(diǎn)層數(shù)越大的結(jié)點(diǎn)被訪問(wèn)的概率越高.比如圖1 中,查找結(jié)點(diǎn)8,直接在第1 層便找到了,便不需要繼續(xù)一直下沉操作了.這促使我們可以充分考慮熱度數(shù)據(jù)的特征,讓熱度數(shù)據(jù)的層數(shù)盡可能高,訪問(wèn)效率便更快一些.

Fig.2 Example of skiplist in worst case

圖2 最壞情況的跳表示例

本文的貢獻(xiàn)如下:

·基于數(shù)據(jù)分布估計(jì)的跳表結(jié)構(gòu).本文基于核密度估計(jì)的方式去估計(jì)數(shù)據(jù)集合的累積分布函數(shù),進(jìn)一步預(yù)測(cè)數(shù)據(jù)在跳表中的位置和結(jié)點(diǎn)層數(shù),從而達(dá)到跳表查找性能的優(yōu)化目的;

·基于冷熱數(shù)據(jù)分層的跳表結(jié)構(gòu).本文針對(duì)歷史數(shù)據(jù)的訪問(wèn)頻次信息,設(shè)計(jì)了一種冷熱分層的跳表算法,對(duì)頻繁訪問(wèn)的熱度數(shù)據(jù)保證盡可能的在跳表的上層,而訪問(wèn)較少的冷數(shù)據(jù)在跳表的下層,從而保證熱度數(shù)據(jù)訪問(wèn)加速的效果;

·跳表選型.本文基于合成數(shù)據(jù)和真實(shí)數(shù)據(jù)對(duì)標(biāo)準(zhǔn)跳表和5 種改進(jìn)的跳表算法進(jìn)行了全面的實(shí)驗(yàn)評(píng)估并開(kāi)源代碼.實(shí)驗(yàn)結(jié)果表明,優(yōu)化的跳表最高可以獲取60%的性能提升.

本文第1 節(jié)對(duì)跳表和密度估計(jì)進(jìn)行全面的介紹.第2 節(jié)對(duì)相關(guān)工作進(jìn)行總結(jié).第3 節(jié)根據(jù)數(shù)據(jù)分布特征進(jìn)行跳表算法的優(yōu)化設(shè)計(jì).第4 節(jié)根據(jù)熱度數(shù)據(jù)特征對(duì)跳表進(jìn)行優(yōu)化算法設(shè)計(jì).第5 節(jié)通過(guò)合成和真實(shí)數(shù)據(jù)集對(duì)上述算法進(jìn)行實(shí)驗(yàn)驗(yàn)證.第6 節(jié)對(duì)全文進(jìn)行總結(jié),并提出對(duì)未來(lái)工作的設(shè)想.

1 預(yù)備知識(shí)

本節(jié)將完整介紹跳表的概念和基本操作,然后討論標(biāo)準(zhǔn)跳表算法所遇到的問(wèn)題.

1.1 跳 表

跳表從結(jié)構(gòu)上可以看成多層鏈表結(jié)構(gòu).它的結(jié)點(diǎn)結(jié)構(gòu)和鏈表的結(jié)點(diǎn)結(jié)構(gòu)很相似,不同的是,鏈表結(jié)點(diǎn)除了數(shù)據(jù)域之外只包含一個(gè)next 指針域,而跳表結(jié)點(diǎn)包含多個(gè)指針域.每個(gè)結(jié)點(diǎn)所包含的指針個(gè)數(shù)(層數(shù))是可變的.跳表結(jié)點(diǎn)一旦被創(chuàng)建,指針個(gè)數(shù)便確定.多個(gè)指針域按照“層”的方式,維護(hù)多個(gè)單向鏈表.通過(guò)隨機(jī)函數(shù)(幾何分布)控制每個(gè)結(jié)點(diǎn)的指針個(gè)數(shù)(層數(shù)),從而保證每一層的“鏈表”個(gè)數(shù)依次減半.因此,跳表是一種隨機(jī)性算法.

算法1 闡述了標(biāo)準(zhǔn)跳表中的隨機(jī)生成層數(shù)的算法.原理相當(dāng)于做一次拋硬幣的(伯努利實(shí)驗(yàn))實(shí)驗(yàn),統(tǒng)計(jì)首次拋出反面的次數(shù).如果遇到正面繼續(xù)拋,遇到反面則停止,用實(shí)驗(yàn)中拋硬幣的次數(shù)K 作為結(jié)點(diǎn)的層數(shù).顯然,隨機(jī)變量K 服從參數(shù)p=1/2 的幾何分布.K 的期望值E[K]=1/p=2.也就是說(shuō),跳表中元素的平均層數(shù)為2 層,包含N 個(gè)元素的跳表的指針域個(gè)數(shù)大致為2n 個(gè).

算法1.基于伯努利實(shí)驗(yàn)的跳表層數(shù)決策算法.

數(shù)據(jù)庫(kù)索引一般需要提供3 種訪問(wèn)操作:查找、插入、刪除.跳表的查找操作是從最上層開(kāi)始查找,依次按照范圍往下查找,直到最下面一層為止.如圖3 所示,假設(shè)我們要查找結(jié)點(diǎn)7.首先,我們從最上第4 層開(kāi)始找到結(jié)點(diǎn)1,然后下沉到第3 層,依次查找到結(jié)點(diǎn)6;再下沉到第2 層,查找到結(jié)點(diǎn)11,發(fā)現(xiàn)7 小于11,回退到結(jié)點(diǎn)6;然后再下沉到第1 層,繼續(xù)查找結(jié)點(diǎn)7.如果在第1 層還沒(méi)有找到,則返回不存在該結(jié)點(diǎn).數(shù)據(jù)查找的時(shí)間復(fù)雜度為O(log(n)),其中,n 為跳表中數(shù)據(jù)元素的個(gè)數(shù).

Fig.3 Example of searching node 7

圖3 查找結(jié)點(diǎn)7 的示例

跳表的插入操作主要包含3 個(gè)步驟:首先,通過(guò)類(lèi)似查找的算法找到待插入的元素,并記錄出查找過(guò)程中的下沉結(jié)點(diǎn);然后,采用上面的隨機(jī)算法決定層數(shù),分配結(jié)點(diǎn);最后,在每一層上修改插入結(jié)點(diǎn)的后繼指針和下沉結(jié)點(diǎn)的后繼指針.比如圖4,假設(shè)我們要插入結(jié)點(diǎn)8,先通過(guò)查找操作,記錄圖中的結(jié)點(diǎn),確定結(jié)點(diǎn)8 的待插入位置;第2 步,假設(shè)根據(jù)算法1 生成結(jié)點(diǎn)8 的層數(shù)為2;最后,把圖中指針域和結(jié)點(diǎn)8 的指針域修改正確.數(shù)據(jù)插入的復(fù)雜度為O(log(n)).跳表的刪除操作是類(lèi)似于插入操作的逆操作,先查找到結(jié)點(diǎn),然后修改指針域.圖5 展示了刪除結(jié)點(diǎn)2 的過(guò)程.數(shù)據(jù)刪除的復(fù)雜度也為O(log(n)).

Fig.4 Example of insert node 8 in skiplist

圖4 插入結(jié)點(diǎn)8 的示例

Fig.5 Example of delete node 2 in skiplist

圖5 刪除結(jié)點(diǎn)2 的示例

1.2 數(shù)據(jù)分布估計(jì)

在數(shù)據(jù)庫(kù)領(lǐng)域,系統(tǒng)在運(yùn)行過(guò)程中通常需要基于歷史運(yùn)行數(shù)據(jù)分析出數(shù)據(jù)的分布特征,這有利于加速或優(yōu)化數(shù)據(jù)處理.比如,數(shù)據(jù)庫(kù)管理系統(tǒng)的查詢(xún)優(yōu)化器模塊需要采用直方圖的方式進(jìn)行統(tǒng)計(jì)數(shù)據(jù)分布情況,這部分?jǐn)?shù)據(jù)通常被記錄在數(shù)據(jù)字典內(nèi).直方圖一般分為等寬直方圖和等高直方圖,但直方圖的數(shù)據(jù)還不足夠細(xì)致.

人工智能領(lǐng)域,可以借助機(jī)器學(xué)習(xí)的手段進(jìn)行密度函數(shù)估計(jì)(PDF)和累計(jì)分布函數(shù)(CDF)的估計(jì).對(duì)于密度估計(jì)的手段,可以分為兩類(lèi):一類(lèi)是參數(shù)估計(jì),需要假設(shè)數(shù)據(jù)服從特定的分布,然后估計(jì)分布的參數(shù);另一類(lèi)是無(wú)參數(shù)估計(jì)(非監(jiān)督學(xué)習(xí)),包含直方圖估計(jì)、核函數(shù)估計(jì)、k 最近鄰估計(jì)和神經(jīng)網(wǎng)絡(luò)估計(jì)等.下文我們簡(jiǎn)單介紹一種實(shí)用的技術(shù):核函數(shù)估計(jì).

假定隨機(jī)變量x∈R,概率密度函數(shù)為f(x).需要在給定的一組x 的隨機(jī)樣本x1,x2,x3,…,xn∈R 的基礎(chǔ)上,計(jì)算f(x)的一個(gè)估計(jì)

需要充分接近真實(shí)的f(x).核函數(shù)估計(jì)基于所有的樣本信息計(jì)算近似密度函數(shù):

其中,n 表示樣本的數(shù)量的個(gè)數(shù),h 為帶寬,φ(x)被稱(chēng)為核函數(shù).核函數(shù)需要滿足下述4 個(gè)性質(zhì).

(1)對(duì)稱(chēng)性:φ(u)=φ(?u);

(2)標(biāo)準(zhǔn)化:

(3)遞減性:φ′(x)當(dāng)u>0;

(4)期望為0:E(φ)=0.

常見(jiàn)的核函數(shù)包括高斯、余弦、均勻、三角形等.對(duì)于累計(jì)分布函數(shù)的估計(jì),可以對(duì)公式(1)求積分得到.

2 相關(guān)工作

下面分3 個(gè)方向介紹和本文直接相關(guān)的工作.

·索引技術(shù).

在過(guò)去的幾十年中,已經(jīng)提出了各種不同的索引結(jié)構(gòu)[3],例如基于磁盤(pán)的B+樹(shù)[4]和面向內(nèi)存系統(tǒng)的T 樹(shù)[5]以及平衡/紅黑樹(shù)[6,7].由于原始內(nèi)存索引結(jié)構(gòu)具有較差的緩存命中率,因此提出了針對(duì)緩存優(yōu)化的B+樹(shù)變體,例如CSB+樹(shù)[8],它能夠通過(guò)使用偏移量而不是結(jié)點(diǎn)之間的指針來(lái)定位數(shù)據(jù).此外,最新的工作還有采用SIMD 指令(比如FAST[9])或GPU[9?11]優(yōu)化數(shù)據(jù)庫(kù)索引的技術(shù).對(duì)于字符串的索引結(jié)構(gòu)也有大量的研究,例如字典樹(shù)/前綴樹(shù)[12?15].此外,還有針對(duì)索引存儲(chǔ)空間進(jìn)行優(yōu)化設(shè)計(jì)的索引結(jié)構(gòu),如wavelet 樹(shù)[16,17]等.跳表[2]具有與樹(shù)型索引大致相同的平均搜索復(fù)雜度,但跳表的實(shí)現(xiàn)難度小很多.即便是lock-free 的跳表實(shí)現(xiàn),通過(guò)使用CAS 指令可以很容易地實(shí)現(xiàn)跳表[18],而這對(duì)于B+樹(shù)來(lái)說(shuō)是非常困難的.Abraham 等人[19]結(jié)合跳表和B 樹(shù)來(lái)進(jìn)行有效的查詢(xún)處理.

·密度估計(jì).

對(duì)于數(shù)據(jù)分布的估計(jì),最簡(jiǎn)單直接的方式是通過(guò)直方圖統(tǒng)計(jì)(https://en.wikipedia.org/wiki/Histogram),直方圖雖然簡(jiǎn)單,但被廣泛應(yīng)用在數(shù)據(jù)庫(kù)查詢(xún)優(yōu)化系統(tǒng)中[20].核密度估計(jì)法[21]可以用來(lái)估計(jì)未知的密度函數(shù),屬于非參數(shù)檢驗(yàn)方法之一,由Rosenblatt 和Parzen 提出,又叫Parzen 窗(Parzen window).基本原理和直方圖有些類(lèi)似,是一種平滑的無(wú)參數(shù)密度估計(jì)法.在機(jī)器學(xué)習(xí)社區(qū)中對(duì)密度估計(jì)也進(jìn)行了大量研究[22?25].還有基于深度學(xué)習(xí)的DeepNADE 密度估計(jì)[26].密度估計(jì)可以應(yīng)用于排名[27].如何最有效地模擬CDF,仍然是一個(gè)值得進(jìn)一步研究的問(wèn)題.

·智能數(shù)據(jù)庫(kù)技術(shù).

對(duì)于借助機(jī)器學(xué)習(xí)的方法優(yōu)化數(shù)據(jù)處理的技術(shù)由來(lái)已久,我們主要列舉3 個(gè)類(lèi)別的代表性工作:

(1)比較有代表性的工作是SIGMOD 18 上,Dean 等人[28]開(kāi)創(chuàng)性的手段借助機(jī)器學(xué)習(xí)的技術(shù)優(yōu)化B+樹(shù)的存儲(chǔ)空間和hash 索引的沖突問(wèn)題,提出了learned index 的概念.本文繼承同樣的思想,結(jié)合跳表的數(shù)據(jù)結(jié)構(gòu)對(duì)跳表進(jìn)行優(yōu)化.自Google 之后,2019 年出現(xiàn)了大量的關(guān)于learned index 的研究[29].Galakatos 等人提出了FITing-Tree[29],可以在查詢(xún)精度和存儲(chǔ)空間之間達(dá)到平衡.Ding 等人[30]提出了ALEX 索引,進(jìn)一步對(duì)learned index 在動(dòng)態(tài)數(shù)據(jù)集上進(jìn)行優(yōu)化.Wu[31]針對(duì)二級(jí)索引設(shè)計(jì)了Succinct 類(lèi)索引;

(2)Pavlo[32]和Chaudhuri[33]提出了人工智能的方法還可以用于優(yōu)化數(shù)據(jù)庫(kù)運(yùn)維的難度,降低DBA 的難度.代表性工作主要是卡耐基梅隆大學(xué)提出的OtterTune[34]和阿里巴巴達(dá)摩院的iBTune[35],iBTune 被大規(guī)模應(yīng)用在阿里巴巴線上系統(tǒng)中,主要用于數(shù)據(jù)庫(kù)緩存大小的自動(dòng)設(shè)置;

(3)另外,在數(shù)據(jù)挖掘領(lǐng)域存在大量采用機(jī)器學(xué)習(xí)的手段學(xué)習(xí)位置敏感的哈希函數(shù)用于構(gòu)建近似最近鄰索引的工作,例如文獻(xiàn)[36,37].

3 基于數(shù)據(jù)分布的跳表

本節(jié)首創(chuàng)性地采用數(shù)據(jù)分布特征去優(yōu)化跳表結(jié)構(gòu),接下來(lái)我們將介紹3 個(gè)優(yōu)化算法.

3.1 Cdf-list

跳表是一種有序結(jié)構(gòu),對(duì)于給定的key 在跳表中的排序位置location 和數(shù)據(jù)的分布特征有很直接的關(guān)聯(lián).已知數(shù)據(jù)累計(jì)分布函數(shù)的情況下,對(duì)于包含N 個(gè)元素的數(shù)據(jù)集,元素key 和key 的位置location 滿足公式(2):

當(dāng)插入key 的時(shí)候,我們通過(guò)核密度估計(jì)的方式估計(jì)出數(shù)據(jù)的累計(jì)分布函數(shù)

,公式(3)可以預(yù)判key 所在的位置

估計(jì):

一旦可以估計(jì)key 的位置,可以通過(guò)位置信息決定層數(shù),而不只是通過(guò)簡(jiǎn)單的random 方式.

算法2 陳述了基于CDF 信息計(jì)算key 層數(shù)的cdf-list 算法.

算法2.cdf-list 的層數(shù)決策算法.

與算法1 中random 的方式相比,算法2 充分利用了數(shù)據(jù)的分布特征.算法2 的輸入為數(shù)據(jù)集個(gè)數(shù)N、數(shù)據(jù)集的累積分布函數(shù)CDF、待插入的key.輸出為待插入key 的層數(shù)level.首先,通過(guò)公式(3)計(jì)算出待插入key 在跳表中從小到大的排序位置location(第2 行),注意:如果location 的結(jié)果為小數(shù),需要向上取整.為了創(chuàng)建出類(lèi)似于圖1 的跳表結(jié)構(gòu),處在不同location 的key 的高度是可以被計(jì)算的(第3 行~第10 行).理想情況下,跳表中高度大于等于2 的key 對(duì)應(yīng)的位置應(yīng)該是21 的倍數(shù),高度大于等于3 的key 對(duì)應(yīng)的位置應(yīng)該是22 的倍數(shù),依此類(lèi)推,高度大于等于k+1 的key 對(duì)應(yīng)的高度應(yīng)該是2k 的倍數(shù).根據(jù)位置判定層數(shù),實(shí)際上是通過(guò)判定location 的二進(jìn)制數(shù)字的末尾有幾個(gè)零:如果有k 個(gè)零,那么高度則為k+1.例如,處在第8(二進(jìn)制1000)個(gè)位置的數(shù)據(jù)高度應(yīng)該是4層.下面用一個(gè)例子對(duì)跳表創(chuàng)建過(guò)程進(jìn)行說(shuō)明.

例1:為便于理解,這里我們假設(shè)數(shù)據(jù)服從均勻分布,數(shù)據(jù)集是包含12 個(gè)元素的集合(真實(shí)數(shù)據(jù)集會(huì)很大).數(shù)據(jù)集為{5,4,3,2,1,6,7,8,9,10,12,11}.初始時(shí),cdf-list 為空,插入元素5 的時(shí)候,雖然當(dāng)前并沒(méi)有插入1,2,3,4 這4 個(gè)結(jié)點(diǎn),但可以預(yù)判元素5 的位置.因?yàn)樵? 的cdf 值為5/12,元素5 應(yīng)該所處的位置為5(二進(jìn)制101),對(duì)應(yīng)的跳表高度為1.依此類(lèi)推,可以創(chuàng)建出接近于圖1 所示的跳表結(jié)構(gòu).

3.2 Bound-list

公式(3)對(duì)于location 的估計(jì)會(huì)存在誤差,因?yàn)槔塾?jì)分布函數(shù)的估計(jì)存在偏差.這可能會(huì)導(dǎo)致多個(gè)連續(xù)的key判定到同一個(gè)location,從而多個(gè)連續(xù)的key 的高度會(huì)相同.如圖6 所示:比如說(shuō)數(shù)據(jù)中元素7,8,9 的location 估計(jì)的都是8,這就導(dǎo)致判定的高度都為4,這樣的結(jié)構(gòu)在查詢(xún)過(guò)程中是不合理的.

Fig.6 Unsuited structure caused by CDF error

圖6 CDF 誤差導(dǎo)致的不合理結(jié)構(gòu)

為了容忍位置估計(jì)的誤差,我們提出了容忍偏差的算法.首先,我們采用一個(gè)長(zhǎng)度為N 的數(shù)組,該數(shù)組預(yù)先記錄理想情況下每個(gè)位置的元素的高度.算法3 給出了數(shù)組的創(chuàng)建過(guò)程.算法的輸入是數(shù)據(jù)集的大小N,輸出為location 和層數(shù)的映射數(shù)組level_array.對(duì)于包含N 個(gè)元素的數(shù)據(jù)集,首先分配一個(gè)N+1 大小的數(shù)組(第2 行),并初始化為0(第3 行).注意,level_array[0]代表的是head 頭結(jié)點(diǎn).初始設(shè)置步長(zhǎng)為1(第4 行),將level_array 中每個(gè)元素累計(jì)加1(第6 行~第8 行).然后步長(zhǎng)step 變?yōu)?,偶數(shù)位置的level_array 數(shù)值加1.依此類(lèi)推,step 每次乘以2(第9 行),直到step

算法3.構(gòu)造bound-list 的層數(shù)數(shù)組.

例如包含12 個(gè)元素的數(shù)據(jù)集,構(gòu)建的level_array 數(shù)組為{4,1,2,1,3,1,2,1,4,1,2,1,3}.我們可以看到,level_array 數(shù)組和圖1 對(duì)應(yīng)的跳表每個(gè)結(jié)點(diǎn)的高度一一對(duì)應(yīng).其中,level_array[0]=4 代表的是head 頭結(jié)點(diǎn).然后引入額外的bound,每次高度選取時(shí),我們結(jié)合判定位置前后的bound 區(qū)間內(nèi)選取最大的level 作為最終值.算法4 給出了具體的細(xì)節(jié).

算法4.容忍CDF 估計(jì)誤差的層數(shù)決策算法.

算法4 與算法2 類(lèi)似,都是根據(jù)cdf 值決定待插入key 的層數(shù).不同的是,算法4 結(jié)合bound 區(qū)間去判定層數(shù),容忍了估計(jì)導(dǎo)致的誤差.算法4 的輸入是數(shù)據(jù)集個(gè)數(shù)N、數(shù)據(jù)估計(jì)出的累計(jì)分布函數(shù)cdf、待插入的key 和誤差限bound 以及算法3 生成的數(shù)組level_array.算法的輸出是待插入key 的層數(shù).首先,根據(jù)估計(jì)的cdf 值估計(jì)出key在跳表中的位置(第 2 行).location 的位置并不是精確的,第 3 行、第 4 行計(jì)算一個(gè) location 的區(qū)間[lower_bound,upper_bound].然后,通過(guò)在level_array 數(shù)組的區(qū)間[lower_bound,upper_bound]中選取最大值作為待插入key 的level,并把這個(gè)最大值所在數(shù)組位置的值設(shè)置為1,從而保證在插入附近連續(xù)的key 時(shí),key 的高度不一樣.

例2:類(lèi)似于例1 的均勻數(shù)據(jù)集為{5,4,3,2,1,6,7,8,9,10,12,11}.初始時(shí),bound-list 為空,通過(guò)算法3 構(gòu)建出level_array.構(gòu)建的level_array 數(shù)組為{4,1,2,1,3,1,2,1,4,1,2,1,3}.插入元素5 的時(shí)候,預(yù)判元素5 的cdf 值為5/12,元素5 應(yīng)該所處的位置為5.假設(shè)bound 為1,則我們從level_array[5?1]到level_array[5+1]之間選取最大值3,即get_level(5)=3.插入5 之后,需要修改層數(shù)數(shù)組為

.接著插入元素4,預(yù)判l(wèi)ocation 為4,結(jié)合bound,對(duì)應(yīng)層數(shù)為1.依此類(lèi)推,插入跳表中所有結(jié)點(diǎn).

3.3 Partition-list

Cdf-list 和bound-list 需要提前知道數(shù)據(jù)集的大小,對(duì)于數(shù)據(jù)集大小未知的情況下,我們提出了partition-list.Partition-list 把數(shù)據(jù)集2p?1 等分.可以通過(guò)下述公式判定key 屬于哪個(gè)分區(qū):

類(lèi)似bound-list 的方式,我們通過(guò)調(diào)用算法3 的函數(shù)build_array(2p?1)構(gòu)建長(zhǎng)度為2p的partition_array 數(shù)組.Partition-list的偽代碼如算法5.

算法5.Partition-list 的層數(shù)決策算法.

算法5 首先將partition-list 劃分成2p?1 個(gè)partition,插入key 時(shí),第1 個(gè)落入某個(gè)parition 的key1 的層數(shù)采用level_array 去決策(第4 行).若新插入的key2 落入key1 所屬的同樣的partition,則需要算法1 類(lèi)似的隨機(jī)方法計(jì)算層數(shù)(第7 行).算法能夠保證最上面的p 層,在每一個(gè)partition 里都有唯一的key,并且最上面p 層的key的高度和分布基本類(lèi)似于圖1 的理想狀況.

例3:數(shù)據(jù)集為{6,7,8,9,10,5,4,3,2,1,14,13,12,11}.初始時(shí),partition-list 為空,最大高度為6.假設(shè)p=3,我們把數(shù)據(jù)集分成23?1 個(gè)分區(qū).當(dāng)key=6 時(shí),partition=3,對(duì)應(yīng)的高度get_level(5)=1+(6?3)=4.當(dāng)key=5 時(shí),此時(shí)partition=3,partition3 內(nèi)已經(jīng)有一個(gè)高度大于3 的key,所以key=5 對(duì)應(yīng)的高度應(yīng)該通過(guò)random_level(3)生成一個(gè)高度不大于3 的層數(shù),如圖7 所示.

Fig.7 Example of partition-based skiplist

圖7 基于分區(qū)的跳表示例

4 結(jié)合訪問(wèn)熱度的跳表

4.1 Hot-list

數(shù)據(jù)庫(kù)key 的查找過(guò)程中,我們是需要從上層結(jié)點(diǎn)依次向下層結(jié)點(diǎn)搜索查找的過(guò)程.引言部分指出,結(jié)點(diǎn)層數(shù)高的結(jié)點(diǎn),查找的效率相對(duì)比結(jié)點(diǎn)低的結(jié)點(diǎn)要高.基于此,我們?cè)O(shè)計(jì)了一套針對(duì)熱度數(shù)據(jù)優(yōu)化的跳表hot-list.

我們根據(jù)歷史數(shù)據(jù)的訪問(wèn)頻率,把數(shù)據(jù)集中訪問(wèn)頻率較高的2h?1 個(gè)數(shù)據(jù)判定為熱度數(shù)據(jù).我們通過(guò)算法6,想構(gòu)建一個(gè)最上面h層都是熱數(shù)據(jù),maxlevel?h 層及以下層級(jí)的都是冷數(shù)據(jù).

算法6.Hot-list 的層數(shù)決策算法.

算法6 的輸入是待插入的key 和參數(shù)h,總體依然是采用level 的random 方案.但我們對(duì)key 做了一個(gè)分層.熱度數(shù)據(jù)的層數(shù)高度都在高層(第2 行、第3 行),冷數(shù)據(jù)都在下層(第4 行~第6 行).通過(guò)上述代碼,仍然可以保持每層從下往上依次減半的規(guī)律.并且h層以下都是冷數(shù)據(jù),h 層以上都是熱度數(shù)據(jù).

例4:類(lèi)似于例1 的均勻數(shù)據(jù)集為{5,4,3,2,1,6,7,8,9,10,12,11}.初始時(shí),hot-list 為空,最大高度為6.假設(shè)1,2,3,4,5 這5 個(gè)key 被頻繁訪問(wèn),也就是屬于熱度數(shù)據(jù).我們?cè)O(shè)置h 為3,對(duì)于1,2,3,4,5 這幾個(gè)key,我們采用第3 行代碼的方式創(chuàng)建層數(shù)level,level 一定大于3.對(duì)于其他的key,用第5 行的方式創(chuàng)建level,層數(shù)肯定不大于3.這就保證熱度數(shù)據(jù)層數(shù)大于等于3,冷數(shù)據(jù)小于等于3.加速熱度數(shù)據(jù)的訪問(wèn).

4.2 Mix-list

上述算法partition-list 和hot-list 可以結(jié)合優(yōu)化成下述算法7,同時(shí),結(jié)合partition 方案和冷熱分層的方案進(jìn)行設(shè)計(jì),原理類(lèi)似便不展開(kāi)介紹.原則上,bound-list 同樣可以和hot-list 進(jìn)行方案結(jié)合,但我們認(rèn)為,partition-list的適用性比bound-list 要好(bound-list 需要知道數(shù)據(jù)集的大小),因此我們只考慮partition-list 和hot-list 結(jié)合的方案.

算法7.基于數(shù)據(jù)分布和熱度的層數(shù)決策算法.

4.3 總結(jié)對(duì)比

表1 對(duì)上述算法進(jìn)行總結(jié).標(biāo)準(zhǔn)跳表雖然需要的信息少,適用范圍廣,但卻不夠穩(wěn)定.cdf-list 和bound-list 可以基于估計(jì)的CDF 信息以及數(shù)據(jù)集大小去判定層數(shù).但是它們需要提前對(duì)數(shù)據(jù)集大小,削減了應(yīng)用的范圍.partition-list 只需要估計(jì)CDF 函數(shù)便可以使用,對(duì)參數(shù)p 的設(shè)置需要進(jìn)一步評(píng)估.hot-list 結(jié)合數(shù)據(jù)的冷熱信息進(jìn)行判定層數(shù),參數(shù)h 同樣會(huì)影響性能.mix-list 是partition-list和hot-list 的結(jié)合.

Table 1 Summary of algorithms

表1 算法對(duì)比總結(jié)

5 實(shí)驗(yàn)及分析

5.1 硬件環(huán)境

本文的實(shí)驗(yàn)基于刀片式HP ProLiant DL380p Gen8 服務(wù)器進(jìn)行性能評(píng)估.服務(wù)器搭配的處理器為E5-2620,搭載15MB 三級(jí)緩存,內(nèi)存為256GB 的DDR4.運(yùn)行系統(tǒng)為CentOS 7 x86_64(linux 3.10).跳表基于C++實(shí)現(xiàn),g++4.8.5 編譯,采用CLion 2019.1 開(kāi)發(fā),Googletest 進(jìn)行單元測(cè)試,Spdlog 進(jìn)行日志打印,實(shí)現(xiàn)代碼開(kāi)源在“碼云”平臺(tái)(https://gitee.com/bombel/cdf_skiplist).本節(jié)首先對(duì)基于CDF 優(yōu)化的算法(skiplist,cdf-list,bound-list,partition-list)進(jìn)行性能評(píng)測(cè),然后針對(duì)熱度數(shù)據(jù)優(yōu)化的算法(skiplist,hot-list,mix-list)進(jìn)行測(cè)評(píng).默認(rèn)情況下,partition-list 中的p=13,hot-list 中的h=20.

5.2 測(cè)試數(shù)據(jù)集

不同分布的數(shù)據(jù)集對(duì)CDF 的特征有很明顯的影響,本文首先針對(duì)不同分布下的合成數(shù)據(jù)集進(jìn)行性能評(píng)估,包括均勻分布、正態(tài)分布、齊夫分布.具體介紹如下.

(1)均勻分布:我們基于均勻分布隨機(jī)數(shù)生成器生成測(cè)試數(shù)據(jù)集.為了反映數(shù)據(jù)集大小對(duì)不同跳表的性能影響,分別生成包含215,218,221,224 個(gè)鍵值對(duì)的數(shù)據(jù)集,其中,key 和value 都是浮點(diǎn)數(shù)類(lèi)型;

(2)正態(tài)分布:采用正態(tài)分布生成器生成5 個(gè)不同方差(均值為10、方差分別為1,3,5,7,9)、大小都為221的數(shù)據(jù)集,因?yàn)榉讲罘从沉藬?shù)據(jù)的稀疏程度,方差越大,數(shù)據(jù)越稀疏;

(3)齊夫分布:齊夫分布是一種反映數(shù)據(jù)偏斜程度的數(shù)據(jù)集,廣泛用在數(shù)據(jù)庫(kù)的測(cè)試場(chǎng)景.我們分別生成參數(shù)為0.1,0.3,0.5,0.7 的齊夫分布.數(shù)據(jù)集的大小都為221;

(4)真實(shí)數(shù)據(jù)集.我們基于Amazon 和Youtube 的真實(shí)數(shù)據(jù)集(http://snap.stanford.edu/data/index.html)對(duì)算法性能進(jìn)行評(píng)測(cè).數(shù)據(jù)集大小分別為334 863 和1 134 890,每個(gè)數(shù)據(jù)項(xiàng)代表的是分別是YouTube 用戶(hù)id 和Amazon 用戶(hù)的id.

通過(guò)下述實(shí)驗(yàn)我們可以發(fā)現(xiàn),數(shù)據(jù)的稀疏程度對(duì)跳表性能影響不大,因此對(duì)于亞馬遜和YouTube 的數(shù)據(jù)分布我們并沒(méi)有去分析.數(shù)據(jù)集總結(jié)見(jiàn)表2.

Table 2 Dataset

表2 數(shù)據(jù)集

5.3 CDF優(yōu)化實(shí)驗(yàn)結(jié)果

本節(jié)評(píng)估CDF 優(yōu)化算法的效果,主要測(cè)試查詢(xún)吞吐率(QPS)和吞吐率性能比.圖8 和圖9 分別反映的是基于正態(tài)分布和齊夫分布數(shù)據(jù)集下的性能的結(jié)果.橫軸分別是正態(tài)分布的方差和齊夫分布的參數(shù),縱軸分別是查詢(xún)的吞吐率性能(QPS,單位是k/s)和cdf-list,bound-list,partition-list 相對(duì)skiplist 的吞吐率性能比.

從實(shí)驗(yàn)結(jié)果可以發(fā)現(xiàn):

(1)相同數(shù)據(jù)量的情況下,不管是正態(tài)分布還是齊夫分布,每個(gè)算法的性能基本不受分布參數(shù)的影響;

(2)但在方差為1 和齊夫分布參數(shù)為0.7 時(shí)的數(shù)據(jù)集下,每個(gè)算法的性能都略有增加,這是因?yàn)閷?shí)驗(yàn)中的跳表不容許重復(fù)key 出現(xiàn),上述兩個(gè)參數(shù)情況下,會(huì)導(dǎo)致過(guò)多key 重復(fù),導(dǎo)致跳表結(jié)點(diǎn)數(shù)量下降,性能有所增加;

(3)根據(jù)圖8(b),圖9(b),bound-list 可以提高60%的性能,cdf-list 和partition-list 的相比skiplist 性能有大約25%的提升.

Fig.8 Performance influenced by the parameter of normal distribution’s variance

圖8 正態(tài)分布不同方差下,吞吐率的性能和性能比

Fig.9 Performance influenced by the parameter of Zipfian distribution

圖9 齊夫分布下不同參數(shù)吞吐率的性能和性能比

圖10 是均勻數(shù)據(jù)集下的實(shí)驗(yàn).圖10(a)反映了數(shù)據(jù)集大小對(duì)不同跳表的查詢(xún)吞吐率性能的影響,橫軸對(duì)應(yīng)的數(shù)據(jù)集大小,縱軸是查詢(xún)吞吐率的性能;圖10(b)反映的是cdf-list,bound-list,partition-list 相對(duì)skiplist 的吞吐率性能比.實(shí)驗(yàn)結(jié)果反映3 點(diǎn).

(1)整體上來(lái)看,所有跳表的查詢(xún)性能都隨著數(shù)據(jù)集大小的增大而下降.這是因?yàn)閿?shù)據(jù)集越大,跳表的層數(shù)會(huì)越高,并且每次要對(duì)比的key 的個(gè)數(shù)越多,導(dǎo)致性能下降.雖然skiplist 和B+樹(shù)有區(qū)別,但這也是為什么MySQL,Postgresql 等按B+樹(shù)組織表結(jié)構(gòu)的數(shù)據(jù)庫(kù),建議單表的行數(shù)不要太大的原因;

(2)不同算法之間對(duì)比.可以看到,性能最好的是bound-list,其次是cdf-list 和partition-list,skiplist 最差;

(3)其中有一個(gè)異常的結(jié)果,在小數(shù)據(jù)集下,partition-list 的性能很差,相比skiplist 沒(méi)有性能提升.這是因?yàn)閰?shù)p=13 在此時(shí)的設(shè)置是不合適的,圖11 會(huì)詳細(xì)介紹.

Fig.10 Performance influenced by dataset size with uniform distribution

圖10 均勻分布下,數(shù)據(jù)集大小對(duì)算法性能的影響

Partition-list 算法的性能受參數(shù)p 的影響.圖11 展示了在221 數(shù)據(jù)集大小的均勻分布數(shù)據(jù)集下,參數(shù)p 對(duì)partition-list 的吞吐率影響.實(shí)驗(yàn)結(jié)果表明,p 只有在一個(gè)合理的區(qū)間內(nèi),partition-list 的性能才會(huì)好,尤其是p 的值接近于log2(N)之后會(huì)發(fā)生急劇下降.我們給出了p 的一個(gè)經(jīng)驗(yàn)參考值:log2(N)?5.此外可以看出,partition-list的吞吐率在p=17 時(shí)和bound-list 性能接近.由于Partition-list 對(duì)于數(shù)據(jù)集的大小信息未知,這會(huì)導(dǎo)致partition-list的高度比bound-list 要高.實(shí)際上,bound-list 和skiplist 一樣,平均高度都是2.而對(duì)于partition-list 的平均高度一定大于2.比如圖7 中,大于maxlevel?p 層(紅線以上)的節(jié)點(diǎn)的平均高度是2+maxlevel?p(一定大于2),而小于等于max_level-p 的節(jié)點(diǎn)的平均高度是2.所以整體的平均高度一定大于2.一些不需要的高度原因?qū)е铝藀artitionlist 相對(duì)bound-list 的性能損失.

Fig.11 Performance influenced by parameter p

圖11 參數(shù)p 對(duì)性能的影響

圖12 是真實(shí)數(shù)據(jù)集Amazon 和YouTube 的實(shí)驗(yàn)結(jié)果.實(shí)驗(yàn)結(jié)果表明:(1)算法在小數(shù)據(jù)Amazon 集合下性能加速不明顯,在大數(shù)據(jù)YouTube 下性能加速很明顯,這與圖10 的結(jié)果一致;(2)小數(shù)據(jù)下的優(yōu)化效果不如大數(shù)據(jù)集下的優(yōu)化效果.skiplist 的優(yōu)化算法尤其時(shí)bound-list 更加適合于大數(shù)據(jù)集.

Fig.12 Performance under real dataset

圖12 真實(shí)數(shù)據(jù)集合下的性能

5.4 熱度數(shù)據(jù)實(shí)驗(yàn)結(jié)果

本節(jié)對(duì)比skiplist,partition-list,hot-list,mix-list 這幾個(gè)跳表.為了反映數(shù)據(jù)庫(kù)的訪問(wèn)熱度特征,我們針對(duì)數(shù)據(jù)集中1%的數(shù)據(jù)查詢(xún)80 次,其他的數(shù)據(jù)只查詢(xún)1 次的方式模擬冷熱數(shù)據(jù).

圖13 反映的是基于正態(tài)分布不同方差的數(shù)據(jù)集下的性能對(duì)比圖,圖14 反映的是基于齊夫分布不同參數(shù)的數(shù)據(jù)集下的性能對(duì)比圖.實(shí)驗(yàn)結(jié)果表明:(1)hot-list 可以獲取大致50%的性能提升;(2)hot-list 基本不受數(shù)據(jù)集分布的影響;(3)mix-list 相比hot-list 幾乎沒(méi)有性能提升.

Fig.13 Performance influenced by the parameter of normal distribution’s variance

圖13 正態(tài)分布下方差對(duì)性能的影響

Fig.14 Performance influenced by the parameter of Zipfian distribution

圖14 齊夫分布下參數(shù)對(duì)性能的影響

hot-list 的性能會(huì)受參數(shù)h 影響,圖15 展示了在221 數(shù)據(jù)集大小的均勻分布數(shù)據(jù)集下,參數(shù)h 對(duì)hos-list 性能比的影響.

Fig.15 Performance influenced by parameter h

圖15 參數(shù)h 對(duì)性能的影響

實(shí)驗(yàn)結(jié)果表明,hot-list 算法的h 對(duì)性能有很大的影響,h 只有在一個(gè)合理的區(qū)間內(nèi)才能有加速的效果.我們可以給出h 的參考區(qū)間:[log2(M),log2(N)],其中,N 為數(shù)據(jù)集的個(gè)數(shù),M 為熱度數(shù)據(jù)的個(gè)數(shù).

此外,為了反映熱度數(shù)據(jù)的頻度特征對(duì)不同跳表算法性能的影響,我們采用服從齊夫分布、參數(shù)分別為0.7和0.9 的兩個(gè)分布分別模擬熱度數(shù)據(jù),圖16 展示了不同算法的性能結(jié)果,其實(shí)參數(shù)p=17,h=10.

Fig.16 Performance under different Zipfian distribution dataset

圖16 訪問(wèn)頻度(不同齊夫分布參數(shù))對(duì)性能和性能比的影響

我們可以發(fā)現(xiàn),在參數(shù)為0.9 時(shí),6 個(gè)算法的性能普遍好于0.1 參數(shù)時(shí)的性能.這是因?yàn)閿?shù)據(jù)高頻訪問(wèn)時(shí),cache利用率更高.注意,hot-list 和mix-list 只有在熱度數(shù)據(jù)明顯的時(shí)候(參數(shù)為0.9),才有性能的提升.

6 結(jié)論及展望

本文重點(diǎn)研究數(shù)據(jù)庫(kù)跳表索引優(yōu)化這一經(jīng)典問(wèn)題.針對(duì)跳表由于隨機(jī)性導(dǎo)致的不穩(wěn)定性問(wèn)題,提出了3 個(gè)優(yōu)化算法cdf-list,bound-list,partition-list.針對(duì)熱度數(shù)據(jù)需要被頻繁訪問(wèn)的問(wèn)題,采用冷熱分層處理跳表節(jié)點(diǎn)的方式,提出了hot-list 和mix-list跳表算法.在已知數(shù)據(jù)集大小的情況下,bound-list 的性能提升明顯;如果對(duì)數(shù)據(jù)集大小不可知的情況下(一般情況),partition-list 也能獲取理想的性能提升.實(shí)驗(yàn)結(jié)果表明,partition-list 可以獲得最大60%的性能提升.此外,hot-list 可以用作在冷熱數(shù)據(jù)明顯的場(chǎng)景,比如類(lèi)似“雙十一”熱度商品大促的情形.以本文的partiton-list 算法為代表的設(shè)計(jì)方案,可以給未來(lái)的科研人員和開(kāi)發(fā)人員提供一個(gè)新的設(shè)計(jì)方向.

未來(lái)工作中,我們可以考慮基于人工智能的手段去優(yōu)化CDF 的學(xué)習(xí)過(guò)程和冷熱數(shù)據(jù)學(xué)習(xí)的過(guò)程.本文的跳表結(jié)構(gòu)并沒(méi)有針對(duì)多核特征去做優(yōu)化,未來(lái)可以結(jié)合多核的特性進(jìn)一步思考.

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 數(shù)據(jù)
    +關(guān)注

    關(guān)注

    8

    文章

    6820

    瀏覽量

    88748
  • 算法
    +關(guān)注

    關(guān)注

    23

    文章

    4588

    瀏覽量

    92511
  • 內(nèi)存
    +關(guān)注

    關(guān)注

    8

    文章

    2978

    瀏覽量

    73819
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    如何優(yōu)化RAM內(nèi)存使用

    優(yōu)化RAM內(nèi)存使用是一個(gè)重要的任務(wù),特別是對(duì)于那些擁有有限內(nèi)存資源的用戶(hù)。以下是一些優(yōu)化RAM內(nèi)存使用的策略,這些策略可以幫助您更有效地使用
    的頭像 發(fā)表于 11-11 09:58 ?53次閱讀

    海量數(shù)據(jù)處理需要多少RAM內(nèi)存

    海量數(shù)據(jù)處理所需的RAM(隨機(jī)存取存儲(chǔ)器)內(nèi)存量取決于多個(gè)因素,包括數(shù)據(jù)的具體規(guī)模、處理任務(wù)的復(fù)雜性、數(shù)據(jù)庫(kù)管理系統(tǒng)的效率以及所使用軟件的優(yōu)化
    的頭像 發(fā)表于 11-11 09:56 ?43次閱讀

    數(shù)據(jù)準(zhǔn)備指南:10種基礎(chǔ)特征工程方法的實(shí)戰(zhàn)教程

    數(shù)據(jù)分析和機(jī)器學(xué)習(xí)領(lǐng)域,從原始數(shù)據(jù)中提取有價(jià)值的信息是一個(gè)關(guān)鍵步驟。這個(gè)過(guò)程不僅有助于輔助決策,還能預(yù)測(cè)未來(lái)趨勢(shì)。為了實(shí)現(xiàn)這一目標(biāo),特征工程技術(shù)顯得尤為重要。
    的頭像 發(fā)表于 11-01 08:09 ?195次閱讀
    <b class='flag-5'>數(shù)據(jù)</b>準(zhǔn)備指南:10種基礎(chǔ)<b class='flag-5'>特征</b>工程方法的實(shí)戰(zhàn)教程

    優(yōu)化MSP430上用于uC/OS-II的內(nèi)存

    電子發(fā)燒友網(wǎng)站提供《優(yōu)化MSP430上用于uC/OS-II的內(nèi)存.pdf》資料免費(fèi)下載
    發(fā)表于 10-18 10:16 ?0次下載
    <b class='flag-5'>優(yōu)化</b>MSP430上用于uC/OS-II的<b class='flag-5'>內(nèi)存</b>

    TinyMaix框架的內(nèi)存需求超過(guò)了APM32F411的可用內(nèi)存,導(dǎo)致運(yùn)行失敗,怎么能成功優(yōu)化?

    TinyMaix框架的內(nèi)存需求超過(guò)了APM32F411的可用內(nèi)存,導(dǎo)致運(yùn)行失敗。怎么能成功優(yōu)化?
    發(fā)表于 09-27 09:44

    什么是內(nèi)存通道技術(shù)

    內(nèi)存通道技術(shù)作為計(jì)算機(jī)系統(tǒng)中的核心組成部分,對(duì)于提升數(shù)據(jù)處理能力、優(yōu)化系統(tǒng)性能以及增強(qiáng)系統(tǒng)的穩(wěn)定性與擴(kuò)展性等方面發(fā)揮著至關(guān)重要的作用。以下是對(duì)內(nèi)存
    的頭像 發(fā)表于 09-04 12:47 ?336次閱讀

    美光推出全新MRDIMM內(nèi)存,引領(lǐng)數(shù)據(jù)中心內(nèi)存新紀(jì)元

    工智能(AI)等內(nèi)存密集型應(yīng)用場(chǎng)景,對(duì)內(nèi)存技術(shù)的要求也達(dá)到了前所未有的高度。近日,全球領(lǐng)先的DRAM大廠美光科技宣布了一項(xiàng)重大技術(shù)突破——多重存取雙列直插式
    的頭像 發(fā)表于 07-22 15:19 ?542次閱讀

    mesh的內(nèi)存占用能否優(yōu)化?

    余110kb可用。 請(qǐng)問(wèn),mesh的內(nèi)存占用問(wèn)題能否優(yōu)化?為何系統(tǒng)剩余大概60K0內(nèi)存以下的時(shí)候系統(tǒng)會(huì)因內(nèi)存不足重啟?
    發(fā)表于 06-28 15:32

    特征工程與數(shù)據(jù)預(yù)處理全解析:基礎(chǔ)技術(shù)和代碼示例

    值、缺失值、編碼、特征縮放和特征提取的各種技術(shù)。異常值異常值是數(shù)據(jù)集中與其他觀測(cè)值顯著不同的數(shù)據(jù)點(diǎn)。它們可能是由測(cè)量誤差、罕見(jiàn)事件或僅僅是
    的頭像 發(fā)表于 06-26 08:28 ?407次閱讀
    <b class='flag-5'>特征</b>工程與<b class='flag-5'>數(shù)據(jù)</b>預(yù)處理全解析:基礎(chǔ)<b class='flag-5'>技術(shù)</b>和代碼示例

    高通和谷歌宣布推出面向搭載驍龍的Windows PC的優(yōu)化版Chrome瀏覽器

    高通技術(shù)公司和谷歌今日宣布,即日起推出面向搭載驍龍的Windows PC的優(yōu)化版Chrome瀏覽器,先于2024年年中即將發(fā)布的搭載驍龍?X Elite計(jì)算平臺(tái)的PC面市。
    的頭像 發(fā)表于 03-27 14:05 ?523次閱讀

    C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)之跳表詳解

    大家好,今天分享一篇C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)相關(guān)的文章--跳表
    的頭像 發(fā)表于 12-29 09:32 ?780次閱讀
    C語(yǔ)言<b class='flag-5'>數(shù)據(jù)</b>結(jié)構(gòu)之<b class='flag-5'>跳表</b>詳解

    jvm管理的內(nèi)存包括哪幾個(gè)運(yùn)行時(shí)數(shù)據(jù)內(nèi)存

    JVM(Java虛擬機(jī))是Java程序的運(yùn)行環(huán)境,它提供了內(nèi)存管理機(jī)制來(lái)管理Java程序所需的運(yùn)行時(shí)數(shù)據(jù)內(nèi)存。這些運(yùn)行時(shí)數(shù)據(jù)內(nèi)存包括堆
    的頭像 發(fā)表于 12-05 14:09 ?512次閱讀

    面向電路的噪聲耦合抑制技術(shù)

    面向電路的噪聲耦合抑制技術(shù)
    的頭像 發(fā)表于 11-29 15:56 ?621次閱讀
    <b class='flag-5'>面向</b>電路的噪聲耦合抑制<b class='flag-5'>技術(shù)</b>

    如何設(shè)計(jì)出面向電機(jī)控制優(yōu)化的反饋系統(tǒng)

    電子發(fā)燒友網(wǎng)站提供《如何設(shè)計(jì)出面向電機(jī)控制優(yōu)化的反饋系統(tǒng).pdf》資料免費(fèi)下載
    發(fā)表于 11-29 09:14 ?1次下載
    如何設(shè)計(jì)出<b class='flag-5'>面向</b>電機(jī)控制<b class='flag-5'>優(yōu)化</b>的反饋系統(tǒng)

    MCU在線技術(shù)講座-EFM和EFR: 面向物聯(lián)網(wǎng)開(kāi)發(fā)的通用MCU平臺(tái)

    開(kāi)發(fā)人員了解專(zhuān)門(mén)針對(duì)物聯(lián)網(wǎng)開(kāi)發(fā)而優(yōu)化的EFM和EFR系列MCU平臺(tái),我們將針對(duì)亞洲地區(qū)于2023年12月12日上午10點(diǎn)(北京時(shí)間)在線舉辦全新MCU專(zhuān)題的Tech Talk技術(shù)講座-“EFM和EFR
    發(fā)表于 11-23 13:45