閱讀467 返回首頁    go 阿裏雲 go 技術社區[雲棲]


AI(OtterTune)引波瀾 - AI會洗牌數據庫行業嗎? DBA如何轉變思想

標簽

PostgreSQL , 機器學習 , AI , 自動優化 , DBA , 科學計算


背景

最近AI的新聞特別多,席卷了圍棋圈之後,成為了技術圈和媒體熱捧的話題。

今天又一個產品借AI上頭條了 - OtterTune ,一個數據庫參數調優的產品,借助機器學習的技術,生成最優的數據庫參數。

下麵是這個產品的論文

《Automatic Database Management System Tuning Through Large-scale Machine Learning》

https://db.cs.cmu.edu/papers/2017/tuning-sigmod2017.pdf

OtterTune 的源碼在此:

https://github.com/cmu-db/ottertune

雖然OtterTune隻是一個結合了機器學習(建模、調參數、獲取係統反應、學習、產生最優參數;典型的臨床學),可用於參數優化的小軟件(實際上DBA的工作遠不止這些),但是已經代表了一個方向,未來越來越多的活(枯燥的活)可能會被AI取代。

pic

那麼如何看待OtterTune呢?DBA真的要失業了嗎?

混沌初開(因果學) VS 臨床(經驗學)

《易經》:“易有太極,是生兩儀,兩儀生四象,四象生八卦。”

孔穎達疏:“太極謂天地未分之前,元氣混而為一,即是太初、太一也。”

pic

引用上麵這段,主要說明凡事有因果,從因可以推理出果。

反觀臨床學,臨床醫學(Clinical medicine)根據病人的臨床表現,從整體出發結合研究疾病的病因、發病機理和病理過程,進而確定診斷,通過預防和治療以最大程度上減弱疾病、減輕病人痛苦、恢複病人健康、保護勞動力。

臨床學是經驗的積累,需要總結非常多的案例,觀察人體對藥物反應,總結經驗,提煉成學術。是一種反複試錯總結的過程。

OtterTune更像臨床學,因為一開始它也不知道哪個參數這樣設置會怎麼樣,那樣設置又會怎麼樣?是在無法知道因果的情況下的一種經驗科學。隻有在積累了足夠多的經驗時,才能發揮更好的效果。

人類在經驗科學方麵的發展是比較緩慢(相比AI),因為人類大腦對數據的處理能力遠不能和計算機相比。計算機的出現推動了經驗科學的發展。

一些靠經驗吃飯的工作,往往是越老越吃香,不過將來也是最容易被AI替代的。可以考慮轉行,或者考慮在轉行前把經驗轉化為產品。

人類DBA vs 機器DBA vs 雲數據庫

DBA的工作有哪些?DBA的工作實際上都是圍繞數據庫展開,包含但不限於這些工作:

1. 數據庫、主機、操作係統、交換機、存儲選型,預算,架構設計,部署,參數優化;

2. 數據庫備份、恢複、容災、HA、新老硬件更替;

3. 數據庫SQL審計、SQL優化、異常問題診斷、性能優化、巡檢、健康診斷;

4. 數據庫擴容、縮容、遷移;

5. 數據庫版本升級、補丁修複;

6. 數據庫開發規範、管理規範的指定和執行;

7. 數據庫監控、專家、審核係統的開發與建立;

8. 數據庫代碼覆蓋率測試、功能測試、建模、壓測、profiling;

9. 數據庫讀寫分離、sharding、MPP係統的構建;

10. 數據庫開發、管理、設計、規範培訓;

11. 數據庫在垂直行業應用的架構設計(例如OLAP、GIS、時序、流計算、圖式搜索、文本搜索、圖搜索、化學、基因、等);

12. 異構數據、同構數據源的數據同步、ETL;

13. 數據庫與其他係統的聯動;

14. 數據庫雲產品化、DOCKER化、虛擬化等相關的工作;

15. 數據庫內核的研究、BUG上報、結合業務提出對內核的功能、性能提升等需求;

16. 關注不同數據庫產品的roadmap、優缺點、適應場景、不適應場景;

17. 關注數據庫行業的發展,進行預研性研究,儲備技術;

18. 與技術社區保持緊密聯係,從參與、了解同行、到分享,從商業產品到開源社區;

19. 技術為業務服務,從本質觸發,深入行業,了解業務、行業的發展,抓住核心點,更好的服務於業務。

可以看到DBA的工作還是有蠻多的,一個好的人類DBA從理論基礎(因果學)到實際工作經驗(臨床學),都有非常多的積累。絕對不是一個OtterTune工具可以取代的。OtterTune也隻是針對TPC-C,tpc-h場景進行了大量的模擬測試,針對性的輸出最優參數而已。

