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