瀚高王碩:從Oracle到PostgreSQL,細數如何一步步打造完整的PG生態鏈

2017年10月21日,PostgreSQL 2017中國技術大會於深圳科興科學園國際會議中心圓滿收官。擁抱開源,聆聽不同,廣納業界同好,與衆PGer共話PostgreSQL的前世今生,來年他日。

數據庫作爲最關鍵的基礎設施,滲透技術領域的方方面面,而一個數據庫的流行絕非偶然,PostgreSQL在中國曆經多年磨合,面對前進途中的掣肘質疑,作爲一個PostgreSQL學習中的愛好者,對此,又將怎麼看?會間,瀚高基礎軟件股份有限公司數據庫開發工程師王碩,從自己與PostgreSQL的意外結緣談起,轉而剖析PostgreSQL中國的發展困惑,多方位闡述了打造完備的PG生態鏈的重要意義。

以下爲採訪正文:

圖片描述

瀚高基礎軟件股份有限公司產品開發中心內核開發部部長 王碩

CSDN:首先請您做一下自我介紹,包括您關注的技術領域,以及所在團隊等。

王碩:我是王碩,目前就職於瀚高基礎軟件股份有限公司,我們公司主要從事開源數據庫PostgreSQL的開源工作,包括其發行版等,而我在其中主要負責數據庫開發設計相關部分。目前我們團隊主要致力於在PostgreSQL的基礎上,針對客戶需求開發新特性,以期更好地滿足客戶,促進PostgreSQL的服務落地,從而達成推廣數據庫的目的。同時我本人目前也在中國PostgreSQL社區擔任核心成員之一,積極向社區推廣一些我個人關注的領域技術,積極寫博客做推廣,我們公司之前也做了很多關於數據庫的翻譯,目前大家接觸到的80%以上的PostgreSQL中文文檔,都來源於我們的翻譯,這主要是因爲我們公司內部有專人負責這一塊內容,且社區人員的精力也相對有限。

目前我們團隊還可以說非常年輕,這裏的年輕不僅是指年齡層面上的,更多是面對於數據庫這個領域而言——原本無論是在校還是工作,大家可能接觸更多的是基本的軟件、業務開發等,但數據庫不僅僅是一個簡單的應用,而是一個完整的產品,在理論、設計等各個方面都有着相關的限制,因而我們需要關注大量的內容,每個人涉及的東西非常多,因爲我們的基礎軟件人員流動較爲頻繁,我們團隊相對就比較年輕一些。

CSDN:就您個人而言,爲什麼會選擇PostgreSQL作爲自己的研究方向,在探索過程中是否曾遭遇瓶頸?

王碩:從嚴格意義上來講,不能說是我選擇了PostgreSQL。事實上,當初我們公司和學校有合作,大學期間,公司走進校園展開Oracle宣講活動,因爲我本身學的是軟件方面的專業,所以對此頗有興趣。恰好當時公司說能提供實習,我起初以爲是要做Oracle,就決定抓住這個機會加入進來。但過了一段時間之後才發現,需要去做的是我們自己公司的數據庫–HighGo Database。雖然和初衷有些出入,但這無疑是一個在企業中學習的好機會,便也一步步走到今天。而我真正開始接觸PostgreSQL大約是在開始工作之後半年左右,那時對基礎軟件已經有了一個很好的把握,因此也漸漸從中琢磨出幾分興味,慢慢覺得那些數據庫理論和算法等都挺有意思,加之我大學時期特別喜歡研究一些東西,也很喜歡解決問題的過程,學習PostgreSQL恰好擊中我的興趣點。

但又一段時間之後,我逐漸發現國內的基礎軟件氛圍並不是特別活躍,也因此無論是公司還是自己都開始生髮了某種基礎軟件情懷,發自內心地想讓這一領域蓬勃起來。我大學時期學習的數據庫是SQL Server,但多數課程也只是照本宣科,不見得傳授太多內容,因而我對數據庫一直處於一個懵懂的狀態。然而數據庫的重要性毋庸置疑,我們也都瞭解數據庫在中國市場中會是一個非常大的蛋糕,卻基本上都爲Oracle、DB2所壟斷,而且好多學生根本不瞭解數據庫的內核到底是什麼,大家只知道一味地使用,往往忽視了數據庫的本質。所以很多時候,我們就會想能否由咱們中國人自己打造一款非常優秀的數據庫,去替代,甚至是完全取代Oracle,這一討論就更像是一種情懷。

