• <tr id="yyy80"></tr>
  • <sup id="yyy80"></sup>
  • <tfoot id="yyy80"><noscript id="yyy80"></noscript></tfoot>
  • 99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

    內(nèi)存數(shù)據(jù)索引:以處理器為核心的性能優(yōu)化技術(shù)

    2014-09-06 10:53:10董紹嬋周敏奇周傲英
    關(guān)鍵詞:數(shù)據(jù)庫結(jié)構(gòu)

    董紹嬋, 周敏奇, 張 蓉, 周傲英

    (華東師范大學(xué) 軟件學(xué)院;數(shù)據(jù)科學(xué)與工程研究院,上海 200062)

    ?

    內(nèi)存數(shù)據(jù)索引:以處理器為核心的性能優(yōu)化技術(shù)

    董紹嬋, 周敏奇, 張 蓉, 周傲英

    (華東師范大學(xué) 軟件學(xué)院;數(shù)據(jù)科學(xué)與工程研究院,上海 200062)

    隨著單機內(nèi)存容量的持續(xù)上升,內(nèi)存數(shù)據(jù)庫技術(shù)逐漸取代傳統(tǒng)磁盤數(shù)據(jù)庫為數(shù)據(jù)管理提供更快速的支持.本文分析了設(shè)計內(nèi)存索引結(jié)構(gòu)所需要考慮的基本要素;對目前的內(nèi)存索引結(jié)構(gòu)進行了分類總結(jié),并分析各結(jié)構(gòu)的優(yōu)缺點;針對當(dāng)前應(yīng)用發(fā)展趨勢,指出內(nèi)存索引未來發(fā)展的機遇與挑戰(zhàn);最后介紹了我們正在研發(fā)的分布式集群感知內(nèi)存數(shù)據(jù)庫(CLAIMS)中的內(nèi)存索引結(jié)構(gòu).

    內(nèi)存索引; cache利用率; 分布式內(nèi)存數(shù)據(jù)庫; 索引壓縮

    0 引 言

    在20世紀(jì)70—80年代,由于硬盤技術(shù)的不成熟,導(dǎo)致計算機磁盤空間增長緩慢,數(shù)據(jù)訪問性能低下.當(dāng)時數(shù)據(jù)庫系統(tǒng)所處理的數(shù)據(jù)規(guī)模并不大,所以有人曾設(shè)想過在數(shù)據(jù)庫處理過程中,將磁盤上的數(shù)據(jù)全部常駐在內(nèi)存[1],以提高數(shù)據(jù)訪問和處理的速度.1980年,IBM提出“薄膜”磁頭技術(shù),這為進一步減小硬盤體積、增大容量提高讀寫速度提供了可能;1980年代末期發(fā)明了磁阻磁頭,使得盤片的存儲密度較以往提高了數(shù)十倍;隨后推出了首個容量超過1 GB的硬盤“IBM 3380直連存儲設(shè)備(DASD)”(每個容量為2.5 GB)[2].從此,磁盤容量的增長速率遠遠超過了內(nèi)存容量的增長,“內(nèi)存數(shù)據(jù)庫”的想法看似已無可能.對內(nèi)存數(shù)據(jù)庫系統(tǒng)的研究也止步不前;研究人員或者轉(zhuǎn)向?qū)崟r系統(tǒng)領(lǐng)域,或者致力于對磁盤數(shù)據(jù)庫性能的改進.

    在傳統(tǒng)的磁盤數(shù)據(jù)庫中,數(shù)據(jù)從磁盤加載到內(nèi)存的過程成為提高整個數(shù)據(jù)庫系統(tǒng)性能的瓶頸所在.為了減少數(shù)據(jù)訪問時的I/O開銷,各種基于磁盤的數(shù)據(jù)索引結(jié)構(gòu)應(yīng)運而生;其中,由于對數(shù)據(jù)的增刪改有非常好的性能支持,本身結(jié)構(gòu)可以進行范圍查詢等優(yōu)勢,B+樹[3]索引得到了廣泛的應(yīng)用.

    近十幾年來,隨著RAM價格的不斷下降,計算機內(nèi)存的容量飛速上升.在當(dāng)今的主流服務(wù)器中,TB級的內(nèi)存容量已隨處可見.這使得完全可以將所有數(shù)據(jù)常駐內(nèi)存,以實現(xiàn)快速的數(shù)據(jù)訪問和更新,基于內(nèi)存的數(shù)據(jù)庫系統(tǒng)再次得到人們的重視.

    在內(nèi)存數(shù)據(jù)庫系統(tǒng)中,所有的數(shù)據(jù)操作任務(wù)都可直接在內(nèi)存中得到響應(yīng);因此,困擾傳統(tǒng)數(shù)據(jù)庫的I/O瓶頸不復(fù)存在.類似于內(nèi)存-磁盤間的性能差異,CPU與內(nèi)存對數(shù)據(jù)的不同處理能力導(dǎo)致內(nèi)存數(shù)據(jù)庫的瓶頸轉(zhuǎn)變?yōu)镃PU-memory代價.由于處理器廠商與內(nèi)存廠商相互分離的產(chǎn)業(yè)格局,導(dǎo)致內(nèi)存技術(shù)與處理器技術(shù)發(fā)展的不同步.圖1給出了20世紀(jì)最后20年間CPU和DRAM性能增長的趨勢;從圖中可明顯看出,在這段時間內(nèi),處理器的性能每年大約有60%的提升,而內(nèi)存性能的提升速度則每年只有10%左右.這種不均衡的發(fā)展使得當(dāng)前內(nèi)存的存取速度嚴(yán)重滯后于處理器的計算速度,內(nèi)存訪問瓶頸導(dǎo)致高性能處理器難以發(fā)揮應(yīng)有的效率,并且直接制約了內(nèi)存數(shù)據(jù)庫系統(tǒng)操作性能的提升.事實上,早在1994年就有研究人員分析和預(yù)測了這一問題,并將這種嚴(yán)重阻礙處理器性能發(fā)揮的內(nèi)存瓶頸命名為"內(nèi)存墻"(Memory Wall)[4].在很長一段時間內(nèi),對內(nèi)存索引的研究都圍繞著如何減弱“內(nèi)存墻”問題對數(shù)據(jù)獲取的延遲進行.一系列“緩存敏感性”[5]索引的提出(例如CSB-Tree[6]、CST-Tree[7]等)使得該問題得到了緩解.

    圖1 CPU與DRAM性能增長對比[6]

    在現(xiàn)今的CPU-Cache-Memory處理架構(gòu)下,已有實驗結(jié)果表明[8]:數(shù)據(jù)庫執(zhí)行時間的一半用于等待內(nèi)存,而且90%的等待時間是由二級數(shù)據(jù)cache失效和一級指令cache失效造成的——這就意味著數(shù)據(jù)放置即數(shù)據(jù)模型對二級數(shù)據(jù)cache、一級指令cache有重要的影響.因此,如何有效地利用cache的特征設(shè)計高效算法,成為內(nèi)存數(shù)據(jù)庫系統(tǒng)中亟待解決的一個重要問題.類比于傳統(tǒng)數(shù)據(jù)庫系統(tǒng)中對I/O瓶頸的索引處理方式,在內(nèi)存數(shù)據(jù)庫中,同樣需要建立針對內(nèi)存數(shù)據(jù)的索引結(jié)構(gòu),以避免對其進行全部掃描或大量隨機讀取,從而加快數(shù)據(jù)訪問與處理的速度,盡可能減弱“內(nèi)存墻”問題對數(shù)據(jù)庫處理性能的影響.

    除此之外,新的硬件架構(gòu)也對內(nèi)存索引的結(jié)構(gòu)設(shè)計提出了各種要求.由于多核技術(shù)的發(fā)展及內(nèi)存容量的增大,單臺計算機中的內(nèi)存被分配給了不同的處理器,從而催生了非一致性內(nèi)存訪問(Non-Uniform Memory Access,NUMA)[9]系統(tǒng)的出現(xiàn).由于處理器訪問直接掛載內(nèi)存與遠端內(nèi)存的時間消耗存在差異,針對內(nèi)存中數(shù)據(jù)的索引結(jié)構(gòu)可增添新的標(biāo)識信息以使得數(shù)據(jù)盡量被其所在內(nèi)存直接掛載的處理器所處理,從而加快數(shù)據(jù)的訪問處理時間.另外,隨著處理器與內(nèi)存間緩存層數(shù)的增加,各處理器對一級、二級緩存的私有化導(dǎo)致數(shù)據(jù)訪問過程中的相干性沖突增加,在多線程處理環(huán)境下,當(dāng)多個處理器同時對某一特定的索引結(jié)構(gòu)進行遍歷搜索時,如何有效的避免對特定結(jié)點訪問所造成的相干性沖突也是提升內(nèi)存數(shù)據(jù)訪問效率的一個有效手段.

    除了在單機環(huán)境下要解決的“內(nèi)存墻”問題之外,大數(shù)據(jù)時代的到來,它所具有的“3V”(即海量(Valume)、高速(Velocity)、多樣(Variety)[10])特性,對數(shù)據(jù)庫的分析和處理能力提出了新的挑戰(zhàn).傳統(tǒng)的單機內(nèi)存數(shù)據(jù)庫系統(tǒng)并不能夠很好地滿足要求,于是分布式數(shù)據(jù)管理系統(tǒng)受到重視并被廣泛研究.基于Key-Value Store的分布式內(nèi)存數(shù)據(jù)管理系統(tǒng)(例如Spark[11]、RAMCloud[12]等)已經(jīng)取得較好的應(yīng)用.分布式內(nèi)存數(shù)據(jù)庫系統(tǒng)的研究也如火如荼.SAP的HANA[13]已經(jīng)有相對穩(wěn)定高效的分布式版本;MinSQL[14]作為一個實驗室產(chǎn)物,是用JAVA搭建的,一個較為完善的分布式內(nèi)存數(shù)據(jù)庫系統(tǒng).在分布式環(huán)境下,源數(shù)據(jù)的存儲策略直接影響數(shù)據(jù)在集群中的分布;而之前的基于單機內(nèi)存的索引結(jié)構(gòu),也必然要針對分布式的數(shù)據(jù)存儲作出新的調(diào)整.整個數(shù)據(jù)在集群中數(shù)據(jù)結(jié)點間的分布式存儲策略與在每個數(shù)據(jù)結(jié)點內(nèi)部的部分?jǐn)?shù)據(jù)的局部索引的結(jié)合,將導(dǎo)致分布式環(huán)境下索引的多層架構(gòu).目前,針對內(nèi)存數(shù)據(jù)的分布式索引結(jié)構(gòu)的研究并不是很成熟,仍有很多的工作值得去做.

    圖2列出了內(nèi)存索引技術(shù)近30年來的開展.從20世紀(jì)80年代開始,內(nèi)存索引結(jié)構(gòu)被首次提出并開始針對其獨立于傳統(tǒng)的磁盤索引結(jié)構(gòu)的特征進行研究改進.隨著計算機硬件的不斷變化,內(nèi)存索引結(jié)構(gòu)也產(chǎn)生了相對應(yīng)的改變.從傳統(tǒng)的基于B樹類型的索引到Trie結(jié)構(gòu)的引進,從對磁盤hash結(jié)構(gòu)的直接應(yīng)用到針對cache及TLB的特性進行的敏感性改進,直到后來針對不同的索引結(jié)構(gòu)特性進行復(fù)合利用,逐步提升內(nèi)存索引對數(shù)據(jù)掃描的性能影響.

    在過去的30多年中,已有很多學(xué)者致力于研究如何對內(nèi)存數(shù)據(jù)建立高效的索引結(jié)構(gòu),但是這部分的研究工作主要針對集中式環(huán)境,對分布式內(nèi)存數(shù)據(jù)庫系統(tǒng)并沒有作相關(guān)的索引工作探討.本文嘗試全面回顧內(nèi)存數(shù)據(jù)庫索引工作在近30年來的研究進展與已有成果,并展望其未來可能的發(fā)展方向.此外,華東師范大學(xué)數(shù)據(jù)科學(xué)與工程院在分布式內(nèi)存數(shù)據(jù)庫的數(shù)據(jù)存儲及索引建立方面也做了一些探索,本文也會給出簡要的介紹.

    圖2 內(nèi)存數(shù)據(jù)庫系統(tǒng)索引發(fā)展概覽

    本文的后續(xù)內(nèi)容組織如下:第1節(jié)介紹內(nèi)存索引結(jié)構(gòu)需要考慮的基本要素;第2節(jié)和第3節(jié)分別介紹單機和分布式環(huán)境下內(nèi)存數(shù)據(jù)庫索引結(jié)構(gòu)的研究進展;第4節(jié)總結(jié)當(dāng)今數(shù)據(jù)及應(yīng)用的發(fā)展趨勢并展望未來內(nèi)存大數(shù)據(jù)索引的發(fā)展方向,同時簡介華東師范大學(xué)數(shù)據(jù)科學(xué)與工程研究院在CLAIMS系統(tǒng)中的分布式內(nèi)存索引研究;最后,第5節(jié)總結(jié)全文.

    1 內(nèi)存索引結(jié)構(gòu)要考慮的基本要素

    已有的研究成果表明,在傳統(tǒng)的磁盤行數(shù)據(jù)庫系統(tǒng)中,最大的性能瓶頸在于對大量磁盤數(shù)據(jù)的訪問和獲取.因此,產(chǎn)生了各種磁盤數(shù)據(jù)索引方式,用以避免對原始數(shù)據(jù)的全盤掃描,精準(zhǔn)定位數(shù)據(jù);然而,隨著內(nèi)存容量的上升及列存儲方式的出現(xiàn),基于內(nèi)存的數(shù)據(jù)庫系統(tǒng)可以將查詢所需的原始數(shù)據(jù)全部緩存在內(nèi)存中以便在查詢到來時可以快速地獲取到對應(yīng)于查詢的數(shù)據(jù).

    由圖3給出的計算機中各級存儲介質(zhì)數(shù)據(jù)訪問效率的對比可看出,當(dāng)傳統(tǒng)的磁盤瓶頸消失之后,內(nèi)存訪問延遲將會變成制約內(nèi)存數(shù)據(jù)庫系統(tǒng)查詢處理性能提升的新瓶頸,如何加速數(shù)據(jù)從內(nèi)存獲取到CPU處理的過程已經(jīng)成為內(nèi)存數(shù)據(jù)庫性能提升的一個重要研究方向.總結(jié)上述情況并結(jié)合近年來出現(xiàn)的新的硬件架構(gòu)形式及分布式環(huán)境的發(fā)展,以下給出在設(shè)計內(nèi)存數(shù)據(jù)索引時需要重點考慮的基本要素.

    圖3 各級存儲介質(zhì)的訪問延遲說明

    1.1 提升cache利用率

    類似于傳統(tǒng)磁盤數(shù)據(jù)庫中內(nèi)存buffer與磁盤的關(guān)系,在內(nèi)存數(shù)據(jù)庫中數(shù)據(jù)cache可看作是內(nèi)存中原始數(shù)據(jù)的更高一層存儲buffer.cache與內(nèi)存之間數(shù)據(jù)的交換以cache line為單位;每次不論實際所需的數(shù)據(jù)占用多少空間,一旦在cache中不能找到所需數(shù)據(jù),訪問內(nèi)存獲取的數(shù)據(jù)規(guī)模必定填充滿一個完整的cache line.因此,盡量提高cache中的空間利用率,使得每次加載到cache中的索引數(shù)據(jù)能夠全部有效地用于查詢處理中對結(jié)果集的prune或直接指示,是設(shè)計內(nèi)存索引結(jié)構(gòu)的一個主要考慮因素.

    以傳統(tǒng)的B樹[15]類索引為例,雖然該類索引在磁盤數(shù)據(jù)庫中得到了非常廣泛的應(yīng)用并且也被證明可以取得很好的性能提升,但是顯然這類結(jié)構(gòu)并不能直接用于對內(nèi)存數(shù)據(jù)進行索引.Ross提出了“緩存敏感(cache conscious)”的概念,形式化地說明了對cache line利用率的優(yōu)化問題,并在文獻[5]中以傳統(tǒng)B樹結(jié)構(gòu)為基礎(chǔ),在OLAP(在線分析系統(tǒng),On-Line Analysis Processing)環(huán)境下提升cache利用率,通過對其進行緩存敏感性改進使得其變體結(jié)構(gòu)最終能被應(yīng)用到內(nèi)存數(shù)據(jù)索引結(jié)構(gòu)中.

    1.2 減少cache失效及TLB失效

    通過已有的實驗已經(jīng)知道,數(shù)據(jù)庫執(zhí)行時間的一半是CPU在等待內(nèi)存,而90%的等待時間是由二級數(shù)據(jù)cache失效和一級指令cache失效造成的.因此,減少二級數(shù)據(jù)cache失效的發(fā)生概率顯得尤為重要.對于樹型索引,如果整個結(jié)構(gòu)沒有被加載到cache,那么每次層間偏移都對應(yīng)一次數(shù)據(jù)cache失效.因此如何提高其結(jié)點的扇出分支數(shù)目,降低樹高,減少索引搜索過程中cache失效發(fā)生的概率是內(nèi)存索引要考慮的另一個重要因素.

    對hash類索引而言,數(shù)據(jù)的定位只需一次hash值的計算,理想情況下搜索代價為O(1).但是由于TLB空間局限性,對于大規(guī)模分散hash而言,絕大多數(shù)數(shù)據(jù)桶的物理地址都不在TLB中,這使得在數(shù)據(jù)定位過程中TLB失效頻發(fā),嚴(yán)重影響索引效率.針對這種情況,如何組織hash的層次以減少在尋址過程中出現(xiàn)的TLB失效問題是設(shè)計內(nèi)存hash類索引要考慮的一個重要方面.其中,將Radix[16]技術(shù)引入索引結(jié)構(gòu)而提出的分層hash算法得到廣泛的認(rèn)可.

    1.3 索引結(jié)構(gòu)壓縮

    對于傳統(tǒng)的行存儲磁盤數(shù)據(jù)庫而言,表的所有屬性以記錄為單位按行存儲,在沒有索引的情況下對任一列的查詢都將引發(fā)整個數(shù)據(jù)表的全部掃描,這極大地增加了系統(tǒng)的I/O開銷,不利于查詢性能的提升.傳統(tǒng)磁盤索引通過避免對數(shù)據(jù)的全部掃描來提高查詢性能,其壓縮比率以一列的索引空間對比整個完整表數(shù)據(jù);因此,即使沒有任何壓縮技術(shù),索引的壓縮率也非常高.

    當(dāng)前,針對常駐內(nèi)存的大量列數(shù)據(jù)建立索引結(jié)構(gòu),其壓縮性能就成為一個非常重要的考量因素:首先,新的列存儲數(shù)據(jù)組織形式使得原始表中的數(shù)據(jù)按屬性進行組織存儲,這樣一來在針對某列操作時可以有針對性的只掃描該列的原始數(shù)據(jù),大大縮小了對原始數(shù)據(jù)掃描的范圍(相比行數(shù)據(jù)庫而言).因此,索引結(jié)構(gòu)的壓縮比率也由對比之前行存儲的整個數(shù)據(jù)表變成僅與所要建立索引結(jié)構(gòu)的列進行對比.這種情況下,由于索引中添加了許多指示數(shù)據(jù)位置的信息,原來未經(jīng)壓縮的稠密索引所占用的空間必然大于原始該列數(shù)據(jù)所占用空間;因此,對于索引結(jié)構(gòu)的精簡和壓縮在列存儲的環(huán)境下就必不可少.其次,由于源數(shù)據(jù)已全部在內(nèi)存中放置,其全部掃描相比磁盤而言本身已經(jīng)非常迅速,要使索引結(jié)構(gòu)發(fā)生效力,必定通過查詢索引結(jié)構(gòu)直接定位數(shù)據(jù)要快于有cache預(yù)取加速下的數(shù)據(jù)順序掃描.而如上一小節(jié)所說,不論是樹型結(jié)構(gòu)還是基于hash的索引結(jié)構(gòu),其在訪問過程中都會不可避免的產(chǎn)生cache失效和TLB失效,類比于傳統(tǒng)磁盤數(shù)據(jù)庫的內(nèi)存維護,最好的處理策略是能夠讓針對磁盤的索引結(jié)構(gòu)直接維護在cache中,這樣對索引結(jié)構(gòu)的訪問不會產(chǎn)生任何cache失效問題,整個數(shù)據(jù)的訪問過程只會產(chǎn)生直接獲取數(shù)據(jù)一次cache失效.為了使整個索引結(jié)構(gòu)能夠在cache中維護,該結(jié)構(gòu)所占用的空間量必須足夠小,針對大規(guī)模數(shù)據(jù)集,索引的壓縮就顯得尤為重要.

    1.4 新的硬件特性帶來的索引結(jié)構(gòu)改進

    在傳統(tǒng)磁盤數(shù)據(jù)庫中,系統(tǒng)的性能瓶頸主要在磁盤I/O上,而單位時間內(nèi)系統(tǒng)能從磁盤上讀取的數(shù)據(jù)量與配置磁頭數(shù)目,磁盤轉(zhuǎn)速等物理因素直接相關(guān),這導(dǎo)致只能通過改變物理架構(gòu)來提升I/O吞吐量.而在內(nèi)存中,隨著當(dāng)今計算機硬件的發(fā)展,多核、多線程的處理模式完全能夠支持處理性能的成倍提升.圖4給出了計算機存儲架構(gòu)示意圖,結(jié)合新的結(jié)構(gòu)特性及技術(shù)發(fā)展,為了充分利用硬件性能,內(nèi)存中的索引結(jié)構(gòu)應(yīng)充分考慮到以下幾個因素.

    圖4 各級存儲層架構(gòu)示意圖

    (1) 隨著cache層數(shù)的增加以及多核技術(shù)的使用,在多線程環(huán)境下,核與核間L3 cache對內(nèi)存中數(shù)據(jù)訪問產(chǎn)生的相干性沖突,以及核內(nèi)不同處理器間更高層cache對L3 cache中數(shù)據(jù)訪問的相干性沖突,都會導(dǎo)致訪問過程中處理器的等待,使得最終的總體性能下降;

    (2) 由于內(nèi)存容量的上升以及多核技術(shù)的應(yīng)用,“非一致性內(nèi)存訪問”[9]結(jié)構(gòu)使得CPU訪問不同內(nèi)存中的數(shù)據(jù)所需要的時間不盡相同;如何設(shè)計索引算法,使得在數(shù)據(jù)搜索過程中CPU所遍歷的數(shù)據(jù)恰好在其直接掛載的內(nèi)存中,這也是提升性能的一個有效途徑;

    (3) 同時單指令多數(shù)據(jù)流(Single Instruction Multiple Data,SIMD)[17]技術(shù)的合理利用也能夠使索引的搜索性能得到進一步的提升;傳統(tǒng)的單個key值比較指令可直接擴展到對整個數(shù)據(jù)結(jié)點的處理,從而節(jié)約key值在索引結(jié)點中比較過程的時間消耗,進一步加快索引訪問的速度.

    1.5 分布式內(nèi)存集群特性

    從圖2中對近30年來的索引結(jié)構(gòu)的初步總結(jié)可看出,內(nèi)存索引結(jié)構(gòu)的研究一直都孤立于內(nèi)存數(shù)據(jù)庫系統(tǒng)之外單獨存在;并且?guī)缀跛械乃饕Y(jié)構(gòu)所注重的只是在單機內(nèi)存中的性能優(yōu)化策略,對于現(xiàn)今應(yīng)用越來越廣泛的分布式集群系統(tǒng)并沒有太多的研究.

    隨著數(shù)據(jù)庫所處理的數(shù)據(jù)規(guī)模的急劇增大,實時處理需求的不斷提升,對集中式環(huán)境下服務(wù)器結(jié)點的要求也日益提高.相較于配置極高的單臺服務(wù)器,基于分布式架構(gòu)的集群更易被接受.內(nèi)存數(shù)據(jù)處理系統(tǒng)發(fā)展的下一階段必然會向分布式環(huán)境拓展,目前已經(jīng)有許多較為成熟的分布式內(nèi)存系統(tǒng):基于Key-Value存儲的Spark、RamCloud;基于Hadoop的存儲結(jié)構(gòu)拓展而來的Impala;以及分布式的內(nèi)存數(shù)據(jù)庫系統(tǒng)memSQL、HANA等等.相較于分布式內(nèi)存系統(tǒng)的蓬勃發(fā)展,在其上的索引技術(shù)并沒有隨之興起.而由于網(wǎng)絡(luò)間內(nèi)存訪問的額外開銷,分布式內(nèi)存索引技術(shù)的研究也對傳統(tǒng)的單機內(nèi)存索引結(jié)構(gòu)提出了新的要求:建立分布式索引必須結(jié)合考慮數(shù)據(jù)在分布式系統(tǒng)中的存儲策略;索引結(jié)構(gòu)與原始數(shù)據(jù)的一致性存儲與否對數(shù)據(jù)訪問時間的影響不可忽略.而在分布式環(huán)境下應(yīng)用廣泛的基于HASH的數(shù)據(jù)分布策略與傳統(tǒng)的比較性索引結(jié)構(gòu)的結(jié)合效率并不理想.因此,如何在分布式環(huán)境下建立高效的內(nèi)存索引結(jié)構(gòu)需要考慮的因素更加復(fù)雜.

    2 現(xiàn)有的內(nèi)存索引結(jié)構(gòu)

    回顧內(nèi)存索引結(jié)構(gòu)的發(fā)展,其每一次改進都與CPU-Cache-Memory架構(gòu)的發(fā)展變化密切相關(guān).由于源數(shù)據(jù)的內(nèi)存存放,使得處理器及memory的架構(gòu)對索引結(jié)構(gòu)的影響逐漸增大.從傳統(tǒng)的單核單處理器單線程架構(gòu)到SIMD指令集的出現(xiàn),到多線程多處理器多核時代的到來,每次CPU-Cache-Memory架構(gòu)的改進都引起針對內(nèi)存索引結(jié)構(gòu)的改革.

    2.1 基于樹型結(jié)構(gòu)的內(nèi)存索引

    鑒于B-tree一族的索引結(jié)構(gòu)在傳統(tǒng)磁盤數(shù)據(jù)庫索引中取得良好的效果,目前大部分內(nèi)存索引結(jié)構(gòu)也是以B-Tree類的Key值比較樹為原型,再針對CPU-Cache-Memory架構(gòu)下的新特性進行性能優(yōu)化.

    (1) “內(nèi)存索引”的首次提出——T-Tree

    在20世紀(jì)90年代,B-Tree作為一種被廣泛接受的磁盤索引結(jié)構(gòu)被直接用于內(nèi)存索引;但是,由于當(dāng)時cache的容量較小,B-Tree的結(jié)點結(jié)構(gòu)中指針數(shù)據(jù)過多,導(dǎo)致整個結(jié)構(gòu)太過龐大;并且索引結(jié)構(gòu)對cache的利用率明顯不高,不能很好地滿足Cache-Memory架構(gòu)對索引的新要求.

    針對B-Tree的不足,結(jié)合AVL樹[18]和B樹[15]的各自特性進行改進得到的T-Tree[19]被認(rèn)為是最早出現(xiàn)的針對內(nèi)存數(shù)據(jù)建立的索引結(jié)構(gòu).該結(jié)構(gòu)由威斯康星大學(xué)的Lehman和Carey共同提出,并在后來被應(yīng)用于MonetDB[20]中索引更新區(qū)的數(shù)據(jù),取得了較好的查詢性能提升.但是,由于其平衡的調(diào)整仍然借鑒AVL樹的結(jié)點旋轉(zhuǎn)規(guī)則,導(dǎo)致其失衡后的再平衡過程非常繁瑣;并且插入的上溢出及刪除的下溢出算法過于復(fù)雜,也導(dǎo)致T-Tree更新操作的平均消耗過大.

    (2) “cache敏感性”概念提出及索引結(jié)構(gòu)的改進

    盡管T-Tree的改進探索并不是很成功,但T-Tree的提出使得人們認(rèn)識到,由于Cache-Memory架構(gòu)與Memory-Disk架構(gòu)之間的性能及容量等各方面的差異,所以內(nèi)存索引結(jié)構(gòu)并不能完全照搬磁盤索引結(jié)構(gòu).

    當(dāng)數(shù)據(jù)從磁盤全部轉(zhuǎn)移到內(nèi)存中后,cache的結(jié)構(gòu)特性對內(nèi)存數(shù)據(jù)索引的建立影響重大,其涉及的最重要的一個問題是cache的敏感性.CPU及cache對數(shù)據(jù)處理和訪問速度的差異成為內(nèi)存數(shù)據(jù)庫的主要性能瓶頸.已有實驗結(jié)果表明,在內(nèi)存數(shù)據(jù)庫系統(tǒng)中,半數(shù)的CPU等待時間消耗在二級cache的數(shù)據(jù)失效和一級cache的指令失效處理上[8].所以,如何合理地利用cache特征設(shè)計cache敏感算法已經(jīng)成為內(nèi)存數(shù)據(jù)庫系統(tǒng)中要解決的一個重要問題.

    針對內(nèi)存數(shù)據(jù)索引和cache的架構(gòu)特性,人們提出了“緩存敏感(Cache-Sensitive)技術(shù)”[5].研究表明,對傳統(tǒng)的磁盤索引進行緩存敏感改造得到的內(nèi)存索引結(jié)構(gòu)能夠較為顯著地提升內(nèi)存數(shù)據(jù)的查詢性能.“緩存敏感性”主要解決的問題是針對cache的容量較小、以cache Line為數(shù)據(jù)交換的最小單位以及cache 失效所帶來的巨大的時間消耗等特性;通過盡量提高cache Line的利用率來降低在索引搜索過程中Cache Miss發(fā)生的概率,從而提高查詢的性能.

    針對Cache敏感性問題,Ross等人對傳統(tǒng)面向磁盤的B+-Tree類索引結(jié)構(gòu)作了一系列的改進,提出了新的緩存敏感的內(nèi)存索引結(jié)構(gòu): 基于OLAP應(yīng)用的CSS-Tree[5]及添加OLTP(在線事務(wù)系統(tǒng),On-Line Transaction Processing)的更新操作的CSB+-Tree[6].其中CSS-Tree與B+-Tree的索引結(jié)構(gòu)類似,利用索引結(jié)點的連續(xù)順序存放特性,容易得出任意索引結(jié)點的任意子結(jié)點所存放的位置,從而完全省略B+Tree中用于指示子結(jié)點位置的指針空間,最大化索引結(jié)點的扇出分支數(shù)目,達到提高cache利用率的最終目的.并對索引結(jié)點大小與cache line的對應(yīng)關(guān)系的改變導(dǎo)致的索引結(jié)構(gòu)遍歷過程中產(chǎn)生的cache失效次數(shù)給出了詳細(xì)的理論論證,從而確立了索引結(jié)點大小與cache line容量相等的最優(yōu)索引結(jié)點配置.

    在當(dāng)時的硬件環(huán)境下,針對OLAP應(yīng)用,CSS-Tree已經(jīng)達到了接近最優(yōu)的查詢性能優(yōu)化;然而,為此付出的更新代價極大:由于該索引結(jié)構(gòu)中沒有任何指針數(shù)據(jù)的存在,所有的結(jié)點按順序連續(xù)存放,使得該索引結(jié)構(gòu)的更新變得非常困難;在OLAP應(yīng)用的定期批量更新操作中,索引結(jié)構(gòu)只能通過重新構(gòu)建的方式進行維護,并不具備實時插入更新的能力.為了解決OLTP系統(tǒng)中的實時增刪改操作,必須對CSS-Tree的結(jié)構(gòu)進行合理化的改進——適當(dāng)?shù)厝菰S位置標(biāo)示指針的存在.針對該應(yīng)用需求,結(jié)合傳統(tǒng)B+Tree在處理增刪改操作時的規(guī)范,CSB+-Tree在每個索引結(jié)點組(Node Group)中增加了一個位置指針,使得整個索引結(jié)構(gòu)只需以結(jié)點組為單位連續(xù)存放即可;增加了索引結(jié)構(gòu)的位置靈活性,并借鑒B+Tree的增刪調(diào)節(jié)算法加以改進,實現(xiàn)了實時的動態(tài)索引項增刪操作.改進后的CSB+Tree在提升OLTP應(yīng)用中的數(shù)據(jù)查找性能上展示了較大的優(yōu)勢.在文獻[6]中,除了提出針對基于內(nèi)存的OLTP應(yīng)用有較好性能提升的CSB+Tree索引結(jié)構(gòu)外,對其索引結(jié)點組的規(guī)模也進行了形式化的討論:通過Segmented CSB+Tree的結(jié)點塊劃分來調(diào)節(jié)整個索引結(jié)點組的空間占用大小及數(shù)量規(guī)模,從而調(diào)節(jié)索引項增刪造成結(jié)點或結(jié)點組分裂時的維護開銷.

    在當(dāng)時的CPU-Cache-Memory架構(gòu)形式下,充分考慮cache敏感性問題所提出的CS-類索引無疑極大提升了內(nèi)存數(shù)據(jù)查找效率,最大化地發(fā)揮了內(nèi)存索引在數(shù)據(jù)檢索中的作用.到2007年,韓國的一組研究人員對T-Tree做了緩存敏感性改進,提出基于T-Tree的CST-Tree[7],以改善數(shù)據(jù)所消耗的索引樹層數(shù)較大且沒有進行cache line對齊等問題;與此同時,合理避免了傳統(tǒng)T-Tree在查找過程中可能發(fā)生結(jié)點誤載入cache的情況;從而使經(jīng)過改進的CST-Tree在數(shù)據(jù)查詢的時間性能上大幅度優(yōu)于之前的CSB+Tree.

    (3) 針對內(nèi)存索引的優(yōu)化技術(shù)

    ① SIMD指令技術(shù)

    當(dāng)代計算機的CPU提供“單指令流多數(shù)據(jù)流”(SIMD)的指令集支持,以實現(xiàn)一條指令同時作用于多個操作數(shù),從而加快數(shù)據(jù)處理的速度.文獻 [21]給出了將傳統(tǒng)數(shù)據(jù)庫操作進行SIMD推廣的實現(xiàn),并說明SIMD指令集對索引結(jié)構(gòu)的支持給不同索引的構(gòu)建或遍歷帶來性能提升.

    有了SIMD指令集在數(shù)據(jù)庫索引結(jié)構(gòu)中的應(yīng)用基礎(chǔ),2009年Schlegel等人提出了K-Ary Search算法[22].該算法在傳統(tǒng)的二分查找的基礎(chǔ)上,對其進行SIMD拓展,使其每個比較指令針對k個操作數(shù)進行,將要查找的原始有序數(shù)據(jù)分為k+1個區(qū)間;對比于原來的折半查找,單條指令過濾掉的數(shù)據(jù)成倍增加,從而加快有序數(shù)據(jù)的查找效率.隨后,由Kim等人提出的FAST(Fast Architecture Sensitive Tree)[23]索引結(jié)構(gòu)正式將SIMD技術(shù)應(yīng)用于內(nèi)存索引中:該結(jié)構(gòu)以K-Ary Search為基礎(chǔ),充分考慮cache層的架構(gòu)特性,平衡索引頁塊、cache line塊及SIMD指令塊三者之間的關(guān)系,通過page blocking-cache line blocking-SIMD blocking三層架構(gòu)的索引樹存儲方式,使得在兼顧、cache敏感性問題的同時將SIMD指令運用于內(nèi)存索引結(jié)構(gòu).

    ② 查詢緩存技術(shù)[24]

    在建立內(nèi)存索引結(jié)構(gòu)的基本考慮因素中除了,盡量提升cache利用率和考慮cache敏感性之外,減少cache失效所帶來的額外時間損耗也是提升性能的有效方法之一.在對海量數(shù)據(jù)建立內(nèi)存索引時,并不能保證整個索引結(jié)構(gòu)在任意時刻都在cache中緩存;因此在對基于樹型結(jié)構(gòu)的索引進行搜索時,也需要盡量避免cache失效所帶來的性能損失.Kenneth A. Ross團隊以B-Tree和CSB+Tree為基礎(chǔ),提出的針對批量查詢的緩存技術(shù),在很大程度上減少了系統(tǒng)冷啟動或索引結(jié)構(gòu)被替換出cache時對其搜索產(chǎn)生的cache失效次數(shù).該算法基于已有的內(nèi)存索引結(jié)構(gòu),在結(jié)點(或結(jié)點組)上新加用于緩存搜索鍵值的數(shù)組空間.當(dāng)大量的查詢來臨時,逐層進行索引結(jié)構(gòu)的查找將搜索鍵值存放于該層目標(biāo)索引結(jié)點(所在結(jié)點組)對應(yīng)的緩存數(shù)組中,只有當(dāng)用于緩存鍵值的數(shù)組存滿溢出時才會觸發(fā)索引結(jié)構(gòu)向下一層進一步查找;同樣的,只有葉子結(jié)點(組)對應(yīng)的緩存數(shù)組溢出時才會返回查詢結(jié)果.

    當(dāng)批量查找操作到來時,假定數(shù)據(jù)索引結(jié)構(gòu)不在cache中緩存,該算法將原來單獨的索引結(jié)構(gòu)中針對每個鍵值查找的cache失效次數(shù)進行了有效合并,使得一組鍵值的查找只會產(chǎn)生一次cache失效,大大減少了cache失效帶來的時間消耗,從而提升數(shù)據(jù)搜索的效率.需要注意的是,該算法的原始結(jié)構(gòu)并不能保證批量查詢的返回結(jié)果順序與查詢到來順序一致,需要額外的保序算法;另外,該方案增大了索引結(jié)構(gòu)所占用的空間大小(用于增加鍵值緩存數(shù)組),因此對鍵值緩存數(shù)組的選取需進行較為完善的空間代價分析.

    2.2 基于字典(trie)結(jié)構(gòu)的內(nèi)存索引

    文獻[25]首次形式化的給出了trie(也稱數(shù)字搜索樹digital search tree[16])結(jié)構(gòu)的概念——一種類似于字典的數(shù)據(jù)索引方式,直接通過對要查找的原始數(shù)據(jù)的每一位進行索引來組織整個索引結(jié)構(gòu),常被用于對字符串?dāng)?shù)據(jù)建立索引.在2011年SIGMOD Programming Contest中,德累斯頓工業(yè)大學(xué)的Kissinger等人組成的團隊所提出的針對內(nèi)存數(shù)據(jù)的廣義前綴搜索樹(Generalized Prefix Search Tree GPS-Tree)[26,27]索引結(jié)構(gòu),取得了很好的成績.該結(jié)構(gòu)以傳統(tǒng)trie-tree為基礎(chǔ),用原始數(shù)據(jù)(限定為數(shù)值類型)對應(yīng)的二進制表示形式建立索引結(jié)構(gòu),并提出bypass structure和dynamic,prefix-based expansion算法壓縮索引樹高度從而取得了較好的查詢性能.

    文獻[16]提出的GPS-Tree索引結(jié)構(gòu),在樹高壓縮上已經(jīng)臻于完美;然而當(dāng)索引數(shù)據(jù)長度較大并且值域空間分布較小時,其固定的結(jié)點結(jié)構(gòu)使得結(jié)點中索引值浪費的情況非常普遍;并且其特定的針對二進制數(shù)據(jù)進行索引的限制條件也極大縮小了該結(jié)構(gòu)能夠處理的數(shù)據(jù)類型種類.為了解決這些問題,Leis等人提出了adaptive radix tree(AR-Tree)[28].在AR-tree中針對GPS-tree的問題作了一系列的改進:(1)索引結(jié)點的大小并不固定,而是根據(jù)其子結(jié)點的數(shù)目動態(tài)變化,從而盡可能地減少結(jié)點載入cache時導(dǎo)致的利用率下降問題;(2)形式化地定義了對傳統(tǒng)trie-tree高度進行壓縮的兩種算法(path compression和lazy expansion)并將其應(yīng)用于AR-tree中;(3)給出了常用的數(shù)據(jù)類型及其復(fù)合形式與二進制串的對應(yīng)轉(zhuǎn)換關(guān)系,拓展了AR-tree可用于索引的數(shù)據(jù)類型范圍.經(jīng)過如上的算法改進,AR-tree在內(nèi)存索引的查找性能相較于GPS-tree取得了進一步的提升.

    2.3 Hash及復(fù)合型結(jié)構(gòu)的內(nèi)存索引

    (1) 基于hash結(jié)構(gòu)的內(nèi)存索引

    傳統(tǒng)的Hash索引結(jié)構(gòu)也被廣泛的用于磁盤數(shù)據(jù)庫中,其索引結(jié)構(gòu)不需要額外的存儲空間,并且能夠在O(1)的時間復(fù)雜度下準(zhǔn)確定位到所查找的數(shù)據(jù).將磁盤數(shù)據(jù)庫中的數(shù)據(jù)查找時間代價優(yōu)化至最小.從chained bucket hash[26]的提出到后來extendible hash[29]、linear hash[30]、modified linear hash[19]的改進,只是對映射沖突的處理、桶分裂的策略進行了性能優(yōu)化,并沒有針對內(nèi)存索引的結(jié)構(gòu)特性進行任何算法改進,直至2007年,由Ross提出的基于現(xiàn)代處理器的Hash預(yù)取算法[31]才將SIMD指令集融入到hash算法中,從內(nèi)存索引的角度提升傳統(tǒng)hash算法的索引構(gòu)造過程中數(shù)據(jù)組織的效率.

    回顧hash算法的發(fā)展史可看出,針對hash算法的內(nèi)存改進與傳統(tǒng)磁盤hash相比沒有明顯的區(qū)別,單獨的基于hash的內(nèi)存索引結(jié)構(gòu)在內(nèi)存數(shù)據(jù)庫系統(tǒng)中并不常見,大多被用作分布式環(huán)境下原始數(shù)據(jù)分布的一種平衡性策略.

    (2) 復(fù)合型結(jié)構(gòu)的內(nèi)存索引

    由于其對于字符串類型數(shù)據(jù)的完美索引方式,使得Trie索引結(jié)構(gòu)及其變型總能達到相對較優(yōu)的性能;但Trie的先天性結(jié)構(gòu)問題導(dǎo)致在內(nèi)存索引中對cache的利用率比較低下.因此,以Trie結(jié)構(gòu)為基礎(chǔ),添加各種輔助結(jié)構(gòu)優(yōu)化其針對內(nèi)存數(shù)據(jù)的索引能力成為復(fù)合型內(nèi)存索引結(jié)構(gòu)的主要組成方式.

    Trie與hash結(jié)構(gòu)的結(jié)合:眾所周知,trie結(jié)構(gòu)對字符串類型的數(shù)據(jù)有較好的索引效率,而hash可以根據(jù)數(shù)據(jù)的不同特征將原始數(shù)據(jù)劃分為不同的模塊.正如之前所說,由于Trie的基本結(jié)構(gòu)中結(jié)點大小固定,當(dāng)索引數(shù)據(jù)長度較大并且取值空間分布較小時,結(jié)點中索引項浪費情況明顯;而結(jié)合hash先對數(shù)據(jù)進行分組,使得同一組中的數(shù)據(jù)范圍相對縮小,可以有效的提升trie結(jié)構(gòu)中索引結(jié)點的有效利用率.文獻[32,33]中分別對trie和hash結(jié)構(gòu)進行了結(jié)合,相較于原始的結(jié)構(gòu)有效的提升了索引的查找效率.

    Trie與比較樹類型索引結(jié)構(gòu)的結(jié)合:由于trie結(jié)構(gòu)本身的不保序性導(dǎo)致其無法應(yīng)對范圍查詢,而在現(xiàn)實應(yīng)用中絕大多數(shù)情況下會面臨范圍查詢的需求.因此借鑒比較樹類型索引的特性對trie進行改進,使其能夠支持范圍查詢也得到廣泛的研究:文獻[34,35]中給出了trie與B/T-Tree結(jié)合的算法;文獻[36]中給出了trie與CSB+Tree結(jié)合產(chǎn)生的索引結(jié)構(gòu),在滿足范圍字符串查詢的基礎(chǔ)上綜合考量了緩存敏感性問題,對內(nèi)存索引更具針對性.

    3 分布式內(nèi)存數(shù)據(jù)庫中索引的應(yīng)用

    隨著大數(shù)據(jù)時代的到來,數(shù)據(jù)處理系統(tǒng)所要處理的數(shù)據(jù)規(guī)模日益增大.傳統(tǒng)的單機式系統(tǒng)已逐漸無法滿足應(yīng)用對處理性能的所提出的要求,內(nèi)存數(shù)據(jù)處理系統(tǒng)也逐漸向分布式方向發(fā)展.隨之而來的針對內(nèi)存數(shù)據(jù)建立的索引結(jié)構(gòu)必然要針對分布式數(shù)據(jù)存儲進行有效的調(diào)整,使其在分布式環(huán)境下仍然能夠高效進行數(shù)據(jù)查找過程中的過濾,快速精準(zhǔn)的定位數(shù)據(jù)位置.

    目前,對分布式內(nèi)存數(shù)據(jù)庫的研究還剛剛開始,尚未有非常完善的分布式內(nèi)存數(shù)據(jù)庫系統(tǒng).memSQL[37]作為一個分布式內(nèi)存數(shù)據(jù)庫系統(tǒng),完全遵從傳統(tǒng)的ACID事務(wù)準(zhǔn)則;利用無鎖的數(shù)據(jù)結(jié)構(gòu)和即時編譯器(Just-In-Time Compiler,JIT Compiler)處理高負(fù)荷的工作流,使得數(shù)據(jù)處理性能得到很大的提升;然而,其對數(shù)據(jù)的獲取并沒有添加任何基于索引算法的加速,仍舊采取簡單的順序掃描策略.除此之外,以SAP公司開發(fā)的商業(yè)內(nèi)存數(shù)據(jù)庫系統(tǒng)HANA[13]為例,雖然有分布式版本,但是相較于其單機版本的性能優(yōu)化仍有一定的差距;并且SAP開發(fā)人員并沒有提供對HANA的主數(shù)據(jù)建立內(nèi)存索引的功能,只是在其用于處理增刪改等OLTP操作的deta內(nèi)存區(qū)默認(rèn)建立了CSB+Tree的索引結(jié)構(gòu)以便快速定位已被修改的數(shù)據(jù).而對整個的未被修改的原始數(shù)據(jù)的搜索,其認(rèn)為在內(nèi)存環(huán)境下的列存儲數(shù)據(jù),順序掃描的速率已經(jīng)足夠迅速,可以滿足日常應(yīng)用對數(shù)據(jù)查詢的性能要求.

    由于分布式內(nèi)存數(shù)據(jù)庫系統(tǒng)的研究并不成熟,相應(yīng)的分布式內(nèi)存數(shù)據(jù)索引結(jié)構(gòu)的探索也并沒有系統(tǒng)的展開.如何結(jié)合當(dāng)前硬件的CPU-Cache-Memory架構(gòu)對已有的單機內(nèi)存索引結(jié)構(gòu)進行分布式拓展,使其能夠無縫的融入已有的分布式內(nèi)存數(shù)據(jù)庫系統(tǒng)從而大幅度提升數(shù)據(jù)查找過程的性能,成為內(nèi)存索引研究領(lǐng)域的難點問題之一.

    4 未來展望

    當(dāng)今是網(wǎng)絡(luò)極具膨脹發(fā)展的時代,數(shù)據(jù)產(chǎn)生量日益增多,大規(guī)模數(shù)據(jù)的有效管理問題臻待解決,大數(shù)據(jù)的管理技術(shù)也已經(jīng)成為當(dāng)前和未來一段時間內(nèi)計算機領(lǐng)域的重要研究課題之一[41].

    4.1 數(shù)據(jù)及應(yīng)用的發(fā)展趨勢

    隨著云時代的來臨,大數(shù)據(jù)也吸引了越來越多的關(guān)注.2008年Nature上出現(xiàn)“大數(shù)據(jù)”??痆42],而時至今日大數(shù)據(jù)時代早已開啟.盡管傳統(tǒng)的基于磁盤的數(shù)據(jù)庫系統(tǒng)在處理傳統(tǒng)的應(yīng)用時表現(xiàn)出了優(yōu)異的性能,但在不同的時代所要處理的數(shù)據(jù)規(guī)模也大不相同.例如在Web 1.0時代,整個互聯(lián)網(wǎng)的數(shù)據(jù)總規(guī)模較小,數(shù)據(jù)管理較為簡單;而隨著Web 2.0、Web 3.0時代的到來,所有的互聯(lián)網(wǎng)用戶均可在互聯(lián)網(wǎng)上產(chǎn)生數(shù)據(jù)記錄.以社交媒體為例,F(xiàn)aceBook的日數(shù)據(jù)產(chǎn)生量已經(jīng)達到TB級.日益龐大的網(wǎng)絡(luò)數(shù)據(jù)規(guī)模對數(shù)據(jù)的有效管理提出了新的挑戰(zhàn),目前大數(shù)據(jù)處理中最大的困難并非是如何存儲規(guī)模龐大的數(shù)據(jù),而是如何從這些海量數(shù)據(jù)中高效檢索出所需要的數(shù)據(jù),并對其進行處理.

    隨著數(shù)據(jù)規(guī)模的日益增大,數(shù)據(jù)處理系統(tǒng)也逐步面臨更新改革.在最初的數(shù)據(jù)庫誕生之際,基于單機的簡單的磁盤數(shù)據(jù)庫管理系統(tǒng)能夠充分滿足當(dāng)時數(shù)據(jù)處理的需求;隨著時間的推移逐步出現(xiàn)了分布式數(shù)據(jù)庫系統(tǒng).當(dāng)今各個不同企業(yè)或組織的應(yīng)用不同,系統(tǒng)設(shè)計的目標(biāo)、所面向的負(fù)載也不盡相同,傳統(tǒng)的面向磁盤的數(shù)據(jù)庫系統(tǒng)所支持的數(shù)據(jù)分析處理功能受到前所未有的挑戰(zhàn),類似于Hadoop[43],HBase[44],Cassandra[45]等完全顛覆數(shù)據(jù)庫的ACID事務(wù)準(zhǔn)則[46]而基于key-value的分布式存儲處理系統(tǒng)也得到廣泛的應(yīng)用,并在海量數(shù)據(jù)的并行處理中取得了非常好的性能提升.另一方面,隨著硬件技術(shù)的革新,內(nèi)存價格迅速下降導(dǎo)致單機特別是高性能服務(wù)器的內(nèi)存容量日趨增大,基于內(nèi)存的數(shù)據(jù)處理系統(tǒng)也應(yīng)運而生,Spark、Shark[47]等對Hadoop的內(nèi)存拓展系統(tǒng)也得到廣泛的應(yīng)用.同時,如何將傳統(tǒng)的磁盤數(shù)據(jù)庫進行內(nèi)存拓展也引起越來越多人的興趣.與傳統(tǒng)的磁盤數(shù)據(jù)庫相比,內(nèi)存數(shù)據(jù)庫并不是單純的增加了緩沖區(qū)的大小.當(dāng)傳統(tǒng)的磁盤I/O瓶頸消失后,CPU與內(nèi)存間的數(shù)據(jù)獲取時間差異也成為新的內(nèi)存數(shù)據(jù)庫中的系統(tǒng)瓶頸.于是,對內(nèi)存中數(shù)據(jù)快速有效的獲取問題成為分布式內(nèi)存數(shù)據(jù)庫領(lǐng)域中新的研究熱點.隨著內(nèi)存數(shù)據(jù)庫的發(fā)展和分布式數(shù)據(jù)管理技術(shù)的提高,針對分布式的內(nèi)存數(shù)據(jù)庫系統(tǒng)的研究也成為新的領(lǐng)域熱點問題.如何針對不同的數(shù)據(jù)類型、分布規(guī)律、查詢處理頻率等信息建立相對應(yīng)的高效的分布式內(nèi)存索引結(jié)構(gòu)引起許多業(yè)內(nèi)人士的討論研究.

    嶄新的應(yīng)用需求是推動數(shù)據(jù)庫技術(shù)發(fā)展的源動力.企業(yè)中實際的應(yīng)用需求決定了數(shù)據(jù)庫系統(tǒng)發(fā)展及性能提升的研究方向.現(xiàn)今時代,數(shù)據(jù)量爆炸,對數(shù)據(jù)的實時性分析要求越來越高,例如證券交易所中對股票行情的實時展示,金融機構(gòu)所提供的人們信用卡的近期消費情況統(tǒng)計分析等,這些應(yīng)用導(dǎo)致企業(yè)對能夠處理大數(shù)據(jù)量的實時分析系統(tǒng)的需求日益緊迫.毫無疑問,新生的分布式內(nèi)存數(shù)據(jù)庫系統(tǒng)在分布式數(shù)據(jù)處理效率上取得了極大的提升,并且依舊兼容傳統(tǒng)的SQL查詢方式,對上層的應(yīng)用接口并未進行任何改變使得其更容易被企業(yè)所接收.同時,在傳統(tǒng)數(shù)據(jù)庫中極大提升搜索速率的磁盤索引結(jié)構(gòu)也被借鑒到內(nèi)存數(shù)據(jù)庫中,針對內(nèi)存數(shù)據(jù)的有效索引既要考慮分布式集群內(nèi)存數(shù)據(jù)的分布情況,又要結(jié)合CPU-Cache-Memory的新型架構(gòu),使得內(nèi)存數(shù)據(jù)索引的結(jié)構(gòu)與傳統(tǒng)的磁盤索引不盡相同,針對不同類型的應(yīng)用需求都可以考慮建立相對應(yīng)的查詢加速索引結(jié)構(gòu).

    4.2 未來內(nèi)存索引研究的機遇與挑戰(zhàn)

    索引的有效cache:Cache-Memory間的訪問延遲相較于Memory-Disk間更加微小(圖3),如何利用有效的索引結(jié)構(gòu)在這更小的訪問延遲中加速數(shù)據(jù)的訪問效率,這是內(nèi)存索引所要考慮的重要問題之一.由于在數(shù)據(jù)訪問過程中cache失效所帶來的時間消耗很大,利用有效策略使得在訪問內(nèi)存索引結(jié)構(gòu)的過程中盡量避免cache失效成為提升整個數(shù)據(jù)訪問性能的關(guān)鍵技術(shù).隨著數(shù)據(jù)規(guī)模的增大,如何設(shè)計高效的索引壓縮算法,以盡可能減少索引所占用的空間,從而使得整個或者絕大部分的索引結(jié)構(gòu)能夠常駐在L3 cache中,在索引的訪問過程中消除cache失效所產(chǎn)生的性能損耗,這些是未來設(shè)計內(nèi)存索引結(jié)構(gòu)所要面對的重要問題.

    硬件變化:由于cache結(jié)構(gòu)的特殊性所帶來的cache敏感性,使得當(dāng)今索引在設(shè)計的時候都要充分考慮所針對集群的具體架構(gòu);并且為了使得索引的搜索效率達到最大化,類似于SIMD指令技術(shù)及NUMA架構(gòu)的訪問性能等都做了針對性的優(yōu)化,這使得索引結(jié)構(gòu)在不同配置集群間的可移植性受到限制,從而影響整個內(nèi)存數(shù)據(jù)庫系統(tǒng)的集群可移植性.

    分布式索引拓展:從本文第2、3節(jié)可看出,雖然內(nèi)存索引的研究已經(jīng)歷經(jīng)了三十多年,但其研究領(lǐng)域依局限于單機的環(huán)境,對現(xiàn)今流行的分布式環(huán)境并沒有給出較好的拓展策略.而隨著大數(shù)據(jù)時代的到來,海量的數(shù)據(jù)規(guī)模對單機的處理器性能提出了非常高的要求,使得絕大多數(shù)企業(yè)都選擇了分布式的處理環(huán)境從而減輕對單機的性能限制.類似于Hadoop、Shark、Spark等基于Key-Value存儲方式的分布式數(shù)據(jù)處理系統(tǒng)得到廣泛的應(yīng)用.而內(nèi)存數(shù)據(jù)庫系統(tǒng)從原來的單機版本(傳統(tǒng)的MonetDB[20])向分布式版本拓展也變得尤為迫切.針對單機的內(nèi)存索引結(jié)構(gòu)勢必要進行分布式的改進,以便在分布式集群環(huán)境下繼續(xù)有效的提升數(shù)據(jù)查找過程中的效率.

    海量數(shù)據(jù)的地址表示:在傳統(tǒng)的磁盤數(shù)據(jù)庫中,除非外力進行干預(yù)(如人工進行數(shù)據(jù)遷徙)否則原始數(shù)據(jù)表格在磁盤上的位置保持不變;因此,磁盤索引的葉子結(jié)點可以直接用數(shù)據(jù)所在磁盤的邏輯地址來指示數(shù)據(jù)位置.而在內(nèi)存數(shù)據(jù)庫系統(tǒng)中,不論內(nèi)存容量如何增大,系統(tǒng)運行過程中總是無法保證有足夠大的內(nèi)存空間可以使得所有的表數(shù)據(jù)都完全被載入.因此,內(nèi)存數(shù)據(jù)庫系統(tǒng)中也會存在數(shù)據(jù)在內(nèi)存與磁盤間的交換(swap).一旦內(nèi)存中原始數(shù)據(jù)被swap到磁盤,當(dāng)其重新被載入內(nèi)存時,操作系統(tǒng)所分配給它的內(nèi)存地址幾乎不可能與之前的地址完全一致;因此,在內(nèi)存索引結(jié)構(gòu)中,葉子結(jié)點索引數(shù)據(jù)時并不能直接使用其在內(nèi)存中的邏輯地址.通常情況下,對小規(guī)模的數(shù)據(jù)而言該問題的解決辦法為用數(shù)據(jù)相對于某些特定標(biāo)志位置的偏移來指示數(shù)據(jù)在內(nèi)存中的位置,這樣只要原始數(shù)據(jù)的排序保持不變,無論其是否因內(nèi)存不足被交換到磁盤過,只要重新被載入內(nèi)存,都可以根據(jù)其相對目標(biāo)位置的偏移準(zhǔn)確的進行定位.隨著數(shù)據(jù)規(guī)模的增大,使得存儲相對目標(biāo)偏移所需的空間隨之越來越大,索引結(jié)構(gòu)葉子結(jié)點的規(guī)模也急劇上升,非常不利于整個索引結(jié)構(gòu)在L3 cache中的常駐存儲,因此,當(dāng)數(shù)據(jù)規(guī)模龐大時,如何有效地表示數(shù)據(jù)所處的位置從而高效地定位數(shù)據(jù)也是未來內(nèi)存索引要考慮的一個重要因素.

    4.3 分布式內(nèi)存索引探索@CLAIMS[48]

    當(dāng)今時代數(shù)據(jù)規(guī)模急劇增長,對數(shù)據(jù)的實時處理需求日益提高,即使當(dāng)今單臺服務(wù)器結(jié)點的性能可以達到非常高的標(biāo)準(zhǔn),不論是處理器數(shù)目還是內(nèi)存容量都相當(dāng)可觀,集中式的內(nèi)存數(shù)據(jù)庫系統(tǒng)仍然極大的限制了其數(shù)據(jù)處理的能力及規(guī)模.內(nèi)存數(shù)據(jù)庫的分布式拓展顯得尤為重要.而目前并沒有相對成熟的分布式內(nèi)存數(shù)據(jù)庫系統(tǒng)及比較成熟的內(nèi)存索引結(jié)構(gòu).華東師范大學(xué)數(shù)據(jù)科學(xué)與工程學(xué)院在此類系統(tǒng)的研發(fā)上已經(jīng)開展了近兩年的工作,致力于設(shè)計與實現(xiàn)一個集群感知的基于內(nèi)存的分布式數(shù)據(jù)庫系統(tǒng)(Cluster-Aware In-Memory System, CLAIMS).該系統(tǒng)中也已經(jīng)設(shè)計了針對內(nèi)存數(shù)據(jù)的分布式索引結(jié)構(gòu),該索引基于傳統(tǒng)的B-tree[15],充分考慮cache的敏感性問題;并在此基礎(chǔ)上結(jié)合列存儲及分布式數(shù)據(jù)組織的特點,對該結(jié)構(gòu)作進一步的優(yōu)化:

    (1) 考慮“cache敏感性”問題,對傳統(tǒng)的B-tree索引進行內(nèi)存改進:消除子結(jié)點指針、數(shù)據(jù)指針分塊存儲、結(jié)點cache line對齊,得到CSB-tree結(jié)構(gòu).

    (2) 結(jié)合分布式hash和NUMA技術(shù)對數(shù)據(jù)進行以chunk為單位的分布式內(nèi)存bounding,并對每個chunk建立CSB-tree構(gòu)成分布式環(huán)境下的Clustered CSB-trees.

    (3) 利用SIMD指令集對Clustered CSB-Trees查詢算法進行加速,以期達到更高的訪問效率.

    (4) 根據(jù)索引數(shù)據(jù)的值域進行結(jié)點壓縮,進一步增大索引結(jié)點扇出,降低樹高減少層間偏移產(chǎn)生cache miss的次數(shù).

    經(jīng)過一系列的優(yōu)化,我們所提出的clustered enhanced CSB-trees能夠高效地應(yīng)用于分布式內(nèi)存數(shù)據(jù)索引,并在CLAIMS中得到實驗驗證.

    5 小 結(jié)

    隨著內(nèi)存容量的大幅度增加及價格的急劇下降,使得單機的內(nèi)存配置快速提升.內(nèi)存數(shù)據(jù)庫相較于傳統(tǒng)數(shù)據(jù)庫的瓶頸的改變,導(dǎo)致之前在傳統(tǒng)磁盤數(shù)據(jù)庫中的所有性能優(yōu)化策略都要在內(nèi)存數(shù)據(jù)庫系統(tǒng)中重新考慮.本文對近30年來內(nèi)存索引結(jié)構(gòu)的技術(shù)發(fā)展,作了詳細(xì)的回顧,在此過程中也發(fā)現(xiàn)由于內(nèi)存索引的特殊性,所以其結(jié)構(gòu)的發(fā)展與計算機CPU-Cache-Memory架構(gòu)的發(fā)展有著密切的聯(lián)系.并且給出大數(shù)據(jù)時代到來對內(nèi)存結(jié)構(gòu)分布式拓展的挑戰(zhàn),在分布式環(huán)境下,無論是內(nèi)存數(shù)據(jù)庫系統(tǒng)還是索引結(jié)構(gòu)都還有長足的發(fā)展空間.本文最后還簡單介紹了華東師范大學(xué)數(shù)據(jù)科學(xué)與工程研究院在分布式內(nèi)存數(shù)據(jù)庫系統(tǒng)及分布式內(nèi)存索引方面正在進行的探索性工作.

    [1] AMMANN A C, HANRAHAN M B, KRISHNAMURTHY R. Design of a memory resident DBMS[C]//Proc IEEE COMPCOM Conf, 1985.

    [2] 微硬盤磁頭彈性臂的研究[R/OL].http://www.docin.com/p-270914249.html

    [3] JANNINK J. Implementing deletion in B+-trees[J]. SIGMOD Record, 1995, 24(1).

    [4] WOLF W A, MCKEE S A. Hitting the memory wall: Implications of the obvious[C]//ACM SIGARCH, 1995.

    [5] RAO J, ROSS K A. Cache conscious indexing for decision-support in main memory[C]//Proceedings of the 25th VLDB Conference, 1999.

    [6] RAO J, ROSS K A. Making B+-trees cache conscious in main memory[C]//SIGMOD, 2000.

    [7] LEE I, SHIM J, LEE S, et al. CST-Trees: Cache Sensitive T-Trees[C]//DASFAA 2007, LNCS 4443, 2007: 398-409.

    [8] AILAMAKI A, et al. DBMSs on a modern processor: Where does time go. In Proceedings of the 25th VLDB Conference, 1999.

    [9] WIKIPEDIA. Non-uniform memory access [EB/OL].[2014-08-31]. http://en.wikipedia.org/wiki/Non-uniform_memory_access.

    [10] LANEY D. 3D data management: controlling data volume, velocity and variety[R]. Technical Report, Meta Group, 2001.

    [11] Amplab spark-lightning-fast cluster computing: https://amplab.cs.berkeley.edu/projects/spark-lightning-fast-cluster-computing.

    [12] RAMCloud[EB/OL]. https://ramcloud.stanford.edu/wiki/display/ramcloud/RAMCloud.

    [13] Homepage for SAP HANA Database: http://www.saphana.com/welcome.

    [14] SWART G. MinSQL: a simple componentized database for the classroom[C]//PPPJ, 2003:129-132.

    [15] BAYER R, MCCREIGHT E M. Organization and maintenance of large ordered indices[J]. Acta Inf, 1972(1):173-189.

    [16] KNUTH D E. The art of computer programming Volume I: fundamental algorithms[M], 3rd ed. Addison-Wesley, 1997.

    [17] Single Instruction Multiple Data: http://en.wikipedia.org/wiki/SIMD

    [18] AHO A, HOPCROFT J, ULLMAN J D. The design and analysis of computer algorithms, Addison-Wesley Publishing Company, 1974.

    [19] LEHMAN T J, et al. A study of index structures for main memory database management systems[C]//Proceedings of the 12th VLDB Conference, 1986.

    [20] Homepage for MonetDB[EB/OL]. http://www.monetdb.org/Home

    [21] ZHOU J, ROSS K A. Implementing database operations using SIMD instructions[C]//SIGMOD, 2002.

    [22] SCHLEGEL B, GEMULLA R, LEHNER W. k-Ary search on modern processors[C]//DaMoN, 2009.

    [23] KIM C, CHUGANI J, SATISH N, et al. FAST: fast architecture sensitive tree search on modern CPUs and GPUs[C]//SIGMOD, 2010:339-350.

    [24] ZHOU J, ROSS K A. Buffering accesses to memory-resident index structures[J].VLDB, 2003.

    [25] FREDKIN E. Trie Memory[J]. Communications of the ACM, 1960, 3(9):490-499.

    [26] BOEHM M, SCHLEGEL B, VOLK P B, et al. Efficient in-memory indexing with generalized prefix trees[J]. BTW, 2011:52-55.

    [27] KISSINGER T, SCHLEGEL B, BOEHM M, et al. A high-throughput in-memory index, durable on flash-based SSD[J]. SIGMOD, 2012,41(3):40-50.

    [28] LEIS V, KEMPER A, NEUMANN T. The adaptive radix tree: aRTful indexing for main-memory databases[J]. ICDE, 2013.

    [29] FAGIN R, NIEVERGELT J, PIPPENGER N, et al. Extendible hashing—A fast access method for dynamic files[J]. ACM Trans Database Syst, 1979, 4(3):315-344.

    [30] LARSON P. Linear hashing with separators-a dynamic hashing scheme achieving one-access retrieval[J]. ACM Trans Database Syst, 1988,13(3):366-388.

    [31] ROSS K A. Efficient hash probes on modern processors. In ICDE, 2007.

    [32] COFFMAN E G, EVE J. File structures using hashing functions[J]. Commun ACM, 1970, 13(7):427-433.

    [33] ASKITIS N, SINHA R. HAT-Trie: a cache-conscious trie-based data structure for strings. In ACSC, 2007.

    [34] BOHANNON P, MCILROY P, RASTOGI R. Main-memory index structures with fixed-size partial keys. In SIGMOD, 2001.

    [35] LUAN H, DU X, WANG S. Prefetching J+-tree: a Cache-optimized main memory database index structure[J]. J Comput Sci Technol, 2009,24(4):687-707.

    [36] BINNIG C, HILDENBRAND S, FARBER F. Dictionary-based order preserving string compression for main memory column stores[C]//SIGMOD, 2009.

    [37] Homepage for memsql: http://www.memsql.com.

    [38] AGUILERA M K, GOLAB W, SHAH M A. A practical scalable distributed b-tree[C]//VLDB, 2008.

    [39] WU S, JIANG D, OOI B C, et al. Efficient b-tree based indexing for cloud data processing[C]//Proc VLDB Endow, 2010,3(1): 1207-1218.

    [40] MOUZA C, LITWIN W. Sd-rtree: A scalable distributed rtree[C]//ICDE, 2007: 296-305.

    [41] 宮學(xué)慶,金澈清,王曉玲,等. 數(shù)據(jù)密集型科學(xué)與工程:需求和挑戰(zhàn)[J]. 計算機學(xué)報,2012, 35(8): 1563-1578.

    [42] Big Data Section in Nature: http://www.nature.com/news/specials/bigdata/index.html.

    [43] WHITE T.Hadoop權(quán)威指南[M].周敏奇,王曉玲,金澈清,錢衛(wèi)寧譯.2版. 北京:清華出版社,2011.

    [44] Apache HBASE[EB/OL]. http://hbase.apache.org.

    [45] Apache Cassandra[EB/OL]. http://cassandra.apache.org.

    [46] HAERDER T, REUTER A. Principles of transaction-oriented database recovery[C]//ACM Computing Srveys, 1983, 15(4): 287-317.

    [47] XIN R S, ROSEN T, ZAHARIA M, et al. Shark: SQL and rich analytics at scale[C]//SIGMOD, 2013: 13-24.

    [48] CLAIMS Homepage at Github[EB/OL]. https://github.com/scdong/Claims/wiki.

    (責(zé)任編輯 王善平)

    In-memory index: Performance enhancement techniques leveraging on processors

    DONG Shao-chan, ZHOU Min-qi, ZHANG Rong, ZHOU Ao-ying

    (InstituteforDataScienceandEngineering,SoftwareEngineeringInstitute,EastChinaNormalUniversity,Shanghai200062,China)

    As main memory capacities grows larger and larger, the memory era has arrived and in-memory databases have taken the place of traditional disk-based databases to provide efficient data management. In this paper, we analyzed the fundamental elements in in-memory index designing: summarized and evaluated the existing index structures, pointing out the future opportunities and challenges based on the development trend of current applications. Finally, we introduced our on-going distributed in-memory index studies on the Cluster Aware In-Memory System (CLAIMS).

    in-memory indexing; cache utility; distributed in-memory database; index compressing

    1000-5641(2014)05-0192-15

    2014-06

    國家自然科學(xué)基金(61332006)

    董紹嬋,女,碩士研究生,研究方向為內(nèi)存數(shù)據(jù)庫系統(tǒng).Email:scdong510@163.com

    周敏奇,男,副教授,碩士生導(dǎo)師,研究方向為內(nèi)存數(shù)據(jù)庫系統(tǒng).Email:mqzhou@sei.ecnu.edu.cn.

    TP392

    A

    10.3969/j.issn.1000-5641.2014.05.017

    猜你喜歡
    數(shù)據(jù)庫結(jié)構(gòu)
    《形而上學(xué)》△卷的結(jié)構(gòu)和位置
    論結(jié)構(gòu)
    中華詩詞(2019年7期)2019-11-25 01:43:04
    新型平衡塊結(jié)構(gòu)的應(yīng)用
    模具制造(2019年3期)2019-06-06 02:10:54
    數(shù)據(jù)庫
    財經(jīng)(2017年15期)2017-07-03 22:40:49
    數(shù)據(jù)庫
    財經(jīng)(2017年2期)2017-03-10 14:35:35
    論《日出》的結(jié)構(gòu)
    數(shù)據(jù)庫
    財經(jīng)(2016年15期)2016-06-03 07:38:02
    數(shù)據(jù)庫
    財經(jīng)(2016年3期)2016-03-07 07:44:46
    數(shù)據(jù)庫
    財經(jīng)(2016年6期)2016-02-24 07:41:51
    創(chuàng)新治理結(jié)構(gòu)促進中小企業(yè)持續(xù)成長
    午夜亚洲福利在线播放| 亚洲av第一区精品v没综合| 丝袜人妻中文字幕| 国产高清国产精品国产三级| 精品久久久精品久久久| 伊人久久大香线蕉亚洲五| 欧美黑人精品巨大| 欧美日韩乱码在线| 中出人妻视频一区二区| 天天躁日日躁夜夜躁夜夜| 黑人巨大精品欧美一区二区mp4| 日韩欧美国产一区二区入口| 国产免费av片在线观看野外av| 精品国产一区二区三区久久久樱花| 久久性视频一级片| 夜夜躁狠狠躁天天躁| 亚洲一区中文字幕在线| 新久久久久国产一级毛片| 深夜精品福利| 青草久久国产| 免费av中文字幕在线| 天天躁日日躁夜夜躁夜夜| 欧美 日韩 精品 国产| 久久精品国产亚洲av香蕉五月 | x7x7x7水蜜桃| 亚洲欧美一区二区三区久久| 一区二区三区激情视频| 国产91精品成人一区二区三区| 国产伦人伦偷精品视频| 最新在线观看一区二区三区| 久久青草综合色| 国产亚洲一区二区精品| 国产一卡二卡三卡精品| 一级片免费观看大全| 国产成人一区二区三区免费视频网站| 免费在线观看日本一区| 建设人人有责人人尽责人人享有的| 巨乳人妻的诱惑在线观看| 亚洲av日韩精品久久久久久密| 亚洲人成电影观看| 熟女少妇亚洲综合色aaa.| netflix在线观看网站| 麻豆国产av国片精品| 亚洲精品国产一区二区精华液| 久久人人爽av亚洲精品天堂| 精品一区二区三区视频在线观看免费 | 伦理电影免费视频| 精品福利观看| 久久亚洲精品不卡| 欧美日韩成人在线一区二区| 欧美另类亚洲清纯唯美| 欧美日韩av久久| 亚洲国产看品久久| 久久精品成人免费网站| 欧美中文综合在线视频| 欧美乱色亚洲激情| 天天躁狠狠躁夜夜躁狠狠躁| 亚洲av第一区精品v没综合| av片东京热男人的天堂| 亚洲一区二区三区不卡视频| 91成人精品电影| 国产av精品麻豆| 日本撒尿小便嘘嘘汇集6| 黄色a级毛片大全视频| 一二三四在线观看免费中文在| 一级a爱片免费观看的视频| 在线天堂中文资源库| 欧美日韩亚洲综合一区二区三区_| 亚洲精华国产精华精| 欧美色视频一区免费| 免费在线观看黄色视频的| 麻豆国产av国片精品| 精品无人区乱码1区二区| 久久久久久亚洲精品国产蜜桃av| 可以免费在线观看a视频的电影网站| 欧美中文综合在线视频| 欧美大码av| 久久青草综合色| 欧美国产精品va在线观看不卡| 欧美日韩精品网址| 纯流量卡能插随身wifi吗| 免费看a级黄色片| a级片在线免费高清观看视频| 日韩人妻精品一区2区三区| 色婷婷av一区二区三区视频| 香蕉久久夜色| 丰满的人妻完整版| 亚洲一卡2卡3卡4卡5卡精品中文| 欧美最黄视频在线播放免费 | 国产精品综合久久久久久久免费 | 欧美成人午夜精品| 99热只有精品国产| 久久久精品国产亚洲av高清涩受| 高潮久久久久久久久久久不卡| 91九色精品人成在线观看| 9191精品国产免费久久| 又紧又爽又黄一区二区| 中文字幕制服av| 午夜福利欧美成人| 久久香蕉国产精品| 成人免费观看视频高清| 亚洲av日韩精品久久久久久密| 满18在线观看网站| 欧美成狂野欧美在线观看| 一进一出抽搐动态| 欧美日韩亚洲国产一区二区在线观看 | 国产高清videossex| 亚洲精品国产色婷婷电影| 精品国产乱子伦一区二区三区| av电影中文网址| 免费看a级黄色片| 亚洲精品中文字幕一二三四区| 大码成人一级视频| 日韩中文字幕欧美一区二区| 捣出白浆h1v1| 国产精品亚洲av一区麻豆| 午夜91福利影院| 丁香欧美五月| 欧美日韩成人在线一区二区| 国产成人av激情在线播放| 不卡一级毛片| 精品国产乱码久久久久久男人| 操美女的视频在线观看| 色婷婷久久久亚洲欧美| 一区福利在线观看| 超色免费av| 免费观看精品视频网站| 涩涩av久久男人的天堂| 亚洲一码二码三码区别大吗| 搡老乐熟女国产| 身体一侧抽搐| 午夜福利免费观看在线| av片东京热男人的天堂| 九色亚洲精品在线播放| 十八禁网站免费在线| 国产精品成人在线| 又黄又粗又硬又大视频| 国产高清激情床上av| 中亚洲国语对白在线视频| 国产男女内射视频| 女人被躁到高潮嗷嗷叫费观| av有码第一页| 日韩欧美在线二视频 | 99久久国产精品久久久| 在线国产一区二区在线| 国产日韩欧美亚洲二区| 免费人成视频x8x8入口观看| 人人澡人人妻人| 亚洲专区中文字幕在线| 香蕉丝袜av| 亚洲avbb在线观看| 18禁观看日本| 精品福利永久在线观看| www.熟女人妻精品国产| 妹子高潮喷水视频| 国产伦人伦偷精品视频| xxx96com| 精品亚洲成a人片在线观看| 少妇裸体淫交视频免费看高清 | 夜夜躁狠狠躁天天躁| 成人av一区二区三区在线看| 精品久久久久久久毛片微露脸| 女人被狂操c到高潮| 精品熟女少妇八av免费久了| 我的亚洲天堂| 国产又爽黄色视频| 天天操日日干夜夜撸| 色尼玛亚洲综合影院| 欧美成人午夜精品| 中文字幕另类日韩欧美亚洲嫩草| 欧美中文综合在线视频| 欧美亚洲日本最大视频资源| 午夜福利免费观看在线| svipshipincom国产片| 9热在线视频观看99| 他把我摸到了高潮在线观看| 日本一区二区免费在线视频| 超碰成人久久| 亚洲成av片中文字幕在线观看| 视频区图区小说| 不卡av一区二区三区| 亚洲精品久久成人aⅴ小说| 一边摸一边抽搐一进一小说 | 黑丝袜美女国产一区| 亚洲欧美激情综合另类| 亚洲精品一卡2卡三卡4卡5卡| 久久精品国产清高在天天线| 欧美人与性动交α欧美精品济南到| 真人做人爱边吃奶动态| 国产高清激情床上av| 欧美精品一区二区免费开放| 国产在视频线精品| 日韩欧美三级三区| 国产亚洲欧美98| 在线观看66精品国产| 日韩欧美一区二区三区在线观看 | 亚洲色图av天堂| www.999成人在线观看| av福利片在线| 侵犯人妻中文字幕一二三四区| 亚洲精品美女久久久久99蜜臀| 视频区图区小说| 午夜激情av网站| 久久香蕉国产精品| 成人影院久久| 国产精品香港三级国产av潘金莲| 在线观看日韩欧美| 一级黄色大片毛片| 欧美日韩乱码在线| 热re99久久国产66热| 国产一区在线观看成人免费| 欧美乱妇无乱码| 国产在视频线精品| 国产精品九九99| 欧美另类亚洲清纯唯美| 黄色 视频免费看| 18禁美女被吸乳视频| 久久久久精品国产欧美久久久| 国产成人欧美| 国产精品久久视频播放| 久久 成人 亚洲| 国产av一区二区精品久久| 久久午夜亚洲精品久久| 久久精品亚洲熟妇少妇任你| 国产午夜精品久久久久久| 亚洲免费av在线视频| 亚洲国产精品合色在线| 欧美激情极品国产一区二区三区| 国产男女内射视频| 天天躁狠狠躁夜夜躁狠狠躁| 国产精华一区二区三区| 免费一级毛片在线播放高清视频 | 中文字幕制服av| 啪啪无遮挡十八禁网站| 亚洲成人手机| 中文字幕人妻丝袜一区二区| 99久久综合精品五月天人人| 亚洲精品国产区一区二| 久久亚洲真实| 搡老熟女国产l中国老女人| 搡老岳熟女国产| 精品熟女少妇八av免费久了| 亚洲五月色婷婷综合| 国产一区二区激情短视频| 成人三级做爰电影| 午夜福利视频在线观看免费| 中文字幕人妻熟女乱码| 国产精品1区2区在线观看. | 国产日韩一区二区三区精品不卡| 老熟女久久久| 国产熟女午夜一区二区三区| 久热爱精品视频在线9| 久久久国产精品麻豆| 亚洲国产中文字幕在线视频| 飞空精品影院首页| 十八禁人妻一区二区| 精品国内亚洲2022精品成人 | 69精品国产乱码久久久| 欧美精品啪啪一区二区三区| 日韩三级视频一区二区三区| 久久精品国产99精品国产亚洲性色 | 男人的好看免费观看在线视频 | 亚洲美女黄片视频| 国产精品美女特级片免费视频播放器 | 精品久久蜜臀av无| 精品亚洲成a人片在线观看| 国产成人影院久久av| 色综合婷婷激情| 欧美老熟妇乱子伦牲交| 少妇的丰满在线观看| 超碰97精品在线观看| 天天添夜夜摸| 久久国产亚洲av麻豆专区| 久久狼人影院| 18禁裸乳无遮挡动漫免费视频| 中文亚洲av片在线观看爽 | 丰满饥渴人妻一区二区三| 中文字幕另类日韩欧美亚洲嫩草| 国产成人免费无遮挡视频| 一a级毛片在线观看| 日韩有码中文字幕| 欧美日韩亚洲高清精品| 一级,二级,三级黄色视频| 久久国产亚洲av麻豆专区| 国产精品久久久人人做人人爽| 日韩一卡2卡3卡4卡2021年| 变态另类成人亚洲欧美熟女 | 中文字幕人妻丝袜一区二区| 国产精品 欧美亚洲| 大型黄色视频在线免费观看| 18禁裸乳无遮挡免费网站照片 | 岛国毛片在线播放| 在线播放国产精品三级| 亚洲国产精品sss在线观看 | 国产单亲对白刺激| 亚洲少妇的诱惑av| 免费不卡黄色视频| 国产日韩欧美亚洲二区| 99香蕉大伊视频| 亚洲五月色婷婷综合| 少妇裸体淫交视频免费看高清 | 欧美 亚洲 国产 日韩一| 欧美激情极品国产一区二区三区| 欧美国产精品一级二级三级| 自线自在国产av| 免费观看a级毛片全部| 欧美精品亚洲一区二区| 日韩欧美免费精品| 韩国av一区二区三区四区| 国产精品免费一区二区三区在线 | 久久人人97超碰香蕉20202| 中亚洲国语对白在线视频| 欧美乱码精品一区二区三区| 国产欧美亚洲国产| 一级毛片女人18水好多| 99热只有精品国产| 人人澡人人妻人| 91麻豆精品激情在线观看国产 | 女人爽到高潮嗷嗷叫在线视频| 99热只有精品国产| 黄片播放在线免费| 欧美黄色片欧美黄色片| 伦理电影免费视频| 国产91精品成人一区二区三区| 中出人妻视频一区二区| 乱人伦中国视频| 亚洲一卡2卡3卡4卡5卡精品中文| 热re99久久精品国产66热6| 亚洲七黄色美女视频| 一级毛片女人18水好多| 美女高潮喷水抽搐中文字幕| 欧洲精品卡2卡3卡4卡5卡区| 在线视频色国产色| 国产精品亚洲av一区麻豆| 纯流量卡能插随身wifi吗| 国产成人影院久久av| 成年人午夜在线观看视频| 黑丝袜美女国产一区| 一级毛片女人18水好多| 99精品欧美一区二区三区四区| √禁漫天堂资源中文www| 午夜福利视频在线观看免费| 性少妇av在线| 村上凉子中文字幕在线| 精品无人区乱码1区二区| 欧美亚洲日本最大视频资源| 国产色视频综合| 黄网站色视频无遮挡免费观看| 亚洲aⅴ乱码一区二区在线播放 | 国产真人三级小视频在线观看| 老司机午夜十八禁免费视频| 欧美 日韩 精品 国产| 又大又爽又粗| 精品国产亚洲在线| 亚洲一卡2卡3卡4卡5卡精品中文| 999精品在线视频| 亚洲五月婷婷丁香| 亚洲精品在线美女| tocl精华| 黄色 视频免费看| 免费观看a级毛片全部| 女同久久另类99精品国产91| 国产精品久久久久久人妻精品电影| 一本综合久久免费| 欧美日韩乱码在线| 曰老女人黄片| 日韩人妻精品一区2区三区| 在线十欧美十亚洲十日本专区| 成人亚洲精品一区在线观看| 亚洲精品av麻豆狂野| 1024香蕉在线观看| 怎么达到女性高潮| 亚洲精品国产精品久久久不卡| 正在播放国产对白刺激| avwww免费| 少妇的丰满在线观看| 日韩制服丝袜自拍偷拍| 视频区图区小说| 韩国精品一区二区三区| 麻豆国产av国片精品| 激情视频va一区二区三区| 在线观看午夜福利视频| 精品少妇一区二区三区视频日本电影| 18禁裸乳无遮挡免费网站照片 | 男女免费视频国产| 美女国产高潮福利片在线看| cao死你这个sao货| 国产视频一区二区在线看| 天天操日日干夜夜撸| 国产精品乱码一区二三区的特点 | 在线天堂中文资源库| 人人妻人人添人人爽欧美一区卜| 99国产精品免费福利视频| 国产高清国产精品国产三级| 18禁国产床啪视频网站| 国产高清videossex| 久久久精品免费免费高清| 精品欧美一区二区三区在线| 午夜福利欧美成人| 成人影院久久| 亚洲熟妇熟女久久| 亚洲欧美一区二区三区久久| 香蕉丝袜av| 欧美国产精品va在线观看不卡| 欧美日韩乱码在线| 国产精品98久久久久久宅男小说| 久久久久久久久久久久大奶| 美女国产高潮福利片在线看| 久久亚洲真实| 妹子高潮喷水视频| 精品国产一区二区久久| 女人高潮潮喷娇喘18禁视频| 99热网站在线观看| 国产成人系列免费观看| 精品久久蜜臀av无| 国产欧美日韩一区二区三| 欧洲精品卡2卡3卡4卡5卡区| 久久精品熟女亚洲av麻豆精品| 久久草成人影院| 99re在线观看精品视频| 欧洲精品卡2卡3卡4卡5卡区| 精品国产美女av久久久久小说| av一本久久久久| 深夜精品福利| 亚洲国产欧美网| 欧美日韩亚洲综合一区二区三区_| 香蕉久久夜色| 一级片免费观看大全| 国产精品1区2区在线观看. | 美女国产高潮福利片在线看| av超薄肉色丝袜交足视频| 777久久人妻少妇嫩草av网站| 久久亚洲真实| 999精品在线视频| 美女 人体艺术 gogo| 亚洲 国产 在线| 99热网站在线观看| 精品一品国产午夜福利视频| 国产精品 欧美亚洲| 国产精品国产av在线观看| svipshipincom国产片| av视频免费观看在线观看| 伦理电影免费视频| 欧美激情极品国产一区二区三区| 王馨瑶露胸无遮挡在线观看| 精品国产乱码久久久久久男人| 国产免费男女视频| 亚洲精华国产精华精| 精品一品国产午夜福利视频| 精品午夜福利视频在线观看一区| 欧美黑人精品巨大| 免费观看精品视频网站| 天堂√8在线中文| 精品国产国语对白av| 久久人妻福利社区极品人妻图片| 不卡av一区二区三区| 交换朋友夫妻互换小说| 在线观看免费视频日本深夜| 亚洲熟女精品中文字幕| 久久久久久久国产电影| 日本wwww免费看| 波多野结衣av一区二区av| 国产单亲对白刺激| 亚洲成人国产一区在线观看| 国产99久久九九免费精品| 啦啦啦 在线观看视频| 国产成人精品久久二区二区免费| 中文字幕人妻丝袜制服| 欧美激情久久久久久爽电影 | 天堂中文最新版在线下载| 色老头精品视频在线观看| 国产精品久久视频播放| 亚洲精品国产区一区二| 国产成人av教育| videos熟女内射| 日韩欧美在线二视频 | 久久精品人人爽人人爽视色| 在线观看舔阴道视频| 日韩视频一区二区在线观看| 亚洲一区二区三区不卡视频| 51午夜福利影视在线观看| a级毛片黄视频| 久久九九热精品免费| 欧美亚洲日本最大视频资源| 很黄的视频免费| 精品一品国产午夜福利视频| 丰满迷人的少妇在线观看| 日韩三级视频一区二区三区| 好看av亚洲va欧美ⅴa在| 久久99一区二区三区| 精品福利观看| 久99久视频精品免费| 乱人伦中国视频| 法律面前人人平等表现在哪些方面| 国产91精品成人一区二区三区| 怎么达到女性高潮| 一夜夜www| 一区二区三区激情视频| 视频区图区小说| 精品视频人人做人人爽| 国产高清国产精品国产三级| 在线天堂中文资源库| 午夜91福利影院| 色精品久久人妻99蜜桃| 欧美亚洲日本最大视频资源| 99久久精品国产亚洲精品| 精品国产一区二区三区四区第35| 成人18禁高潮啪啪吃奶动态图| 99国产精品免费福利视频| 色综合婷婷激情| av超薄肉色丝袜交足视频| 999久久久精品免费观看国产| 三级毛片av免费| 国产主播在线观看一区二区| 久久国产精品人妻蜜桃| 国产一区二区激情短视频| 国产在视频线精品| 大香蕉久久成人网| av中文乱码字幕在线| 亚洲国产中文字幕在线视频| 亚洲久久久国产精品| 在线观看免费高清a一片| 久久人妻熟女aⅴ| 久久久精品区二区三区| 极品人妻少妇av视频| 搡老岳熟女国产| 国产成人av激情在线播放| 19禁男女啪啪无遮挡网站| 亚洲欧美一区二区三区久久| 亚洲国产欧美一区二区综合| 亚洲欧美日韩另类电影网站| 一区在线观看完整版| 亚洲伊人色综图| 欧洲精品卡2卡3卡4卡5卡区| 欧美日本中文国产一区发布| 欧美乱码精品一区二区三区| 国产精品 国内视频| 悠悠久久av| 可以免费在线观看a视频的电影网站| 他把我摸到了高潮在线观看| 在线观看免费高清a一片| а√天堂www在线а√下载 | 色婷婷av一区二区三区视频| 人妻 亚洲 视频| 少妇猛男粗大的猛烈进出视频| 亚洲av日韩在线播放| 女同久久另类99精品国产91| 热99re8久久精品国产| 日韩 欧美 亚洲 中文字幕| 国产在线精品亚洲第一网站| 午夜福利在线免费观看网站| 成年人午夜在线观看视频| 香蕉国产在线看| 久久国产精品男人的天堂亚洲| 欧美久久黑人一区二区| 成在线人永久免费视频| 9热在线视频观看99| 麻豆国产av国片精品| 欧美av亚洲av综合av国产av| 亚洲精品国产色婷婷电影| 成人免费观看视频高清| 9热在线视频观看99| 国产熟女午夜一区二区三区| 国产精品久久久av美女十八| 9色porny在线观看| 在线看a的网站| 三上悠亚av全集在线观看| 老司机午夜福利在线观看视频| 精品乱码久久久久久99久播| 韩国av一区二区三区四区| 久久精品成人免费网站| 亚洲av成人不卡在线观看播放网| √禁漫天堂资源中文www| 国产一区二区激情短视频| 色老头精品视频在线观看| 久久久国产成人免费| tube8黄色片| 高潮久久久久久久久久久不卡| 狠狠婷婷综合久久久久久88av| 亚洲成人免费电影在线观看| 女人精品久久久久毛片| 亚洲成人国产一区在线观看| 天天躁日日躁夜夜躁夜夜| 最新的欧美精品一区二区| 99国产极品粉嫩在线观看| 国产片内射在线| 午夜亚洲福利在线播放| 国产99白浆流出| 自拍欧美九色日韩亚洲蝌蚪91| 精品人妻熟女毛片av久久网站| 欧美性长视频在线观看| 青草久久国产| 精品视频人人做人人爽| 日日摸夜夜添夜夜添小说| 夜夜爽天天搞| av天堂在线播放| 夜夜躁狠狠躁天天躁| 日本a在线网址| ponron亚洲| www.熟女人妻精品国产| 精品久久久久久久毛片微露脸| 又紧又爽又黄一区二区| 色婷婷av一区二区三区视频| 18禁国产床啪视频网站| av电影中文网址| 欧美日韩一级在线毛片| 久久精品aⅴ一区二区三区四区| 啦啦啦在线免费观看视频4| 啪啪无遮挡十八禁网站| 韩国精品一区二区三区| 成人影院久久| 在线看a的网站| 精品人妻1区二区| 欧美最黄视频在线播放免费 | 99香蕉大伊视频|