谷歌等推出基於機器學習的新型數據庫SageDB

近日,谷歌聯合MIT、布朗大學的研究人員共同推出了新型數據庫系統SageDB,並撰寫了一篇論文詳述SageDB的設計原理和性能表現。他們在論文中提出了一個觀點:學習模型可以滲透到數據庫系統的各個方面,“基於機器學習的組件可以完全取代數據庫系統的核心組件,例如索引結構、排序算法,甚至是查詢執行器。

你或許還記得17年底AI前線發佈的熱點報道《Jeff Dean出品:用機器學習索引替代B-Trees,3倍性能提升,10-100倍空間縮小》 。當時谷歌Jeff Dean等人出品的一篇題爲《學習索引結構的案例》的論文讓整個業界爲之振奮,同時也引發了大量的爭論。在17年的論文中,谷歌研究團隊嘗試通過實驗論證:與基於緩存優化的 B-tree結構相比,使用神經網絡在速度上可以提高 70%,並且大大節省了內存。“機器學習模型有可能比目前最先進的數據庫索引有更顯著的好處”。而今天我們要介紹的SageDB,就是研究團隊在該研究基礎之上得出的更進一步的成果。

SageDB背後的核心思想是構建一個或多個關於數據和工作負載分佈的模型,並基於它們自動爲數據庫系統的所有組件構建最佳數據結構和算法。我們稱之爲“數據庫融合”的這種方法,將使我們能夠通過將每個數據庫組件的實現專門化到特定的數據庫、查詢工作負載和執行環境來實現前所未有的性能。

image

學習一個想要的模型

在缺乏運行時學習和適應的情況下,數據庫系統是爲通用目的而設計的,不能充分利用現有工作負載和數據的特定特性。SageDB的出現能夠彌補二者之間的鴻溝,它在瞭解數據分佈和工作負載的情況下,可以在特定時間設計一種可能的專用解決方案。

考慮一個極端的案例:我們希望使用連續整數鍵來存儲和查詢固定長度記錄。這裏使用傳統索引沒有意義,因爲鍵本身可以用作偏移量。AC程序將100M整數加載到一個數組中,並在一個範圍內求和,運行時間約爲300ms。在Postgres中執行相同的操作大約需要150秒,這是通用設計開銷的500倍。

…我們可以利用精確數據分佈的知識,來優化數據庫使用的幾乎任何算法或者數據結構。這些優化有時甚至可以改變衆所周知的數據處理算法的複雜性。

數據分佈的知識以學習模型的形式出現。有了這樣的模型,作者認爲我們可以自動合成索引結構、排序和連接算法,甚至整個查詢優化器,利用數據分佈模式來提高性能。

過渡擬合很好

什麼樣的模型有意義?舉個例子,直方圖是一個非常簡單的模型,但對於這裏討論的用例,要麼太粗糙,要麼太大而無法使用。另一方面,深度和寬度神經網絡的成本很高(儘管隨着硬件的進步,這些成本可能會降低)。結合這個事實,對於這個使用場景,“過渡擬合”是好的!我們希望儘可能精確地捕捉精確數據的精確細微差別。(迄今爲止的研究計劃主要集中在分析工作負載上,一旦我們開始考慮更新,一定程度的概括顯然是有益的)。

截至今天,我們發現我們經常需要生成特殊模型才能看到顯著的效益。

例如,考慮一下論文《學習索引結構的案例》中的RMI模型:

1.在數據上擬合簡單模型(線性迴歸、簡單神經網絡等)

2.使用模型的預測來挑選另外一個模型,即專家,它可以更準確地模擬數據子集合

3.重複該過程,直到葉模型進行最終預測

image

RMI只是一個起點。例如,可以使頂部模型或底部模型更復雜,在特定級別階段用其他類型的模型替換部分模型,使用量化方法、改變特徵表示、將模型與其他數據結構組合等。因此,我們相信我們將看到關於如何最有效地爲數據庫組件生成一個模型來完成精度、低延遲、空間和執行時間之間平衡的新想法。

數據訪問

