本文由 【AI前線】原創,原文連接:http://t.cn/RTVTqN2html
譯者 | 馬卓奇web
編輯 | Emily算法
AI前線導讀:數據庫索引結構其實也是模型,例如 B-tree索引、哈希映射以及 BitMap索引。從這一點出發,本論文證實了目前的索引模型都可以用其它可學習的模型來替代。初步實驗結果顯示,與基於緩存優化的 B-tree結構相比,使用神經網絡在速度上能夠提升 70%,而且大大節省了內存。「機器學習模型有可能比目前最早進的數據庫索引有更顯著的好處」。
若是這項研究有更多的成果,或許未來咱們回顧的時候會說,索引領域首先受到了衝擊,逐漸地,其餘數據庫組件(排序算法、查詢優化、鏈接)都將被神經網絡(NN)取代。
不管如何,這是一個頗有前途的研究方向,而這篇論文確實發人深省。
數據庫
研究動機緩存
數據庫最開始是統一的,一刀切的「黑箱」問題。隨着時間的推移,這一觀點細化到了「標準尺寸」的 OLAP數據庫和 OLTP數據庫。微信
數據庫使用索引來快速訪問數據。B-tree和哈希映射是經常使用的實現索引的技術。但從「黑箱」的觀點來看,數據庫處理將數據視爲不透明的,盲目地使用這些索引方法,而不對數據作任何假設。然而,很明顯的一點是,不清楚數據分佈會使算法不能發揮它最大的做用。考慮一下這樣的實驗:若是關鍵字從 0到 500M,那麼直接用關鍵字進行索引要比用哈希要快。若是咱們知道數據的累積分佈函數(cumulative distributed function,CDF),這種觀察能夠擴展到其餘的數據分佈。咱們能夠歸納成「 * CDF 關鍵字 * 記錄大小」能夠獲得關鍵字指向的記錄的大體位置。網絡
那麼,經過了解數據分佈,咱們能夠得到性能提高。可是當咱們把這個問題視做全「白盒」問題時,會失去可重用性。咱們不能全「白盒」,由於每次都從頭檢查數據、設計索引的代價太大了。框架
這篇文章研究代表,利用神經網絡來學習數據的分佈,咱們能夠有一個「灰盒」的方法來進行索引的設計,而且經過將索引設計爲數據感知的,能夠得到性能優點。機器學習
目前較爲主流的索引結構能夠根據各類訪問模式的不一樣需求分爲以下三類:函數
咱們主要關注用可學習結構替代 B-tree結構的部分。對於哈希映射,學習到的結構是基於數據累積分佈函數的直接函數。
B-tree
B-tree提供了一種層級結構的有效索引方法。
爲何能夠用神經網絡模型來代替 B-tree呢?從概念上講,B-tree自己就是一個模型,相似機器學習中的迴歸樹模型:它能夠將查找鍵映射到頁面中的位置,而且最小偏差爲 0,最大偏差爲頁面尺寸,並且若是該鍵存在,則保證它必定能被定位。所以,咱們能夠用其餘機器學習模型,包括深度學習模型來替代這種索引,只要它們能提供一樣的最小和最大偏差的保證。
下一步,如何用其它機器學習模型提供一樣的偏差保證?咱們惟一須要作的就是爲每一個鍵執行模型,並記住一個位置的最壞預測。給定一個鍵,該模型對數據的位置進行預測;若是該鍵存在,則保證它位於由最小和最大偏差定義的預測範圍內。咱們用已有的數據來訓練模型。所以,咱們可以用任何其餘類型的迴歸模型取代 B-tree,包括線性迴歸和神經網絡。
咱們用學習到的模型來替代 B-tree能得到以下好處:
更多的並行性(TPU),若是是 B-tree則是層次性。
這裏的關鍵思想是以提升計算爲代價減小內存,寄但願於計算成本愈來愈低的市場趨勢(若是你能在 TPU或 GPU上使用它,你會獲得更多的好處)
主要算法
爲了克服上述挑戰,並探索可學習模型做爲索引結構的替代或改進的潛力,做者提出了可學習索引框架(Learning Index Framework,LIF)、遞歸模型索引(Recursive-Model Indexes,RMI),以及基於標準偏差的搜索策略。做者主要關注簡單、全鏈接的神經網絡,僅僅是由於它們的簡單性,但許多其餘類型的模型也是能夠考慮的。
可學習索引框架(Learning Index Framework, LIF)
LIF能夠看做是一個索引合成系統,給定一個索引規範,LIF能夠生成不一樣的索引配置,優化它們,並自動測試它們。給定一個訓練好的 Tensorflow模型,LIF從模型中自動提取全部的權重,而且基於模型規範在 C++中生成有效的索引結構。實驗證實,運行簡單模型的時間只需 30納秒。
遞歸模型索引(Recursive-Model Indexes,RMI)
用單一模型來下降最小最大偏差是十分困難的,可是僅用簡單模型來代替 B-tree的前兩層,來獲得一樣的預測精度提高倒是十分容易作到的。相似的,若是模型能夠只關注子數據集,那麼下降偏差也就更簡單了。
基於以上觀察,做者提出了遞歸回歸模型(以下圖)。
做者創建了模型的層次結構。在每一層,模型將查詢鍵做爲輸入,並基於它選擇下一階模型,直到最後一階模型預測出位置。每一個模型對鍵的位置進行了必定的預測,並利用預測結果來選擇下一個模型,該模型負責鍵空間的某個區域,而且以較低的偏差進行更好的預測。
該模型有如下幾個優勢:
(1)它利用了數據分佈的總體形狀具備很容易學習的特色。
(2)該結構有效地將空間劃分紅更小的子範圍,相似 B-tree或決策樹,可以在更少的操做次數內達到所要求的「最後一步」的準確度。
(3)在各階段之間不須要搜索過程。
混合索引
該遞歸模型索引的另一個優勢是能夠構造混合模型。例如,在模型頂層,一個簡單的 ReLU神經元或許是最好的選擇,由於它一般可以學習各類複雜的數據分佈,而底層的模型能夠是大量的簡單線性迴歸模型,由於它們在空間和執行時間上消耗都很低。
注意,混合索引能夠將可學習索引結構在最壞狀況下的性能保留在 B-tree水平。也就是說,當數據分佈很難學習獲得時,全部的模型都會自動替換成 B-tree,讓它幾乎成爲一個完整的 B-tree。
搜索策略
論文提出了幾個搜索策略:
(1)模型二進制搜索:默認搜索策略,傳統的二進制搜索不一樣之處僅在於第一個中間點被設置爲模型所預測的值。
(2)偏置搜索:這種搜索策略是默認搜索策略的改進,經過在每次迭代中不均勻地從中間到左右位置進行範圍分割。
(3)偏置四進制搜索:最後,咱們開發了一種新的搜索策略,在每次迭代中並非選擇一個新的中間點進行測試,而是三個新的數據點,即四進制搜索。
字符串索引
論文主要關注索引實值鍵,可是許多數據庫依靠字符串索引,但幸運的是,大量機器學習研究都在關注字符串建模。
將字符串轉化爲可輸入模型的特徵向量須要進行詞條化操做。因爲大多數機器學習模型在輸入尺寸相同的條件下表現更好,做者設置了最大輸入長度 N。做者使用了一個相對較小的前饋神經網絡的層次結構。與以前的模型不一樣之處在於輸入爲一個向量,而不是實值。
根據字符串的累計分佈函數(CDF)設計出通用的機器學習模型是十分困難的,將來的大量研究工做能夠圍繞優化字符串索引的可學習模型展開。
實驗結果
爲了對比可學習的索引和 B-tree索引,做者建立了 4個二級索引,3個真實世界數據庫,(1) Weblogs,(2)Maps,(3)web-documents,和一個合成的數據庫,(4)Lognormal。
數值索引數據庫
Weblogs數據庫,可學習索引結構與 B-tree索引對比結果:
Maps數據庫,可學習索引結構與 B-tree索引對比結果:
Lognormal合成數據庫,可學習索引結構與 B-tree索引對比結果:
做者主要對比了總查詢時間和局部搜索時間,以及索引結構大小、節省空間、模型偏差以及偏差方差。從實驗結果中能夠看出,幾乎全部的配置狀況下,可學習索引結構的表現都領先於 B-tree,速度上快了 3倍,尺寸上小了一個數量級。
字符串索引數據庫
web-documents,基於字符串的索引數據庫,可學習索引結構與 B-tree索引對比結果:
從實驗結果中能夠看出,對於字符串索引,可學習索引結構的優點並非很突出。做者分析認爲運行模型的計算量太大,這個問題能夠用 GPU或 TPU解決。
學習獲得的字符串索引在不一樣搜索策略下的對比結果:
將來研究挑戰
插入和更新
(1)模型泛化性和「最後一步」準確度的折衷。模型的「最後一步」預測越準確,模型就會越容易過擬合,而且很難泛化到新的數據條目上。
(2)若是數據分佈發生變化怎麼辦?可學習索引是否能夠檢測到數據變化?是否能夠像 B-tree同樣能夠一直保證搜索和插入操做的複雜度爲 O(logn)?
做者認爲處理插入的另外一種更簡單的方法是構建 delta索引:全部的插入都放在緩衝區中,而且不時地合併到模型的再訓練中。這種方法已經被大量使用,而且能夠獲得 GPU或 TPU的硬件加速支持。除此以外,也能夠經過使用之前的解決方案做爲出發點,熱啓動每一個模型的訓練。特別是依賴於梯度降低優化的模型能夠從這種優化方法中獲益。
分頁
對於存儲在磁盤上的數據索引而言,將數據分割成存儲在磁盤中不一樣區域的較大頁面是很常見的。這種狀況下,學習數據的 CDF分佈再也不知足建模要求。
做者認爲有如下幾種替代方法:
(1)利用 RMI結構,最小化模型覆蓋區域的重疊部分。
(2)使用翻譯表。
(3)用更復雜的模型學習頁面的實際指針。
更多算法細節,請參考原論文:
https://arxiv.org/abs/1712.01208
查看英文原文:
http://muratbuffalo.blogspot.com/2017/12/paper-summary-case-for-learned-index.html
關注咱們的微信號"AI前線",後臺回覆「AI」可得到《AI前線》系列PDF電子書