前沿观察 | SageDB:一个自学成才的数据库
版權聲明:本文由騰訊云數據庫產品團隊整理,頁面原始內容來自于db weekly英文官網,若轉載請注明出處。翻譯目的在于傳遞更多全球最新數據庫領域相關信息,并不意味著騰訊云數據庫產品團隊贊同其觀點或證實其內容的真實性。如果其他媒體、網站或其他任何形式的法律實體和個人使用,必須經過著作權人合法書面授權并自負全部法律責任。不得擅自使用騰訊云數據庫團隊的名義進行轉載,或盜用騰訊云數據庫團隊名義發布信息。
SageDB背后的核心思想是構建一個或多個關于數據和工作負載分布的模型,并基于這些模型自動為數據庫系統的所有組件構建最佳數據結構和算法。我們稱這種方法為“自適應數據庫”(原文database synthesis),它將使我們能夠通過專門配置的數據庫組件用于特定數據庫、查詢工作負載、執行環境等來實現前所未有的性能。
在缺乏在線學習和自適應的情況下,數據庫系統設計被用于通用目的,沒有充分利用工作負載和手頭數據的特定特征。SageDB則是通過學習數據和工作負載的分布來縮小與專用解決方案之間的差距。
考慮一個極端情況:我們希望使用連續整數鍵來存儲和查詢固定長度記錄的范圍。這種情況下使用傳統索引沒有任何意義,因為連續整數鍵本身可以用作偏移量。AC程序將100M整數加載到一個數組中,并在一個范圍內求和,運行時間約為300ms。在Postgres中執行相同的操作大約需要150秒:通用目的設計多花了500倍的時間。
“我們可以利用精確數據分布優化數據庫使用的絕大多數算法或數據結構。這些優化有時甚至可以改變眾所周知的數據處理算法的時間復雜度。”
數據分布以(學習的)模型的形式出現。有了這樣的模型,作者認為我們可以自動形成索引結構,完成排序和連接算法甚至整個查詢優化器,利用數據分布模式來提高性能。
過擬合是很好的選擇
什么樣的模型有意義?例如,直方圖是一個非常簡單的模型,但對于此處討論的用例,要么太粗糙,要么太大而無法使用。另一方面,深度神經網絡成本很高(盡管隨著硬件的進步,預計會減少這些成本)。結合上述事實和用例,“過擬合”是一個好的選擇!我們希望盡可能精確地獲得準確數據的細微差別。(迄今為止的研究計劃主要集中在分析工作負載上)。
‘截至今天,我們發現經常需要生成特殊模型才能看到顯著的性能提升。’
例如,考慮“學習索引結構的案例 ”[1]一文中的RMI模型:
1.在數據上擬合簡單模型(線性回歸,簡單神經網絡等)
2.使用模型的預測值來挑選另一個模型,即專家,它可以更準確地模擬數據子集
3.重復該過程,直到葉模型進行最終預測
RMI只是一個起點。例如,還可以使頂部模型或底部模型更復雜、在特定級別階段用其他類型的模型替換部分模型、使用量化、改變特征表示、將模型與其他數據結構組合等等。因此,我們相信將看到很多新理念爆炸式地出現,這些新理念是關于如何在給定工作負載情況下最有效地為數據庫組件生成模型,并在精度,低延遲,空間和執行時間之間實現很好的平衡。
數據訪問
去年發表的“學習索引結構的案例”的論文表明,基于RMI的索引可以勝過最先進的B-Tree性能的兩倍,同時規模小一些(“ 請注意,更新的arXiv版本包含新的結果 “)。后續工作已將其擴展到磁盤數據存儲,壓縮插入和多維數據。
對于多維數據,基線是R樹(與B樹相對)。R-Trees將矩形映射到索引范圍列表,使得位于矩形中的每個點的索引包含在這些范圍的并集中。我們可以用學習模型替換R-Tree,就像B-Tree一樣。使RMI B-Tree有效替換的一個技巧是模型足以使我們“在正確的位置”,然后我們可以圍繞預測進行局部搜索以完成工作。對于R-Trees,我們還需要一種能夠實現高效本地化搜索的布局。
“雖然存在許多可能的投影策略,但我們發現沿著一系列維度連續排序和分割點到相同大小的單元格會產生一個有效映射,一個可學習的布局(例如,與z順序相比,這很難學習)和密集(即,索引范圍并集中的所有點都滿足查詢)。”
作者使用壓縮在內存中的列存儲,實現了上文的學習索引,并將其與完整的列進行掃描,對聚簇索引(按提供最佳整體性能的列排序)和R-Tree進行了比較。基準測試使用lineitem的TPC-H基準測試表中的6000萬條記錄,查詢選擇性為0.25%。
基于學習的索引完勝目前最佳性能的實現34倍(注意圖表上的日志比例),與集群解決方案相比,其空間開銷更小。
進一步的分析表明,學習的索引幾乎在每種類型的查詢中都勝過聚簇索引 - 例外情況是聚簇索引中的聚簇維度是查詢中的唯一維度。
這是本文最有趣的部分之一,因為它展示了學習模型如何能夠幫助處理這種不起眼的古老的分類案例。排序方法是使用學習模型將記錄按正確順序排列,然后將最新的完善排序數據作為最后一步進行糾正。為此,可以使用有效的局部排序,例如插入排序。
下圖顯示了從正態分布中隨機采樣的64位雙精度數據,隨數據大小分類的學習方法的結果。在比較中,Timsort是Java和Python的默認排序,std::sort來自C ++庫。學習后的變體平均比下一個最佳(在這種情況下為Radix排序)快18%。
學習的模型也可用于改善連接。例如,考慮具有兩個存儲的連接列和每列模型的合并連接。我們可以使用該模型來跳過不會加入的數據(作者沒有詳細說明在這種情況下,“本地修補”的等價物是如何工作的)。
作者還嘗試了工作負載感知調度程序,使用圖形神經網絡實現基于強化學習的調度
系統:
“我們的系統將調度算法表示為神經網絡,其采用關于數據的輸入信息(例如,使用CDF模型)和查詢工作負載(例如,使用在先前執行的查詢上訓練的模型)來做出調度決策。”
在10個TPC-H查詢的示例中,使用學習算法的調度程序比Spark的默認FIFO調度程序將平均作業完成時間提高了45%。
調度程序學習如何實現這一改進策略是將快速完成短期工作與最大化集群效率相結合,學習在并行性“最佳點”附近運行工作。
傳統的查詢優化器非常難以構建,維護通常會產生次優的查詢計劃。優化器的脆弱性和復雜性使很難其成為一個很好的候選者...
從傳統成本模型開始并通過學習隨著時間的推移對其進行細化的初步實驗表明,模型質量可以得到改善,但要獲得大幅收益,則需要對基數估算進行重大改進。現在的研究方向(尚未報告結果)是探索基于混合模型的基數估計方法。這些混合模型結合了基礎數據模式和相關性的學習模型,以及捕獲特定數據實例的極端(并且難以學習)異常/異常值監聽。
學習模型在未來可能證明有益的其他建議區域包括近似查詢處理,預測建模和包括插入和更新的工作負載。
SageDB提出了一種構建數據庫系統的全新方法,它使用機器學習模型與程序相結合來生成系統組件。如果成功,我們相信這種方法將產生新一代大數據處理工具,可以更好地利用GPU和TPU,并在存儲消耗和空間方面提供顯著優勢。
[1]https://blog.acolyer.org/2018/01/08/the-case-for-learned-index-structures-part-i/
本文轉自公眾號【騰訊數據庫TencentDB】,掃描以下二維碼可以關注。
總結
以上是生活随笔為你收集整理的前沿观察 | SageDB:一个自学成才的数据库的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 交付效率提升40%,珍爱网基于微服务的D
- 下一篇: MySQL之父与企鹅的故事