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