AI要完全取代這些工作,還有非常漫長的過程。就好像現在很多汽車支持的輔助駕駛,也算是AI應用的一種初級階段,目前輔助駕駛還有很多限製條件,比如必須要有車道線,可能到鄉道就不支持了,需要人工介入。目前OtterTune是一個輔助DBA的工具,還沒有達到取代DBA的程度。

未來很長一段時間,AI和人類應該是相輔相成的灰色地帶。

相比而言,雲產品(例如RDS)才真正在逐漸替代大部分DBA的工作。

雲廠商不僅提供數據庫產品,用戶不需要關心架構、部署、備份、容災、HA、版本升級、讀寫分離、sharding、內核BUG等問題。同時還提供了增值的服務,比如專家診斷係統(實際上就包含了OtterTune的功能)。更重要的是雲廠商提供的數據庫還可以和雲上的其他產品緊密結合,例如阿裏雲PostgreSQL,HybridDB for PostgreSQL,可以與阿裏雲的OSS結合,進行數據的共享,備份,冷熱分離。還可以與雲BI係統進行聯動,用戶省去了部署這麼多係統的麻煩。

scikit-learn

scikit-learn是OtterTune工具用到的一個python機器學習開發庫。它支持一些常見機器學習算法,OtterTune用到了降維和群集類的算法。

https://scikit-learn.org/stable/index.html

Classification

Identifying to which category an object belongs to.

Applications: Spam detection, Image recognition.

Algorithms: SVM, nearest neighbors, random forest, ...

Regression

Predicting a continuous-valued attribute associated with an object.

Applications: Drug response, Stock prices.

Algorithms: SVR, ridge regression, Lasso, ...

Clustering

Automatic grouping of similar objects into sets.

Applications: Customer segmentation, Grouping experiment outcomes

Algorithms: k-Means, spectral clustering, mean-shift, ...

Dimensionality reduction

Reducing the number of random variables to consider.

Applications: Visualization, Increased efficiency

Algorithms: PCA, feature selection, non-negative matrix factorization.

Model selection

Comparing, validating and choosing parameters and models.

Goal: Improved accuracy via parameter tuning

Modules: grid search, cross validation, metrics.

Preprocessing

Feature extraction and normalization.

Application: Transforming input data such as text for use with machine learning algorithms.

Modules: preprocessing, feature extraction.

PostgreSQL可以與機器學習很好的結合,給數據插上機器學習的翅膀。

機器學習在PostgreSQL中的應用

PostgreSQL有多重接口可以與機器學習結合。

PL接口

PostgreSQL支持plpython存儲過程語言,用戶可以直接在PostgreSQL中編寫python代碼,讓數據和代碼緊密的結合,提升計算效率。

同時支持plcuda, plR等接口。

下麵這篇文章詳細描述了PostgreSQL在計算與數據存儲方麵的多重融合方法。計算與數據融合,減少了數據傳輸的部分,提升了運行效率。大家想一想未來數據爆炸,如果計算還是和存儲分離,會是一個什麼景象?不具備計算能力的存儲不是好存儲。

《數據庫任督二脈 - 數據與計算的生態融合》

madlib庫與pivotalR

Madlib庫是一個SQL接口的開源的機器學習庫,將機器學習的通用算法轉換成了SQL UDF,通過調用函數可以支持通用的學習算法,將數據庫和機器學習很好的融合在一起,支持PostgreSQL, Greenplum。架構如下:

pic

pic

pivotalR則是R的一個機器學習包,通過這個包可以在R的代碼中連接PostgreSQL、Greenplum數據庫,調用pivotalR的R function,會自動連接數據庫,並轉成調用madlib的SQL,在數據庫中執行SQL,返回結果給R端。這樣的話數據不需要加載到R端,而是在數據庫層麵完成計算。如果數據庫是Greenplum,則是並行的計算。

pic

pic

在這篇文章中有詳細的描述,如何在PostgreSQL中玩AI。

《想挑戰AlphaGO嗎?先和PostgreSQL玩一玩?? PostgreSQL與人工智能(AI)》

rdkit

Rdkit是一個化學垂直行業的數據處理函數庫、以及化學行業的機器學習庫的包。

rdkit的數據存儲選用的就是PostgreSQL,因為PG支持類型、索引、函數、OP的擴展,化學行業選擇它就像GIS行業選擇它一樣,看中它的擴展性,在PostgreSQL實現了一套化學行業的數據類型、索引類型、操作符、函數、聚合函數、機器學習函數等。

rdkit還能與scikit-learn庫結合使用,例如下麵是一個隨機森林的例子

from rdkit.Chem.Draw import SimilarityMaps  
  
# helper function  
def getProba(fp, predictionFunction):  
  return predictionFunction((fp,))[0][1]  
  