目前對我而言,最大的困惑就是PostgreSQL的流行度問題——誠實地講,它真的是還不夠流行,或者說市場佔比非常小。雖然我也經常去國外參加一些相關會議,總能聽到大家對PostgreSQL的肯定與褒揚,但如果去關注數據庫排行就不難發現,PostgreSQL一直處於第四位,但是其分數卻很低,甚至還不如第一名的零頭所以雖然我們一直在說我們是第四了,但其實和前位者的差距仍然非常大。那麼這一差距緣何而來?我認爲這裏反應出了很多問題。當然,之前有很多人表示MySQL是藉助互聯網的風頭才得以擴展開來,但爲什麼PostgreSQL沒能做到?經過和大家的交流後,我個人認爲這是一個血統問題,PG起源非常早,甚至可以追溯到1973年,起初就是爲了傳統企業的應用;相對的,MySQL在互聯網發展時期誕生的,天然的就帶有互聯網的一些特性,更適合當時的互聯網應用,並提供大量的相關特性。比如邏輯複製的功能,這恰是MySQL能成功的一個原因。
雖然PostgreSQL的理論非常成熟,框架也很好,但是若想要完全搞熟搞懂就需要花費極大的精力。至於Oracle,它一個非常成熟的環境,這恰恰是PostgreSQL所欠缺的,故而難以與之抗衡。鑑於這諸多阻力,怎麼去更好地推廣PostgreSQL就成了一個很重要的討論課題。而對於做PostgreSQL發行版的我們團隊而言,PostgreSQL良好氛圍的重要意義更是不言而喻。

CSDN:您的團隊在PostgreSQL應用的過程中,在安全性以及穩定性問題方面採取了哪些措施?

王碩:針對這一問題,在我們最新的產品中在安全等性能方面都有體現,主要有兩個關注點:一是數據全加密,這一定程度上和我們的客戶方向有關,就像此次技術大會上,我們可以看到參會嘉賓大多來自互聯網公司,而我們更多要面對的是傳統企業和政府客戶,他們對數據安全性的要求非常高,尤其是在磁盤安全性和內部安全性方面。對此,我們採取了一些數據庫加密措施,以防遭竊數據可以被還原。

此外,我們也對誤操作問題進行了防範——開源了一個叫做Xlogminer的數據庫工具。這是一款日誌挖掘工具,因爲每個數據庫都會寫WAL日誌,這裏我們就是對WAL日誌進行分析,能很好地還原數據庫所有操作,從而瞭解什麼時間做哪些操作,即可針對性地還原某些誤操作的內容。當然,也可以開啓數據庫log,但是經過測試開啓log會大大降低數據庫性能,而且WAL日誌本身已經將操作記錄下來了,所以通過分析WAL日誌來還原數據庫操作是一種最優的方式。

CSDN:您在上一個問題中有提到本次大會的參會方主要都是互聯網公司,那麼相較而言,瀚高團隊作爲與會嘉賓有什麼樣的特色?

王碩:這主要還是一個方向問題,因爲互聯網公司追求的更多是性能和數據分析的能力,而我們面對的則更傾向於客戶的數據安全性問題。

談到安全性話題,上面漏掉了一點,就是高可用層面的探討,而對於PostgreSQL而言,高可用恰恰是它的一個弱項,或者說是失分項。對此我們還做了一個新的架構,叫做SDS的架構,其類似於Oracle的REC。會間也有很多人問我,“爲什麼你們團隊會想要做這個SDS模式”?而不是一些現在大家普遍追求的方向,像是MPP等互聯網快速併發的東西。對於這個疑問,歸根結底還是定位差異,我們的客戶更加看重數據安全性、高可用,需要在某個節點發生損壞時能快速切換過去。而且我們面對的數據沒有互聯網公司那麼巨量,我們的節點可能無法支持幾十臺乃至上百臺的規模,但從某種程度上看我們的性價比會更高一些,這也是我們的一個特色。

CSDN:本次技術大會是由我們國內的PostgreSQL社區主導的,您之前也有提到一些海外活動,那麼能否請您結合國內外社區情況,談談PostgreSQL在國內外的發展態勢?

王碩:最近我剛從美國的PostgreSQL Open大會回來,包括之前的幾次參會經歷中,其實我們能感受到大家對PostgreSQL的熱情還是非常高的,不管教育、金融,還是醫療等各行各業,都能看到PostgreSQL的身影。實際上在國外,特別是美國地區,對於PostgreSQL的認可度非常高,每次去美國參會就會發現呼聲特別高,回國就會發現一個落差,而且分數也依舊不高,這是一個直觀的現象。

再者是一個上雲的問題,目前亞馬遜雲是全球第一的雲廠商,其對PostgreSQL也非常支持,而PostgreSQL現在在國外整體走勢就是上雲——如何上雲是現在PostgreSQL一個最大的發展方向,這相對國內也是一個不同點。誠然,國內在雲領域,阿里等雲廠商,都在大力推行雲技術,但從PostgreSQL的角度來看,其上雲進程遠沒有國外那麼快速,這與生態鏈也有一定的關係,故而相對緩慢一些。

