Are we ready for learned Cardinality Estimation
摘要
文章包括三大部分:
- 對於一個靜態的資料庫,本文將五種基於學習的基數估計方法與九中傳統的基數估計方法在四個現實世界的資料集和統一的工作負載上進行了比較。結果說明基於學習的基數估計方法比傳統方法更加準確,但也需要更多訓練和推理的開銷。
- 探索在動態的資料庫中,基於學習的基數估計方法是否能夠表現出色,結果證明基於學習的基數估計方法不能很好的實時的捕捉到資料的更新,經常會產生一些較大的誤差,而在更新環境不高的環境下,它們雖然表現的更好,但也沒有明顯的勝出。
- 深入瞭解了基於學習的基數估計方法,並探索了它們什麼時候會出錯。結果顯示,資料之間相關性、資料偏斜度、和資料域大小的變化會很大程度上影響基於學習的技術估計方法。更重要的是,它們的表現無法被很好的說明,是不可預測的
基於上述探索發現,文章給出了兩個未來的研究方向:- 減少學習模型訓練和推理的開銷
- 增強學習模型的置信度
引言
簡單論述了一下ML FOR DB,提出了三個問題:
- ready for static enviroment?
- ready for dynamic enviroment?
- when learned models go wrong?
learned cardinality estimation
文中本節介紹了一下基數估計問題的描述:
-
對於一個擁有\(n\)個屬性的關係\(R\),我們現在有一個在\(R\)上的\(d\)個查詢謂詞構成的查詢語句例如
SELECT COUNT(*) FROM R
WHERE \(\theta_1\) AND \(\cdots\) and \(\theta_d\),
其中 \(\theta_i\) 等價為一個查詢謂詞例如\(A = a\),基數估計的任務就是回答\(R\)中有多少元組滿足這個查詢。選擇度問題是一個與之等價的問題,它返回的是滿足元組佔全部資料的佔比。 -
該節將現有的基於學習的基數估計方法分成兩類:
- Regression:MSCN、LW-(XGB/NN)、DQM-Q
- Joint Distribution:Naru、DeepDB、DQM-D
Regression 方法論
- 訓練階段
- 構造一個查詢池並將真實的CE result作為label
- 將每一條查詢語句輸入查詢特徵模型,模型根據查詢資訊和資料庫中的一些統計資訊(如一些小的取樣集)將查詢語句轉換成不同的向量
- 將<vector,label>作為訓練集放在迴歸模型中做訓練
- 推理階段
- 用和訓練中同樣的過程將查詢語句轉換成特徵向量
- 使用訓練好的迴歸模型得到label
- 遇到資料庫更新時,必須同時更新查詢池和label,產生新的特徵向量並重新訓練模型。
MSCN
- 將查詢語句轉換成為一條包含三模組的特徵向量(table,join,predict)
- 每個模組都是一個兩層的神經網路,不同模組的輸出連線起來作為最終輸出網路的輸入
Joint Distribution 方法論
- 訓練階段:
- 訓練出一個聯合分佈模型表示資料
- 推理階段:
- 給定查詢,他會想模型生成若干個請求,並將模型推斷的結果合併作為最終的CE result
- 對於資料庫更新,需要更新或重新訓練聯合分佈模型。
Naru & DQM-Q
- 用乘法法則將聯合分佈近似成條件分佈
\[P(A_1,A_2,\cdots,A_N)=P(A_1)P(A_2|A_1)\cdots P(A_N|A_1,\cdots,A_{n-1})
\]
sum-product Network
- 遞迴的將表拆解成行叢集(作為sum點)和列叢集(作為product點),假設不同的列叢集是獨立的用乘積節點將它們合併。K-MEANS用於叢集行;隨機化依賴係數用於識別獨立列
目前實驗中的問題
- 許多新提出的基於學習的基數估計方法沒有直接的相互比較
- 沒有一個標準的資料集,工作負載的實驗錶針
- 現有的實驗都集中在靜態的環境上
Experimental Setup
- 評估標準:Q-error
\[{error} = \frac{max({est(q)},act(q))}{min({est(q)},{act(q)})}
\]
- code release:https://github.com/sfu-db/AreCELearnedYet
For static enviroment
-
基於學習的方法比傳統方法明顯更加準確
-
Naru是更加準確並且穩定的方法
-
LW-XGB在大多數情況下可以實現最小的q-error,但在max q-error中無法擊敗MNSCN
-
在LW-XGB/NN中誤差較大的查詢均有如下特徵
- 每個選擇謂詞的選擇性都很大,但連線起來後,選擇性變得很小
-
MSCN可以很好的避免上述型別的查詢可能是因為在它的輸入中使用了一些取樣資料。
-
Naru將所有列建模為離散值,並學習它們的嵌入式表示,這使得改模型非常適合應用於一些資料域較小的資料集(離散值的數量較少)。
-
基於學習的模型得到更好的準確度的同時,花費了更大的開銷。
-
小結
- learned model 準確率更高
- 除了LW-XGB,其他學習模型的訓練時間都高於DBMS產品的方法
- regression models在推理階段的時間與傳統方法差不多,但Joint Distribution models需要更多的推理時間
- 超引數調優是一項額外開銷
For dynamic enviroment
- 資料庫更新流程;
- 給定一個時間段\([0,T]\),假設有\(n\)個查詢平均分佈在這個時間段內。拿Naru舉例,Naru更新model需要\(0.75T\)時間,也就是說有\(75%\)的查詢使用舊的模型做的,更新成功後,還要用新模型對\(75\%\)的查詢重新做一次估計。
- 然後就是基於上述流程做實驗,分析資料,小結如下
- 基於學習的模型並不能跟上資料的快速更新,其中MSCN、LW-NN、Naru和DeepDB錯誤率很大
- 在基於學習的模型當中,大家效果都差不多,沒啥特別出彩的。在不頻繁更新的環境下,Naru表現最好;在更多更新的環境下LW-XGB表現更好。
- 資料驅動方法中DeepDB更新最快,查詢驅動方法中LW-XGB更新最快
- 更新時間和準確率有一個權衡困難,還需要大量研究
- GPU能夠提高效能,設計一個能從GPU中獲益的模型很重要。
When learned methods go wrong?
- 傳統方法的一個有點就是它們的透明度,當它們的一些假設條件被違反時,就會產生較大的誤差。但基於學習的方法不透明,缺乏理解。這一節中,我們想知道基於學習的方法產生一些較大錯誤的原因。
- 做的一些實驗,對資料的一些分析
- 小結
- 幾乎所有基於學習的模型在面對相關性高的資料時都會產生更大的誤差,當兩列出現函式依賴時,max q-error會變得很高
Research opportunity
-
效率和精度的權衡
- 使用取樣的方法代替全部資料
- 漸進取樣
- 訓練時早停
- 模型壓縮
-
超引數調優方面優化
- 隨機搜尋
- 貝葉斯優化
- bandit-based 方法
-
增強學習模型的可信度
相關工作
單表基數估計
- 直方圖使用最為廣泛,工業應用
- 基於取樣的方法可以支援一些比範圍查詢更復雜的查詢謂詞的基數估計
- 一些傳統的機器學習的方法
- 曲線擬合
- KDE
- uniform mixture model
多表連線問題
- 傳統方法假設不同表之間的資料均勻獨立分佈