1. 程式人生 > >也談用機器學習索引替代B-Tree

也談用機器學習索引替代B-Tree

機器學習Range Index

正如上文中提到的,我們可以設計一個模型,根據關鍵值預測出現位置。對於常見的範圍查詢,所有的資料都是排好序的,能想到一個簡單的模型就是預測給定關鍵字的累計分佈函式(cumulative distribution function): p=F(key)*N,這裡的p就是預測位置,F(key)就是預測的累計分佈函式。

作者文中提到了簡單的預測分佈函式所面對的挑戰,其中既包括了Tensorflow本身的效率問題,又包括了預測函式的誤差難以控制問題。為了克服上面的挑戰,論文提出了幾種學習框架,其中最為基本的是learning index framework (LIF)recursive-model indexes (RMI)

LIF主要是針對一個模型索引的優化,針對給定的模型規則,LIF生成索引配置,優化並且自動進行測試。它採用Tensorflow自帶的神經網路模型去學習簡單的函式,比如線性迴歸函式。在真正的資料庫中應用時,LIF會生成基於C++的高效索引結構,將模型預測優化到30ns以內。

RMI則主要優化得到預測結果後last-mile查詢準確性。舉一個例子,要通過單一模型預測100m個關鍵字位置產生的最小和最大誤差是很大的。但是如果我們採用兩層模型,第一層模型將100m個關鍵字對映到10k個位置上,第二層將10k個關鍵字對映到1個位置上,則最小和最大誤差會降低很多。

就像上圖顯示的模型結構那樣,Model 1.1先對關鍵字進行預測,然後通過預測結果選擇執行Model 2.1。另外要注意的是,這樣的多層模型結構並不是一個查詢樹,多個stage 2模型可能會指向同一個stage 3模型。另外在最下層,為了保證最小和最大的偏差是可以控制的,我們也可以採用B-Tree來完成最後索引。

上面給出的Hybrid End-To-End Training就描述瞭如何逐層訓練一個Hybrid的模型,其上層為兩層ReLU神經網路,底層為B-Tree。

這樣遞迴的模型有幾個好處:1.它能夠很好的學習出資料形狀。2.通過分層,底層可以使用B-Tree或者decision tree得到非常高的查詢效率。3.不同的stage可以使用偏移量呼叫模型,而不用搜索,這樣更容易進行程式語言的底層優化。