此外,由於接觸的時間長短不同,國外社區在峯會等活動劃分的情況也要相對更細一些,主要有以下幾種類型:

  • PG Open大會:面向諸多廠商,主要由一些廠商去介紹自己的產品,以及PostgreSQL之於其產品的特性等;
  • PG Conference:主要指的是用戶大會,由廣大PGer互動交流,分享各自的數據庫使用心得體會、技術分享;
  • PG Vision:是由一些EnterpriseDB公司引導的一個商業探討會議。

除了這三類之外,還有一個經常在加拿大舉行的全球開發者大會,主要是介紹數據庫目前的方向、開發的態勢,以及每年數據庫的一些新特性等。而國內現階段其實僅有一個Conference大會,這也是國內外社區發展的一大區別。

CSDN:面對這些發展落差,尤其對初學者而言,技術選型時,在瞭解了PostgreSQL國內外市場佔比差異之後,未免會對其持疑惑態度,那麼您如何看待打造中國的PG生態這一問題?

王碩:這其實正是我們公司一直在試圖努力的方向,就像我們做產品也是想提升PostgreSQL的市場佔有率,這裏就涉及到PostgreSQL的一塊明顯的短板——雖然其擴展性非常優秀,可謂什麼功能都有,基本上用戶想要的性能都可以找到相應的插件來實現,但真的在實際應用時,就會發現需要去學、去看、去改的東西極其多,很難找到一個非常好的整合。因此我們團隊的下一步目標,就是在PostgreSQL的易用性上做出一定的優化:不管是在監控、關聯工具,還是一些插件,我們都能夠積極地放到數據庫上讓用戶得以直接使用,儘量透明化,讓用戶無需再考慮太多技術問題,從而把重心落在業務上,促進業務快速發展。

CSDN:從技術滲透的角度來看,您在學習PostgreSQL的過程當中,還進行了哪些知識技能儲備?

王碩:因爲我是做數據庫開發的,所以在開始研究PostgreSQL之後就需要學習瞭解很多東西,包括源碼等內容,書越看越厚,每看到一些新東西就會發現自己還有所欠缺。因爲數據庫本身你需要了解,同時與數據庫結合的操作系統你也需要深入瞭解,甚至於其和硬件的配合也需要懂一些,比如我最近關注的GPU相關技術——如何用顯卡提升數據庫計算效率。這是我一直頗爲關注的一個技術方向,因爲GPU的性價比較之CPU要高很多,CPU畢竟是通用的,而GPU主要是用來做計算的,所以我更想利想GPU去做計算。

再談SSD,或者說大內存,數據庫如何更好地與其適配,我們對一些參數有所調整。SSD和機械硬盤是不一樣的,這個問題的處理其實要花費大量工夫來研究,或者需要一定的時間來測試。

此外,我們公司此前還推出了一個新特性——利用LLVM對數據庫查詢進行加速,我們團隊花了很多精力去調研相關領域知識。而我們現在能夠實現某些應用常見下,在不更改數據庫原有源碼的情況下,使原有查詢效率提高10倍。當前列式存儲、分佈式以及SSD的迅猛發展,帶來的I/O瓶頸慢慢削弱,CPU的瓶頸日益凸顯,而LLVM正好能解決這個問題。

CSDN:您能否分析一下PostgreSQL在哪些應用場景下比較佔優勢?

王碩:在我看來,PostgreSQL的優勢在於較之MySQL,其更適合一些重要級的分析型業務,以及交易性較強的業務,因爲其執行計劃、查詢計劃器都寫得非常好,能夠對極其複雜的查詢做出很好的優化。在這一點上,我覺得PostgreSQL要比MySQL略勝一籌,當然這裏並不是說MySQL不好,而是說MySQL在某些場景下並不是特別適用,像是某些互聯網場景就更適合於MySQL,因爲他們更多是簡單查詢,不需要太多複雜的程序。但換個角度分析,數據量一旦達到某個高度,複雜查詢效率就會變慢,這就又觸及了PostgreSQL不甚擅長的部分,而現在也推出了很多類似於PostgreSQL-XL、Greenplum等基於PostgreSQL的新的產品,恰好能解決這一問題。

此外我還想補充一點,就是我非常推薦高校展開PostgreSQL的學習,因爲其代碼非常規範,不管註釋,還是文檔及構建函數標的準都很棒。通過了解其代碼,可以進而深入數據庫內核知識,這對高校學生而言無疑是頗有裨益,能助其對數據庫的本質有一個清晰的認知,不至於直至畢業對數據庫的概念都停留在“存放數據”這樣的表層理解,而是更多瞭解存取的原理,以及如何優化等細節問題,代碼就是我們最好的老師。

