1. 程式人生 > 其它 >Tsunami: A Learned Multi-dimensional Index for Correlated Data and Skewed Workloads 論文解讀(VLDB 2021)

Tsunami: A Learned Multi-dimensional Index for Correlated Data and Skewed Workloads 論文解讀(VLDB 2021)

Tsunami: A Learned Multi-dimensional Index for Correlated Data and Skewed Workloads 論文解讀(VLDB 2021)

  • 本篇部落格是對發表在2021 VLDB上的# Tsunami: A Learned Multi-dimensional Index for Correlated Data and Skewed Workloads的解讀,原文連結為Tsunami: A Learned Multi-dimensional Index for Correlated Data and Skewed Workloads (acm.org)
  • 本文介紹了一種不受查詢負載傾斜和資料相關性影響的基於學習的索引結構。
  • 特點:
    • 介紹了傳統的多維索引結構(K-D樹)、最近提出的基於學習的多維索引(FLOOD)和本文提出的多維索引結構(Tsunami)。
    • 本文提出的索引結構可以基於資料和查詢負載對索引結構進行調整,使之更加適用於當前的查詢負載(傳統的索引值是基於資料進行索引的構建)。
    • 解決了目前基於學習的索引對於傾斜的查詢負載和資料相關性強情景下的實效問題。

過濾表示式與索引

基於謂詞過濾是任何現代資料庫最基本的操作之一,加速過濾器表示式的執行可以顯著提高資料庫查詢優化器的效率。過去常用的提高過濾效率的方法包括:聚集索引、多維索引及二級索引(選擇度較高時)。但這些傳統索引方法都難以調節,而且表現極不穩定。後續會
基於學習的多維索引方法(FLOOD,後文介紹)可以根據資料集和工作負載自動優化索引結構。但是對查詢傾斜和資料相關度高的資料效果不是很樂觀。

傳統多維索引

k-d樹

  • 一種二叉空間分割樹。在每個節點上基於不同維度的中值劃分,直到每個葉子節點的點數少於一頁的儲存範圍。每個葉子節點區域的點個數大致相等 如下圖

  • k-d樹缺點:只基於資料進行構建,沒有考慮查詢負載,有可能劃分的大部分索引點都不會有查詢經過造成大量空間的浪費。

二級索引

  • 二級索引:葉子節點中儲存主鍵值,每次查詢資料時,根據索引找到葉子節點中的主鍵值,根據主鍵值再到聚簇索引中得到完整的一行記錄。
  • 缺點:佔據空間過大。適用於選擇度比較大的屬性,否則空間代價過大且無用。

傳統多維索引缺點:

  • 索引結構難以調整,需要在建立索引時仔細選擇需要用到的維度以及索引的順序,每當資料或工作負載發生變化就要重新維護索引。
  • 沒有一種索引模式可以概況所有情況的索引。

基於學習的索引

FLOOD

  • workflow:輸入一個n維資料->CDF->divide into n partitions->n dimension grid->storage

  • CDF:概率密度函式;根據CDF將每個維度分割成等量的k個部分(k是學習來的);n維資料,每個維度分成\(k_i\)個部分,互相交叉形成包括\(\prod_{k_i}\)個單元格的網格,每個單元格中包括滿足各個屬性範圍的資料點。每個網格中的資料點都是連續儲存的。

  • FLOOD優點:

    • 可以根據查詢負載動態的調整網格大小
    • CDF模型對儲存空間的消耗遠遠小於樹形結構
  • FLOOD不足:

    • FLOOD只參考平均查詢頻率來調整網格大小,當查詢負載傾斜或查詢不一致時,效率會大大降低。
    • 當資料相關密切時,會導致各個單元格中的資料量差異較大,會降低索引的效能和儲存空間使用率。

    TSUNAMI

    Tsunami的提出主要是為了解決FLOOD中對傾斜查詢負載和處理相關資料時的效率下降問題。

    • 針對FLOOD對傾斜負載查詢的不穩定性,Tsunami採用網格樹的模式進行解決。
      • 當查詢特徵在資料空間的不同部分有所不同,查詢工作負載就會發生傾斜。解決方案:利用網格樹將一個維度按查詢分成多個不重合的部分
    • 針對FLOOD對相關資料的不穩定性,Tsunami採用了增強網格進行解決。
      • 基本想法與FLOOD基本一致。不同的是劃分網格的依據。
        (1)將當前屬性視為獨立屬性,根據CDF(x)均勻分割
        (2)如果X,Y存在單調對映,可以利用Y的過濾結果代替X的過濾結果
        (3)用CDF(x|y)做均勻分割
        (#^.^#)
        (#^.^#)
        (#^.^#)
        (#^.^#)
        (#^.^#)
        (#^.^#)
        (#^.^#)
        (#^.^#)
        (#^.^#)
        覺得有幫助的話給筆者點個贊吧!O(∩_∩)O