德哥:从Oracle DBA到PostgreSQL布道者
云棲社區(qū)明星專家德哥日前在IT168的盛會——2016 第七屆中國數(shù)據(jù)庫技術(shù)大會做了分享。整理文章見《從Oracle DBA到PostgreSQL布道者》 ,很有價值,轉(zhuǎn)載到社區(qū),分享給更多朋友。
嘉賓介紹:
PostgreSQL 中國社區(qū)發(fā)起人 周正中
周正中,網(wǎng)名德哥 ( digoal ),PostgreSQL 中國社區(qū)發(fā)起人之一,PostgreSQL 象牙塔發(fā)起人之一,DBA+社群聯(lián)合發(fā)起人之一,10余項數(shù)據(jù)庫相關(guān)專利,曾就職于斯凱網(wǎng)絡(luò),負(fù)責(zé)數(shù)據(jù)庫部門。主導(dǎo)了集團(tuán)數(shù)據(jù)庫系統(tǒng)、存儲、主機(jī)、操作系統(tǒng)、多IDC的架構(gòu)設(shè)計和建設(shè);完成了對數(shù)據(jù)庫HA、容災(zāi)、備份、恢復(fù)、分布式、數(shù)據(jù)倉庫架構(gòu)設(shè)計和建設(shè);數(shù)據(jù)庫管理和開發(fā)的標(biāo)準(zhǔn)化體系建立。于納斯達(dá)克上市前成功使用PostgreSQL完成去O,并順利通過SOX審計。現(xiàn)就職于阿里云數(shù)據(jù)庫內(nèi)核技術(shù)組。
正文:
大家好,今天我要給大家分享的話題是從Oracle DBA 到PostgreSQL布道者,首先先做一下自我介紹。
我是在2006、2007年開始接觸數(shù)據(jù)庫,09年的時候成為Oracle DBA,2010年,接觸到了PostergreSQL,之后就一直在做PostergreSQL的布道工作。目前,我已經(jīng)分享技術(shù)類文章2000余篇,我的目標(biāo)是寫到1萬篇。
2005年,我從學(xué)校畢業(yè)拿到了我的第一份工作,是一份技術(shù)支持類的文章。為什么會去學(xué)Oracle呢?其實是有一個契機(jī)的,當(dāng)時我們公司是乙方,甲方把數(shù)據(jù)庫的一些東西刪除了,數(shù)據(jù)庫就起不來了,然后Oracle的技術(shù)人員過來把數(shù)據(jù)庫恢復(fù)了。當(dāng)時我就感覺真是太牛了,所以就開始接觸Oracle。
我的第一份DBA工作是在2008年,我在那家公司第一次聽到了PostgreSQL。PostgreSQL數(shù)據(jù)庫掛了之后業(yè)務(wù)還能繼續(xù)跑,它只會丟掉一部分?jǐn)?shù)據(jù),其它的數(shù)據(jù)庫還活著,可以繼續(xù)服務(wù)。Sharding是一個基于PostgreSQL的一個插件,最早是在國外流行起來的。
這家公司在之后大量使用PostgreSQL有原因的。因為在08年到09年的時候,PostergreSQL有了一定的發(fā)展,產(chǎn)品推陳出新,公司的業(yè)務(wù)也有了飛速的增長。下面就簡單介紹一下我們當(dāng)時的應(yīng)用系統(tǒng)。
當(dāng)時我們的應(yīng)用有基于地理位置的位置交友應(yīng)用、社區(qū),網(wǎng)游,虛擬的貨幣系統(tǒng)交易、游戲平臺。我們當(dāng)時的數(shù)據(jù)量是普通的企業(yè)數(shù)據(jù)量,單庫的數(shù)據(jù)量是200GB到500GB,當(dāng)時的服務(wù)器全是X86的機(jī)器。
在這使用的一年中,不管是從穩(wěn)定性還是從性能、功能、可靠性的方面來講,PostergreSQL都滿足了我們的需求,另外我們還使用了其他數(shù)據(jù)庫所沒有的特性。
我們基于位置的交友應(yīng)用,現(xiàn)在是有MongoDB支撐的,之前是由基于地理位置應(yīng)用的插件支撐。我們的社交系統(tǒng)里面有比較復(fù)雜的關(guān)系,所以會有比較多的遞歸。如果當(dāng)時我們沒有采用PostergreSQL,而是選用其它開源數(shù)據(jù)庫,恐怕是不能達(dá)到這個效果的。
當(dāng)時PostergreSQL支撐了我們所有的業(yè)務(wù)應(yīng)用,性能完全滿足要求,從未因數(shù)據(jù)庫問題crash,從未丟失數(shù)據(jù),也沒有遇到bug。這也給我們之后全面應(yīng)用PostergreSQL提供了信心。
2009年到2010年,我們公司準(zhǔn)備在納斯達(dá)克上市,當(dāng)時我們的商業(yè)數(shù)據(jù)庫在成本核算方面是無法滿足上市的需求,所以當(dāng)時我們CFO決定要用PostgreSQL替代商業(yè)數(shù)據(jù)庫。
如果公司上市的話,要替換原來的數(shù)據(jù)庫,就要評估這個數(shù)據(jù)庫能不能滿足上市的需求,尤其是在審計方面。
帳戶安全必須有一個密碼復(fù)雜度的詳細(xì)策略,包括用戶管理和認(rèn)證管理,比如密碼的更改周期,賬戶鎖定等等。
鏈路安全,這是數(shù)據(jù)庫一定要滿足的,一般是通過鏈路加密來進(jìn)行的。
數(shù)據(jù)安全,尤其是敏感數(shù)據(jù)一定要加密,加密的收到有很多,比如可以通過PostgreSQL加密的數(shù)據(jù)類型來存儲你的數(shù)據(jù),或者是使用業(yè)務(wù)加密,把加密的階段放在業(yè)務(wù)存儲。
數(shù)據(jù)庫用戶操作審計,需要制訂內(nèi)容策略,可以支持具體的業(yè)務(wù)。
開源數(shù)據(jù)庫有很多,支持的數(shù)據(jù)類型也很多。很多企業(yè)都是有特殊的業(yè)務(wù)場景的需求,不能簡單用普通數(shù)據(jù)來描述,比如基因序列或者是化學(xué)方程式這類的數(shù)據(jù)常用數(shù)據(jù)庫是沒有辦法來編碼的。這時候就需要一個擴(kuò)展能力強(qiáng)的數(shù)據(jù)庫PostgreSQL提供了非常豐富的接口,可以自己編寫數(shù)據(jù)類型,也可以基于開放的索引接口定義數(shù)據(jù)類型。
雖然分?jǐn)?shù)據(jù)庫發(fā)展了這么多年,性能的差別不是特別大,但是還是有些微差距的,所以還是需要根據(jù)業(yè)務(wù)場景建模測試、工業(yè)標(biāo)準(zhǔn)測試。
代碼成熟度對于一般的用戶來說難度是很高的,這里有一個小技巧,你去看社區(qū)發(fā)布的代碼數(shù)量,就可以推測你的產(chǎn)品代碼成熟度。
平臺的兼容性,目前PostergreSQL是可以兼容各個平臺的。
除了以上的能力,PostergreSQL還有兩個重要的能力,一個是scale up,另一個是scale out。scale up能力主要考量的是是否能夠充分利用計算機(jī)資源。scale out能力主要是指是否支持讀寫分離,sharding。
社區(qū)的活躍度和生態(tài)也是要考慮的因素。很多公司都會忽略掉生態(tài),其實生態(tài)是很重要的,傳統(tǒng)企業(yè)和互聯(lián)網(wǎng)企業(yè)的需求是不一樣的。社區(qū)的軟件開發(fā)商、數(shù)據(jù)庫的廠商以及服務(wù)的提供商,人才儲備,國家整體的軟件研發(fā)能力都要納入考量的范圍。
很多企業(yè)也是很關(guān)注案例的,他們會關(guān)注同行業(yè)的競爭對手在使用哪款數(shù)據(jù)庫產(chǎn)品。
學(xué)習(xí)成本和開發(fā)成本,如果你要獨立研究的話,這方面的支出就會很大,所以很多企業(yè)都選擇投身參與到社區(qū)中。
我為什么要做PostgreSQL布道,其實和傳教士為什么跑到偏遠(yuǎn)的地方傳道是有一定的相互性,PostgreSQL確實是非常好的產(chǎn)品,我們企業(yè)也從中獲益很多,它的代碼優(yōu)雅,穩(wěn)定性好、性能佳、擴(kuò)展性強(qiáng)、接口豐富等等,這么多的優(yōu)點都值得我們宣揚。最主要的是當(dāng)時我們成立中國用戶會的時候,中國對PostgreSQL數(shù)據(jù)庫認(rèn)知非常少,酒香巷子深,從現(xiàn)在看,也證明了我們當(dāng)時的選擇是沒有錯的。
PG在國內(nèi)關(guān)注的增長趨勢是在往上走的。
百度的搜索指數(shù)代表中國市場,谷歌的搜索指數(shù)代表國際市場,從全球的角度來看,中國市場對PostgreSQL的認(rèn)知和國外市場還有一定的差距。
國內(nèi)的用戶沒有聽說過PostgreSQL,那么就會對PostgreSQL充滿疑問。例如它的性能怎么樣,它能管理多大的數(shù)據(jù)量,它能不能用好硬件資源,使用哪些方式來提升我的性能,以及和其它的數(shù)據(jù)庫相比有哪些優(yōu)缺點。以上疑問都是我們布道者要做的工作。
接下來給大家來普及幾個PostgreSQL的案例,可能會顛覆大家對數(shù)據(jù)庫產(chǎn)品的認(rèn)知。
第一個例子,我們看這個圖,從左邊到右邊是一個數(shù)據(jù)聚集的過程,這個在數(shù)據(jù)分析或者數(shù)據(jù)挖掘領(lǐng)域是非常常見的案例。比如說我對一些用戶的行為做分類,在PG里面可以通過kmeans做到。
實時計算某WEB站點的請求延遲, 90%的請求低于多少毫秒, 95%的請求低于多少毫秒,99%的請求低于多少毫秒。這個的處理方法也是很簡單,數(shù)據(jù)采集到性能數(shù)據(jù),我只要建一個模式統(tǒng)計就可以了。除此之外,在加一個窗口查詢,就能得到我們想要的結(jié)果。
第三個例子,我在數(shù)據(jù)庫里面能不能做多元的信息反饋,這個在數(shù)據(jù)倉庫或者是一些BI系統(tǒng)里面也是非常常見的,但是在關(guān)系型數(shù)據(jù)庫里是不常見的。P元線性回歸,通過圖上的公式求得截距和斜率,然后就可以預(yù)測yn。
這里用到linregr訓(xùn)練方法,訓(xùn)練source_table然后放到out_table里,通過這樣的一個函數(shù)就可以解決這樣的應(yīng)用需求。
除了剛剛舉的例子之外,madlib庫還有很多作用,它將很多東西封裝成了函數(shù),通過這些函數(shù)就能夠?qū)崿F(xiàn)深度學(xué)習(xí)的某些東西。
第四個例子顛覆了大家對數(shù)據(jù)類型的理解,大家可能認(rèn)為數(shù)據(jù)庫只能存儲long、int、text這類的數(shù)據(jù),實際上數(shù)據(jù)庫還可以存儲更多的數(shù)據(jù)類型。比如范圍搜索的數(shù)據(jù),可能在傳統(tǒng)數(shù)據(jù)庫里面是兩個字段,startvalue和endvalue,但是在PostgreSQL只需存儲一個字段,就可以表示一個數(shù)據(jù)范圍,甚至就可以建索引。這個索引是基于range建立的,在做范圍搜索的時候查詢效益非常高。
下面是一個查詢效益差別的對比。
第五個例子是一個流式數(shù)據(jù)的應(yīng)用場景。這個應(yīng)用場景在物聯(lián)網(wǎng)的大背景下的用戶需求也是非常大的。這種場景有兩個特點,第一個特點是大量的數(shù)據(jù)積累,第二個是要基于時間分析。
我們以往是使用Btree索引來實現(xiàn)的,我們發(fā)現(xiàn)數(shù)據(jù)量是非常龐大的,執(zhí)行效率并不是很高。后來我們采用了BRIN的索引。
下圖是兩種索引性能差異的對比。
第六個例子是排他約束,排他約束和唯一約束也是相關(guān)的,唯一約束是根據(jù)排他約束來建立的。
第七個例子是外部表,PostgreSQL通過接口連接到后端的數(shù)據(jù)源,數(shù)據(jù)源的類型十分多樣化。
第八個例子是秒殺,這里講的是PostgreSQL自帶的一個類似于自選鎖的功能,這個鎖是非常短暫,用于秒殺的網(wǎng)站的話,能夠提升近百倍的性能。
所謂布道不僅僅只是分享案例,還包括貢獻(xiàn)核心代碼、review代碼、報告BUG、開發(fā)插件、開發(fā)驅(qū)動、維護(hù)打包程序(bin,rpm,deb....)、port流行的軟件到PostgreSQL、開發(fā)支持PostgreSQL的程序、翻譯文檔、維護(hù)官網(wǎng)手冊和插件手冊、維護(hù)HOWTO、維護(hù)遷移guide(mysql,oracle,infomix,sqlserver,....to PostgreSQL)、分享文檔、寫書、寫博客、組織用戶會議、幫助其他用戶、測試patch、測試性能等等。
PostgreSQL是從伯克利寫的 POSTGRES 軟件包發(fā)展而來,在1995年的時候有了社區(qū)管理的概念,目前PostgreSQL的大版本更新幾乎是一年一迭代。
PostgreSQL的代碼活躍度做的也是比較好,比如我提交一個代碼,里面會有代碼審核,告訴你哪有問題,然后針對性的修改代碼。
上圖是PostgreSQL近幾年的里程碑,我們可以看到每一年新版本的發(fā)布都有不同的東西。很多功能的實現(xiàn)都是一次次迭代出來的。
本次測試模型選用的PostgreSQL的8.4到9.5版本,數(shù)據(jù)量為305GB,測試結(jié)果發(fā)現(xiàn)各個版本的性能差異不是特別大,原因是IO的瓶頸。
第二次測試我們采用的是一億的數(shù)據(jù)量,數(shù)據(jù)全部在內(nèi)存中,考量的是數(shù)據(jù)庫的代碼效率,我們看到從8.4到9.5,性能幾乎翻了一倍。
這是另外一個場景,一共有64張表,每張表有1000萬的數(shù)據(jù),64個并發(fā)連續(xù)壓測2個小時,壓測結(jié)果大家可以參考上圖。
自從我們成立中國用戶會以后,我們中國的用戶發(fā)生了非常巨大的變化。之前我了解到幾乎沒有公司在使用PostgreSQL,但是我們現(xiàn)在看,已經(jīng)有這么多的公司都在用PostgreSQL,而且很多是國字頭的。我們可以看到PostgreSQL在中國發(fā)展勢頭非常好。
整個PostgreSQL社區(qū)的核心成員是六個,主要貢獻(xiàn)者有40多個。PostgreSQL在中國的發(fā)張最早可以追溯到1999年,那時我們只是在做一些文檔的推廣,直到2011年P(guān)ostgreSQL社區(qū)成立,這期間是完全沒有社區(qū)的概念。現(xiàn)在,我們每年會在各地舉辦會議、會有免費的DBA培訓(xùn),也會和高效合作項目。用戶會把整個生態(tài)的用戶、企業(yè)集合起來,大家一起把這個產(chǎn)品做好。
我們看一下截止到現(xiàn)在,社區(qū)發(fā)生什么變化。目前整個社區(qū)在中國大概有超過一萬的人員,研發(fā)人員超過三百個。為什么說研發(fā)人員的占比這么少呢?因為PostgreSQL數(shù)據(jù)庫的開源協(xié)議是BSD,你把PostgreSQL數(shù)據(jù)庫拿過來一行代碼不改,可以直接包裝成自己的產(chǎn)品拿去售賣,但如果你把MySQL數(shù)據(jù)拿過來一行代碼不改直接使用是要追究你的法律責(zé)任的。
用戶會的主要工作是維持生態(tài),當(dāng)然也會有很多文檔翻譯,案例分享,主持會議,聯(lián)合其它的社區(qū)一起來推動PostgreSQL等等的工作來做。從用戶會參會來看,基本上已經(jīng)接近十倍的增長。
學(xué)習(xí)任何一個產(chǎn)品都是多實踐、多分享、有問題多翻手冊和源碼、多和社區(qū)小伙伴交流,開源的產(chǎn)品可以參與到社區(qū)中,這時你會發(fā)現(xiàn)你要成為一個PostgreSQL DBA花費的時間成本不是很多,比如說你是一個有一定數(shù)據(jù)庫基礎(chǔ)的DBA,你花一個月時間去學(xué),肯定沒問題。如果你是有Linux管理基礎(chǔ)的SA或者是有服務(wù)端開發(fā)經(jīng)驗的開發(fā)人員,那么差不多需要三個月。如果你是完全沒有基礎(chǔ),半年的時間你基本也可以上手了。
最后是給大家分享一下我對PostgreSQL市場的判斷。商業(yè)數(shù)據(jù)庫這塊主要憑借PostgreSQL BSD許可,其實有很多國產(chǎn)數(shù)據(jù)庫是基于PostgreSQL,另一塊是MPP DB市場,有超過一半的MPP數(shù)據(jù)庫是基于PostgreSQL,比如Greenplum、Deepgreen、redshift、PG-XL、ASTERDATA、ParStream、ParAccel等等,如果大家有興趣或者是有很好的渠道,可以考慮一下MPP PostgreSQL。高校方向主要是科研。公有云市場也大有可為,比如上云、中間件、培訓(xùn)等等。其實現(xiàn)在在國內(nèi)還沒有一家做PostgreSQL的培訓(xùn),這是空白的市場,發(fā)展空間巨大,大家可以去嘗試。
阿里云的ApsaraDB PostgreSQL團(tuán)隊擁有很多PG源碼專家,我們基于PostgreSQL做了很多優(yōu)化,另外還提供一個高度兼容Oracle的產(chǎn)品PPAS。
總結(jié)
以上是生活随笔為你收集整理的德哥:从Oracle DBA到PostgreSQL布道者的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python socket Ftp ge
- 下一篇: mysql 用户已设置密码,但登录可以不