m5 = Chem.MolFromSmiles('c1ccccc1O')  
fig, maxweight = SimilarityMaps.GetSimilarityMapForModel(m5, SimilarityMaps.GetMorganFingerprint, lambda x: getProba(x, rf.predict_proba))  

pic

機器學習在PostgreSQL裏的其他應用

在PostgreSQL社區,也不乏看到機器學習的例子,例如

1. zson數據類型,是一個兼容jsonb的數據類型,zson通過對jsonb的數據進行訓練,得到字典,將JSONB中的內容翻譯成字典存儲,優化數據存儲的壓縮比,提高存儲效率,同時降低buffer的使用。

《JSONB 壓縮版本 ZSON》

2. aqo,通過機器學習,動態調整SQL語句的執行計劃。

《數據庫優化器原理 - 如何治療選擇綜合症》

人類 vs 機器

當AI真的發展到可以取代大多數人類的工作的時候,人們幹什麼去呢?比如多陪陪家人,感受大自然,從事一些自己感興趣的事情,修生養息,天人合一。

毛主席說:幸福不會從天降。在此前,我們還是來談一下如何搞AI,把經驗轉化為產品的事情,個人認為人類有一種把種留下的情結,從古至今各行各業的宗師,如太極宗師。AI隻是人類把種留下的另一種表現形式。擁抱AI吧,把種留下。

轉行搞AI,個人認為:

至少要懂得一門相關的編程語言,例如R,PYTHON; 至少需要有一定的數學、統計學背景; 至少需要對垂直行業有深刻的認識; 最後就是選擇一個合適的平台;

看完這篇文檔,你應該知道該如何選擇。

《數據庫任督二脈 - 數據與計算的生態融合》

除此之外,你也可以選擇搞雲產品,前麵提到威脅DBA的目前來看並不是AI,而是雲產品,何不投入搞雲呢?

PostgreSQL是一個比較值得搞的產品,可以將計算與數據很好的融合,打通任督二脈。

pic

人工智能相關的電影,推薦可以看一下,AI想追求的確是我們所擁有的習以為常的。

《AI》

21世紀中期,由於氣候變暖,南北兩極冰蓋的融化,地球上很多城市都被淹沒在了一片汪洋之中。此時,人類的科學技術已經達到了相當高的水平,人工智能機器人就是人類發明出來的用以應對惡劣自然環境的科技手段之一。先進的人工智能機器人不但擁有可以亂真的人類外表,而且還能像人類一樣感知自己的存在。大衛(海利喬奧斯蒙特)就是這樣一個有思想、有感情的小機器人,他被一對人類父母所收養,有一個哥哥和一個貼身的夥伴機器泰德熊。但這些並不能讓大衛滿足,他一直渴望著自己終有一天不再僅僅是個機器人。抱著對這個願望的執著,11歲的大衛踏上了漫長的心路曆程,跟隨在他身邊的,還有另一個善良的機器人喬(裘德洛)。誰也不知道他們能否完成自己的心願,脫胎換骨成為真正的人,等待他們的隻有凶吉難料的對複雜人性的追尋。

《木偶奇遇記》

孤獨的木匠爺爺這晚親手製作了一個木偶男孩——皮諾曹。可能上天眷顧爺爺,午夜,藍仙女顯靈了,她讓這個木偶男孩具有了意識,能像其他男孩那樣跑跑跳跳了。獲得了生命的皮諾曹興奮不已,很快和屋子裏的小動物交上了朋友。早上爺爺起來見到皮諾曹驚訝不已,他十分感激上天賜給他的禮物。 然而,皮諾曹很快就發現了自己和其他男孩子還是不一樣,他沒有肉體,不會疼痛,隻有冰冷了木製軀體。他開始不滿足於現狀,夢想著找到藍仙女讓她將自己徹底變為一個真正的男孩子。於是,他踏上了旅程。

參考

1. Ottertune工具

https://github.com/cmu-db/ottertune

https://db.cs.cmu.edu/papers/2017/tuning-sigmod2017.pdf

2. python科學計算口袋書

https://github.com/jakevdp/PythonDataScienceHandbook

3. scikit-learn 機器學習包

https://scikit-learn.org/stable/index.html

4. rdkit 化學行業機器學習包

https://www.rdkit.org/docs/Cookbook.html

5. PostgreSQL scikit-learn融合包

https://github.com/mkraemer67/plugml

6. SQL接口機器學習包 - Madlib

https://madlib.incubator.apache.org/

7. python其他科學計算相關包

https://github.com/rasbt/pattern_classification/blob/master/resources/python_data_libraries.md

https://www.scipy.org/about.html

https://www.scipy.org/

https://wiki.python.org/moin/NumericAndScientific

最後更新:2017-06-08 11:31:56

  上一篇:go  PostgreSQL UDF實現IF NOT EXISTS語法
  下一篇:go  JSONB 壓縮版本 ZSON