去年關於《學習索引結構的案例》的論文表明,基於RMI索引可以比最先進的B-Tree實現性能提高兩倍,同時規模更小(注:研究人員已經更新了arXiv上的論文以包含最新測試結果,論文連接:https://arxiv.org/abs/1712.01208 )。後續工作已將其擴展到存儲磁盤、壓縮插入和多維的數據。

對於多維數據,基線是R樹(與B樹相對)。R-Tree將矩陣映射到索引範圍列表,使得位於矩陣中的每個點索引包含在這個範圍的並集中。就像B-Tree一樣,我們可以用學習模型替換R-Tree。使RMI B-Trees替換工作得以實現的一個技巧是模型足以使我們“在正確的位置”,然後我們可以圍繞預測完成本地搜索工作。對於R-Trees,我們還需要一種能夠實現高效本地化搜索的佈局。

雖然存在許多可能的投影策略,但我們發現沿着一系列維度、連續排序和分割點到相同大小的單元格,這樣計算、學習(例如,與z-order相比,這很難學習)、合成(即,索引範圍聯合中的幾乎所有點都滿足查詢)起來非常高效。

image

作者通過壓縮在內存中的列存儲上實現了這樣的學習索引,並將其與完整列掃描、聚簇索引(按提供最佳整體性能的列排序)和R-Tree進行了比較。使用TPC-H基準的lineitem表中的6000萬條記錄來作爲基準測試,查詢選擇性爲0.25%。

image

學習型索引以高達34倍的優勢,擊敗了下一個性能最佳的實現(注意圖表上的日誌比例),與聚簇解決方案相比,其空間開銷很小。

進一步的分析表明,學習型索引幾乎可以在每種類型的查詢中擊敗聚簇索引——當聚簇索引中的聚簇維度是查詢中的唯一維度時除外。

執行查詢

這是論文中我最喜歡的一部分,因爲它展示了學習模型如何能夠幫助處理這種不起眼的古老的排序問題。排序方法是使用學習模型將記錄大致按正確的順序排列,然後在最後階段再糾正爲幾乎完美的排序數據。爲此,可以使用非常高效的局部排序算法,比如:插入排序。

image

下圖顯示了從正態分佈中隨機採樣64位雙精度數據,隨着數據量越來越大,不同排序方法的結果比較。其中,Timsort是Java和Python的默認排序,std::sort來自C++庫。學習後的變體平均比下一個最佳(在這種情況下爲Radix排序)快18%。

image

學習的模型也可用於改善連接操作。例如,考慮一個具有兩個存儲連接列和一個模型列的合併連接。我們可以使用模型跳過不會連接的數據(作者沒有詳細說明“local patching”在這種情況下是如何工作的,這一點對於我來說理解的並不深刻)。

作者還嘗試了工作負載感知調度程序,使用圖神經網絡實現基於強化學習的調度系統:

我們的系統將調度算法表示爲神經網絡,其採用關於數據的輸入信息(例如,使用CDF模型)和查詢工作負載(例如,使用在先前執行的查詢上訓練的模型)來做出調度決策。

在10個TPC-H查詢的示例中,學習的調度程序比Spark的默認FIFO調度程序將平均作業完成時間提高了45%。

image

調度器學會的策略是將快速完成短任務與最大限度地提高集羣效率相結合,學習在並行性“最佳點”附近運行作業。

查詢優化器

傳統的查詢優化器非常難以構建,維護並且通常會產生次優的查詢優化。優化器的脆弱性和複雜性使其成爲一個很好的模型可學習的候選者…

最初的實驗從傳統的成本模型開始,並通過學習進行改進,結果表明模型質量可以得到改善,但要獲得大幅收益,則需要對基數估算進行重大改進。目前的研究方向(尚未報告結果)是探索基於混合模型的基數估計方法。這些混合模型結合了底層數據模式和相關性的學習模型,以及使用監聽器(exception/outlier)來捕獲特定數據實例的極端(和難以學習)異常。

其他領域

論文提出,未來學習模型可能在以下領域也會被證明是有益的,包括近似查詢處理、預測建模和工作負載(包括插入和更新)。

最後總結

SageDB提供了一種構建數據庫系統的全新方法,通過使用ML模型與程序合成相結合來生成系統組件。如果成功,我們相信這種方法將產生新一代大數據處理工具,可以更好地利用GPU和TPU,在存儲消耗和空間方面提供顯著的優勢,在某些情況下甚至可以改變某些數據操作的複雜性。

原文鏈接:

https://blog.acolyer.org/2019/01/16/sagedb-a-learned-database-system/

論文鏈接:

http://cidrdb.org/cidr2019/papers/p117-kraska-cidr19.pdf

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章