CSDN:上面的問題中您也有提到一些近來學習的新內容,那麼能否總結介紹以下您最近會關注的一些新的技術方向?

王碩:前面我有簡單提到一些,包括利用GPU、LLVM技術來解決一些問題。此外,最近我還會關注一些人工智能(AI)相關的話題,其實這也與數據庫有千絲萬縷的聯繫,包括我們此次技術大會對此也會有所覆蓋,例如如何利用AI去更好地優化我們數據庫SQL以及數據庫結構,這也是我們未來發展一個比較好的方向。因爲和機器相比,人的精力是有限的,而若將這部分內容交由機器來完成,只要其算法足夠完備,便能夠替代很大一部分人工的工作,減少人力工作也會是AI的一大突出貢獻。

CSDN:您平時也會寫一些博客文章等來對一段時間的學習內容做一個總結,那麼這裏是否有什麼親測有效的學習經驗可以同大家分享?

王碩:事實上,我最近也一直在考慮構建學習計劃的事情,考慮到我是從數據庫開發起步的,所以可能和一些DBA不太一樣,以PostgreSQL的學習爲例,我認爲不管是做開發還是做DBA,都需要對代碼有一個比較好的瞭解。如果是DBA,可能更需要去了解其功能代碼,以便在問題發生時準確定位,清楚問題出在哪裏,這時若能力去更改自然更好,否則提交社區即可。我之前有看過一個人的博客,他是個DBA,懂技術、懂代碼,但他就可以在不更改代碼的基礎上改變數據庫的一個特性,這就很令人佩服。所以說這是一個極佳的學習途徑,因爲在你足夠了解代碼之後,就可以很好地利用這個規則去完成原本數據庫不讓你去做甚至不能達到功能,從而得以更好地對數據庫進行維護優化。

CSDN:最後,您還想和我們的讀者分享些什麼?

王碩:長期以來,我們公司給自己定位是“開源數據庫軟件的先行者”,爲什麼這麼說呢?我覺得是主要包含以下幾個方面:

首先,我們的數據庫完全自主可控,畢竟PostgreSQL本身無論是開源協議,還是開源代碼,都可以下載去做發行版,我們對代碼熟悉之後,也就不存在一些所謂後門的情況,我們掌握自己的代碼,也可以對代碼進行一些更改。雖然這個過程可能挺痛苦,但是我們也因此佔據了一些優勢,就是可以和現在很多的國產CPU,或國產操作系統進行很好的適配。我們專注於推進PostgreSQL,以及打造國產數據庫,主要通過以下幾種手段:

  1. 和一些ISV服務廠商進行合作捆綁,從而更好地改變一些開發人員的習慣,因爲很多時候大家已經習慣了Oracle、Java這類非常便捷的選擇,一時間可能很難去換一種數據庫或語言,因爲這無疑是一個痛苦的過程。當然這一現象也很好理解,因爲如果你突然讓一個用戶換個數據庫,勢必要做出很多更改,也可能會出現一些不可預知的問題,他們完全被Oracle綁定了,脫離起來很是困難,所以我們想通過一些方式改變開發者的習慣,從而更好地推廣PG;

  2. 我們也積極地同雲廠商開展一些合作,因爲現在畢竟是雲的天下,所以我們也針對這一點推出了雲上的數據庫服務,這也是我們目前點關注的一個方向;

  3. 我們同高校間也有很多合作,第一我們會有一些定期的校園行活動,爲大學生宣講一些數據庫知識,其中也包括PostgreSQL相關課題,幫助大家瞭解PostgreSQL,從學生這一代開始普及對於PostgreSQL的認知,讓他們能夠漸漸用起來,將來在考慮工作等選擇時,也有機會將PostgreSQL納入考量,而不是隻考慮Oracle等。

  4. 我們同國內外PostgrSQL社區建立了非常緊密的聯繫,我們如今在北美也建立了一個研發中心,主要負責海外事務的對接工作,畢竟PostgreSQL這一數據庫本身源於美國,我們如果能更好地同國際接軌,無疑將對我們數據庫的產品拉力起到很大的幫助。我們的美國研發中心負責人周寶峯在那邊負責整體的研發方向,接觸到一些國際上更好的公司,從而將這些更好的技術融合到我們自身的產品當中,這樣繼而助力我們的數據庫在國內的發展。

最後,我認爲打造完整的生態鏈這一點尤爲重要。現在爲什麼大家不常用PostgreSQL功能?很大一部分原因就是用起來比較費勁兒——大家左找右找,非常困難。這就要求我們利用一切手段,包括中間件、管理工具、數據庫底層,甚至硬件等方式,合力將整個PostgreSQL的生態鏈打造好,同時做好推廣工作,讓用戶用起來更方便,提升PostgreSQL的認可度與它接受度,讓PostgreSQL越來越好。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章