苗健
中國(guó)作為一個(gè)信息化大國(guó),擁有自主可控的關(guān)系型數(shù)據(jù)庫(kù)產(chǎn)品非常必要。與此同時(shí),我們的國(guó)產(chǎn)數(shù)據(jù)庫(kù)經(jīng)過(guò)20多年的發(fā)展,目前的現(xiàn)狀依然是:完全自主開(kāi)發(fā)的產(chǎn)品至今為止還“不堪重用”,還未能進(jìn)入市場(chǎng)與研發(fā)的良性循環(huán),也未能縮短與國(guó)際先進(jìn)水平的差距;至于源代碼引進(jìn),2015年,引進(jìn)Informix源代碼的道路,如今亦已成為死路;云計(jì)算數(shù)據(jù)庫(kù)平臺(tái)方面,互聯(lián)網(wǎng)、云計(jì)算公司推出的數(shù)據(jù)庫(kù)產(chǎn)品,不能承擔(dān)起傳統(tǒng)領(lǐng)域Oracle替代品的角色。
那么,國(guó)產(chǎn)數(shù)據(jù)庫(kù)到底應(yīng)該怎樣發(fā)展呢?我們需要從市場(chǎng)上的客戶對(duì)國(guó)產(chǎn)數(shù)據(jù)庫(kù)到底存在哪些疑慮談起。目前,國(guó)內(nèi)客戶對(duì)于國(guó)產(chǎn)數(shù)據(jù)庫(kù)存在的疑慮主要有:技術(shù)先進(jìn)性—總感覺(jué)國(guó)產(chǎn)數(shù)據(jù)庫(kù)還不夠先進(jìn);產(chǎn)品穩(wěn)定性—產(chǎn)品的穩(wěn)定性需要廣泛的應(yīng)用的磨煉;市場(chǎng)案例—對(duì)于自研產(chǎn)品來(lái)說(shuō),同樣是死結(jié);支持服務(wù)保障—這一點(diǎn)是唯一有可能做的;未來(lái)發(fā)展持續(xù)性—這需要公司實(shí)力來(lái)支撐,而且要有強(qiáng)大的科研力量。如何在短時(shí)間內(nèi)消除客戶的疑慮,我們把目光投向了開(kāi)源軟件。
開(kāi)源軟件是國(guó)產(chǎn)數(shù)據(jù)庫(kù)發(fā)展的可行之路
而今,開(kāi)源軟件已經(jīng)得到廣泛應(yīng)用,這其中也包括開(kāi)源數(shù)據(jù)庫(kù)軟件。在技術(shù)的先進(jìn)性上,開(kāi)源數(shù)據(jù)庫(kù)軟件雖然比起商業(yè)產(chǎn)品,還存在一定的差距,但這個(gè)差距已經(jīng)不妨礙開(kāi)源軟件在市場(chǎng)上的接受度以及應(yīng)用的領(lǐng)域;在產(chǎn)品穩(wěn)定性上,與小規(guī)模商業(yè)軟件不同,開(kāi)源軟件業(yè)已得到市場(chǎng)的廣泛應(yīng)用,其產(chǎn)品的穩(wěn)定性得到了市場(chǎng)應(yīng)用的磨煉;在應(yīng)用案例上,開(kāi)源軟件的應(yīng)用案例甚至多過(guò)大部分商業(yè)軟件;在服務(wù)上,開(kāi)源軟件的服務(wù)完全取決于對(duì)產(chǎn)品的掌握和服務(wù)的體系和意識(shí);在發(fā)展的持續(xù)性上,開(kāi)源軟件來(lái)源于開(kāi)源社區(qū)。
我們可以看到,開(kāi)源的數(shù)據(jù)庫(kù)軟件其市場(chǎng)的接受度、應(yīng)用的廣泛性,遠(yuǎn)大于傳統(tǒng)的國(guó)產(chǎn)數(shù)據(jù)庫(kù)。那么國(guó)產(chǎn)數(shù)據(jù)庫(kù)的發(fā)展為什么不借助開(kāi)源的數(shù)據(jù)庫(kù)產(chǎn)品呢?借助開(kāi)源產(chǎn)品可以直接獲得源代碼,免去重復(fù)“發(fā)明輪子”的工作,把有限的時(shí)間、精力、資金用在最需要解決的問(wèn)題上。從2009年開(kāi)始,國(guó)內(nèi)就有公司組織力量開(kāi)始研究PostgreSQL的源代碼,力圖為國(guó)內(nèi)的數(shù)據(jù)庫(kù)客戶提供一個(gè)基于開(kāi)源數(shù)據(jù)庫(kù)軟件的新選擇。
PostgreSQL適合作為國(guó)產(chǎn)數(shù)據(jù)庫(kù)發(fā)展的基礎(chǔ)
市場(chǎng)上知名的開(kāi)源數(shù)據(jù)庫(kù)有幾個(gè),但哪一個(gè)適合作為國(guó)產(chǎn)數(shù)據(jù)庫(kù)發(fā)展的基礎(chǔ)呢?
從影響力與普及度方面考慮
有一個(gè)網(wǎng)站叫DB-Engines(https://db-engines.com/en/ranking),它通過(guò)收集互聯(lián)網(wǎng)上的信息,對(duì)各個(gè)數(shù)據(jù)庫(kù)產(chǎn)品的普及度和“人氣”進(jìn)行排名,每個(gè)月更新(如圖1)。我們可以看到,2018年2月的最新排名,前四位是:Oracle、MySQL、Microsoft SQL Server、PostgreSQL。第五位是文檔數(shù)據(jù)庫(kù)MongoDB,而著名的IBM DB2排在第六位。我們注意到,PostgreSQL如今排在第四位。而前三位中,只有MySQL屬于開(kāi)源數(shù)據(jù)庫(kù),剩下的就是Oracle和MS SQL Server了。PostgreSQL的排名說(shuō)明了它擁有大量的用戶與案例,除了北美,PostgreSQL在日本和俄羅斯擁有非常廣泛的應(yīng)用。
我們沒(méi)有采用MySQL的源代碼作為國(guó)產(chǎn)數(shù)據(jù)庫(kù)的起點(diǎn),主要有兩個(gè)原因。
第一,MySQL雖然是目前應(yīng)用最廣泛、普及度最高的開(kāi)源數(shù)據(jù)庫(kù),但MySQL的技術(shù)架構(gòu)和產(chǎn)品功能與PostgreSQL相比是存在差距的。PostgreSQL相對(duì)而言是一個(gè)全功能的專業(yè)數(shù)據(jù)庫(kù)產(chǎn)品,而且MySQL社區(qū)如今已被Oracle掌控,它的發(fā)展多少會(huì)受到Oracle的影響,MySQL與Oracle商業(yè)產(chǎn)品之間會(huì)永遠(yuǎn)保持一個(gè)明顯的差別。這樣,以MySQL源代碼為基礎(chǔ)發(fā)展國(guó)產(chǎn)數(shù)據(jù)庫(kù)產(chǎn)品,無(wú)法承擔(dān)起取代Oracle數(shù)據(jù)庫(kù)的使命。
第二,MySQL雖然是開(kāi)源產(chǎn)品,但MySQL的開(kāi)源協(xié)議是GPLv2。這不是一個(gè)“活雷鋒”的協(xié)議,它要求在該源代碼基礎(chǔ)上開(kāi)發(fā)的產(chǎn)品也必須開(kāi)源。因此,在MySQL源代碼上發(fā)展國(guó)產(chǎn)數(shù)據(jù)庫(kù),在知識(shí)產(chǎn)權(quán)法律條款上是行不通的。所以,我們選擇了市場(chǎng)普及度第一,適合作為國(guó)產(chǎn)數(shù)據(jù)庫(kù)基礎(chǔ)的開(kāi)源數(shù)據(jù)庫(kù)平臺(tái)—PostgreSQL。
從產(chǎn)品的血統(tǒng)與開(kāi)源政策分析
談到PostgreSQL,就不能不提加州大學(xué)伯克利分校。加州大學(xué)伯克利分校是當(dāng)今數(shù)據(jù)庫(kù)領(lǐng)域產(chǎn)品技術(shù)與人才的搖籃。早在20世紀(jì)80年代末90年代初,加州大學(xué)伯克利的服務(wù)器(當(dāng)時(shí)還是ftp服務(wù)器或者是BBS)上就放滿了各種數(shù)據(jù)庫(kù)相關(guān)的軟件,很多都是研究生的習(xí)作(它們有些直接提供源代碼,有些則不提供源代碼,但可以自由使用,稱之為share ware),其中的一些技術(shù)和想法后來(lái)都出現(xiàn)在著名的商業(yè)數(shù)據(jù)庫(kù)軟件中。
PostgreSQL是數(shù)據(jù)庫(kù)大師、加州大學(xué)伯克利的Michael Stonebraker教授(因其對(duì)數(shù)據(jù)庫(kù)領(lǐng)域做出的杰出貢獻(xiàn),在2014年榮獲圖靈獎(jiǎng))帶領(lǐng)他的研究生們從1986年開(kāi)始研發(fā)的關(guān)系型數(shù)據(jù)庫(kù)項(xiàng)目。后來(lái),因?yàn)槌鍪哿酥暗腎ngres數(shù)據(jù)庫(kù)產(chǎn)品,他們把學(xué)校里的這個(gè)數(shù)據(jù)庫(kù)項(xiàng)目在1995年前后命名為PostgreSQL,其含義是Ingres的后來(lái)者。
Michael Stonebraker在數(shù)據(jù)庫(kù)業(yè)界有非常大的影響力,著名的Sybase數(shù)據(jù)庫(kù)代碼就出自他的學(xué)生Robert Epstein博士。Sybase于1984年成立,1988年與微軟合作,將Sybase SQL Server代碼提供給微軟。直到今天,微軟SQL Server在業(yè)界依然名列前茅。
20世紀(jì)90年代初,Michael Stonebraker提出了對(duì)象關(guān)系數(shù)據(jù)庫(kù)理論,率先將面向?qū)ο蟮母拍钊谌雮鹘y(tǒng)的關(guān)系數(shù)據(jù)庫(kù)中,為此他成立了一家公司叫Illustra。1995年,Illustra被Informix收購(gòu),Michael Stonebraker由此擔(dān)任Informix CTO,從此開(kāi)創(chuàng)了通用數(shù)據(jù)庫(kù)(Universal Database)的時(shí)代。除了Informix UDB 9.0,IBM的DB2在1995年也進(jìn)行了重大的改寫,并改名為DB2 UDB,同樣在擴(kuò)展性上吸取了Michael Stonebraker的對(duì)象關(guān)系數(shù)據(jù)庫(kù)理論。
PostgreSQL是Michael Stonebraker教授與他的研發(fā)團(tuán)隊(duì)在傳統(tǒng)關(guān)系數(shù)據(jù)庫(kù)時(shí)代的理想化身。他們把他們認(rèn)為的關(guān)系數(shù)據(jù)庫(kù)所應(yīng)有的系統(tǒng)架構(gòu)、訪問(wèn)方法、優(yōu)化策略、功能與理念、通用性和擴(kuò)展能力都在PostgreSQL的代碼中加以實(shí)現(xiàn),整個(gè)產(chǎn)品具有相當(dāng)高的技術(shù)水準(zhǔn)??梢哉f(shuō),PostgreSQL代碼本身,就是一部關(guān)系數(shù)據(jù)庫(kù)的教科書。
PostgreSQL除了是一個(gè)擁有純正技術(shù)血統(tǒng)的平臺(tái),更重要的是,它是目前幾乎唯一的一個(gè)BSD協(xié)議的開(kāi)源產(chǎn)品。當(dāng)年,Michael Stonebraker的團(tuán)隊(duì)將PostgreSQL作為開(kāi)源提供的時(shí)候,就是基于一種技術(shù)分享的理念。它不限制任何人直接采用這些源代碼去做工作,也不限制人們直接采用它去進(jìn)行商業(yè)的活動(dòng)。
正因如此,20多年來(lái)有很多成功的商業(yè)化產(chǎn)品,它們是基于PostgreSQL源代碼發(fā)展起來(lái)的。第一,Netezza,2001年在PostgreSQL基礎(chǔ)上,采用了FPGA輔助數(shù)據(jù)的掃描過(guò)濾,推出一款數(shù)據(jù)倉(cāng)庫(kù)一體機(jī)。2010年被IBM收購(gòu),成為今天IBM數(shù)據(jù)分析的重要平臺(tái)。第二,Greenplum,2003年基于PostgreSQL發(fā)展起來(lái),開(kāi)發(fā)出MPP架構(gòu)的數(shù)據(jù)倉(cāng)庫(kù)平臺(tái),今天成為數(shù)據(jù)倉(cāng)庫(kù)領(lǐng)域中重要的一款產(chǎn)品。第三,ParAccel公司同樣采用PostgreSQL構(gòu)建了MPP架構(gòu),在2013年加入了AWS。如今,它就是AWS數(shù)據(jù)倉(cāng)庫(kù)云服務(wù)的后臺(tái)—RedShift。
從功能與技術(shù)特性上分析
PostgreSQL是一個(gè)功能全面的數(shù)據(jù)庫(kù)產(chǎn)品。在分布式關(guān)系數(shù)據(jù)庫(kù)發(fā)展的歷史中,所有重要的功能,PostgreSQL不可能沒(méi)有,因?yàn)楹芏喙δ芎拖敕ㄔ揪统鲎约又荽髮W(xué)伯克利。PostgreSQL的功能非常全(與Oracle比肩,超過(guò)絕大部分同類產(chǎn)品)。如果參與今天國(guó)內(nèi)的各類數(shù)據(jù)庫(kù)產(chǎn)品招標(biāo),在常規(guī)功能的對(duì)標(biāo)中,PostgreSQL是不會(huì)吃虧的。
PostgreSQL的代碼和設(shè)計(jì),具有典型的加州大學(xué)伯克利風(fēng)格,也就是任何功能都力圖通用化,很少會(huì)固定死某個(gè)功能,而是盡量留給用戶自行定義和擴(kuò)展的機(jī)會(huì)。因此,在PostgreSQL上進(jìn)行擴(kuò)展和創(chuàng)新遠(yuǎn)比其它的平臺(tái)更為便捷與可靠。
國(guó)產(chǎn)數(shù)據(jù)庫(kù)持續(xù)發(fā)展、換道超車
國(guó)產(chǎn)數(shù)據(jù)庫(kù)的發(fā)展必然經(jīng)歷引進(jìn)、吸收、掌握、創(chuàng)新的過(guò)程。我們目前正處于吸收和掌握階段。但是,我們看到創(chuàng)新的機(jī)會(huì)就在不遠(yuǎn)的將來(lái)。
今天的數(shù)據(jù)庫(kù)軟件要面對(duì)的系統(tǒng)環(huán)境與前些年相比已經(jīng)有了很大的變化。今天,系統(tǒng)的主流是x86架構(gòu)的PC服務(wù)器+Linux操作系統(tǒng)+虛擬化+云服務(wù)。在系統(tǒng)架構(gòu)層,基本實(shí)現(xiàn)了國(guó)產(chǎn)化。數(shù)據(jù)庫(kù)軟件要面對(duì)的系統(tǒng)是多路、多核CPU+大內(nèi)存,存儲(chǔ)是NVRAM+閃存+軟件定義存儲(chǔ),通信環(huán)境是Infiniband與IPoIB+RDMA。
這樣,在多服務(wù)器的群集系統(tǒng)設(shè)計(jì),數(shù)據(jù)庫(kù)基礎(chǔ)訪問(wèn)方法等方面會(huì)有新的實(shí)現(xiàn)思路。在這里,NVRAM的發(fā)展將更加引人注目。這是一種介于內(nèi)存與閃存之間的新型半導(dǎo)體存儲(chǔ)介質(zhì),能夠在斷電時(shí)保持存儲(chǔ)的信息,但訪問(wèn)速度又高于閃存一個(gè)數(shù)量級(jí)。在NVRAM價(jià)格普及的那一天,將對(duì)傳統(tǒng)的數(shù)據(jù)庫(kù)軟件產(chǎn)生巨大的影響。
數(shù)據(jù)庫(kù)發(fā)展到今天,數(shù)據(jù)庫(kù)軟件中大量的代碼和運(yùn)行時(shí)間是在與磁盤I/O作斗爭(zhēng):大量的數(shù)據(jù)預(yù)讀到內(nèi)存作為緩沖,查詢優(yōu)化器拼命找尋能夠使用索引或者減少磁盤訪問(wèn)的策略。閃存和SSD的推出,大幅度提升了隨機(jī)I/O的速度,但還沒(méi)能動(dòng)搖數(shù)據(jù)庫(kù)軟件的整體架構(gòu)。
但是,一旦NVRAM普及,很多事情就有可能改變。大量的數(shù)據(jù)掃描,甚至可以直接在基礎(chǔ)數(shù)據(jù)存儲(chǔ)上進(jìn)行,而不必另行緩沖。這樣的改變,即便是Oracle,都需要重新改寫代碼、調(diào)整結(jié)構(gòu)。這對(duì)于大家都是一個(gè)改變。這就是我們所說(shuō)的“換道超車”的機(jī)會(huì)。
這種機(jī)會(huì),很可能在未來(lái)的一兩年就發(fā)生。作為國(guó)產(chǎn)數(shù)據(jù)庫(kù),我們做好準(zhǔn)備了嗎?要做這樣的準(zhǔn)備,就需要在今天充分掌握基礎(chǔ)代碼。對(duì)于各個(gè)技術(shù)創(chuàng)新點(diǎn),進(jìn)行各種探索與試驗(yàn)。
同時(shí),對(duì)開(kāi)源社區(qū)技術(shù)發(fā)展的洞察與把握是非常重要的,它能夠保證我們的數(shù)據(jù)庫(kù)國(guó)產(chǎn)化道路不會(huì)偏離業(yè)界技術(shù)發(fā)展的主流,避免出現(xiàn)技術(shù)二次落后的風(fēng)險(xiǎn)。我們國(guó)內(nèi)有一個(gè)大型的企業(yè),前幾年也決定采用PostgreSQL。他們內(nèi)部的技術(shù)實(shí)力很強(qiáng),也打算在源代碼層面上做一些創(chuàng)新的工作。他們發(fā)現(xiàn)PostgreSQL在查詢并行處理上存在不足,便投入了大量人力、物力自研一套并行查詢處理的模塊。當(dāng)這個(gè)模塊還沒(méi)做好的時(shí)候,他們發(fā)現(xiàn)社區(qū)中的新版本已經(jīng)擁有了更為強(qiáng)大的并行處理能力,而他們自己的設(shè)計(jì)相比之下就顯得粗糙。這樣,之前的投入都白費(fèi)了。因此與國(guó)際社區(qū)的密切聯(lián)絡(luò),是避免此類事情的最好辦法。
國(guó)產(chǎn)數(shù)據(jù)庫(kù)的競(jìng)爭(zhēng)對(duì)手
今天,國(guó)內(nèi)的數(shù)據(jù)庫(kù)市場(chǎng),企業(yè)級(jí)商業(yè)軟件市場(chǎng)Oracle一家獨(dú)大,整體態(tài)勢(shì)如圖2所示。國(guó)產(chǎn)數(shù)據(jù)庫(kù)的客戶來(lái)源有三個(gè)方面。
第一,現(xiàn)有的Oracle用戶。這些用戶中,如果有希望能夠擺脫對(duì)于Oracle獨(dú)家依賴的(原因可能來(lái)自多個(gè)方面,從成本、服務(wù)、版權(quán)、安全等),國(guó)產(chǎn)數(shù)據(jù)庫(kù)就是一個(gè)很好的選擇,這也是國(guó)產(chǎn)數(shù)據(jù)庫(kù)最主要的任務(wù)和使命。
第二,目前未購(gòu)買正版Oracle的用戶。因?yàn)槌杀镜年P(guān)系,國(guó)產(chǎn)數(shù)據(jù)庫(kù)同樣是他們最好的選擇之一,我們將給出合理的、有競(jìng)爭(zhēng)力的價(jià)格,讓客戶用上高效、可靠的數(shù)據(jù)庫(kù)產(chǎn)品。
第三,使用開(kāi)源數(shù)據(jù)庫(kù)的用戶。對(duì)于這些客戶來(lái)說(shuō),國(guó)產(chǎn)數(shù)據(jù)庫(kù)可以作為開(kāi)源軟件的一個(gè)升級(jí),我們將在產(chǎn)品的企業(yè)級(jí)應(yīng)用功能上、高可用性、性能、安全性、可管理性等方面提供商業(yè)軟件才有的功能與服務(wù)。
因此,我們的競(jìng)爭(zhēng)對(duì)手不是MySQL,同樣也不是現(xiàn)有的各類國(guó)產(chǎn)數(shù)據(jù)庫(kù)。如果說(shuō)我們要有一個(gè)競(jìng)爭(zhēng)對(duì)手,這個(gè)競(jìng)爭(zhēng)對(duì)手就是Oracle。其實(shí),對(duì)于Oracle,我們不是簡(jiǎn)單的競(jìng)爭(zhēng)。我們的目的與使命是提供給廣大中國(guó)數(shù)據(jù)庫(kù)用戶一個(gè)新的出路,一個(gè)可以擺脫Oracle的出路,一個(gè)既能擺脫Oracle,同時(shí)又不需要在技術(shù)先進(jìn)性、產(chǎn)品可靠性上做出讓步的出路,甚至是一個(gè)能夠在各方面獲得超越的出路。