基于開源代碼開發一個大型集中式通用關系型數據庫很難嗎?
臨近年底,這也是我今年的最后幾篇文章之一了。今年冬天特別冷,穿啥衣服都不覺得暖和。翻了一陣子發現數據庫廠商送的衣服大多比較厚實,適合這個寒冬穿。于是最近經常穿著各種數據庫的衣服上班下班。前些天穿了一件IvorySQL的衣服坐飛機,空姐看了我半天后問我:“這件始祖鳥的衣服好像沒見過別人穿過”。我笑著說:“這是高端品牌,一般人買不著”。上周一個朋友約我小聚,脫掉外套后發現倆人都穿了一件同款的PingCap藍色厚T恤。看樣子不止我一個人發現了國產數據庫的這個好處。
今天聊聊自研數據庫的難點,在看到這個問題的時候肯定有些朋友會問:“為什么我們需要大型數據庫,把自己的數據庫拆小不就解決問題了嗎?”,我也經常會聽到:“為什么非要這樣,為什么不那樣”。每個企業的實際情況不同,其需求是不同的,作為一個用戶你說不需要某個功能是完全沒毛病的,不過作為數據庫廠商,需要為各種各樣的應用場景提供解決方案。
進入正題,對于這個問題大家的觀點可能比較一致,不管采用哪種方式,自研確實很難,因為關系型數據庫發展這么多年,很成功的大型商用集中式通用數據庫就那么幾個,最成功的不外乎Oracle、SQL SERVER、DB2這三巨頭。連曾經風光無限的SYBASE、 INFORMIX在大浪淘沙中都已經變成路人甲了。
這些年國產數據庫替代的需求很旺盛,以中國如此大的數據庫市場,能不能培養出一個像Oracle一樣的數據庫產品呢?我想應該能,不過從零開始從頭研發似乎難度有點大,比如說一個類似Oracle的數據庫,其核心代碼一般來說要超過1000萬行,就按1200萬行計算吧。按照一個人月2000行核心代碼計算(這個代碼量不是全流程代碼量,數據庫核心研發全流程評估代碼量不會超過1000行/人月),那么一人年的代碼量是2.4萬,那么需要500人年。
按照最理想的狀態,我們能招到100個高水平的核心代碼研發工程師,從0開始最樂觀需要5年時間才能拿出一個初級產品,再花上兩三年在實際用戶那里去磨合提升,才能初步成型。按照數據庫核心代碼研發人員100萬的平均年薪(這個是比較低的,國外的數據庫核心代碼研發人員年薪要在30萬美金以上),需要投入的研發經費是5億。在市場不明朗的情況下,每年投入一億,砸5年才能上市。這種買賣除非是航天軍工這種舉國體制下,恐怕很少會有企業能如此投入。如果再算上周邊工具與接口需要投入的數倍研發人員,以及三五百人起步的銷售人員,數百人的營銷市場人員與管理人員,一家成功的數據庫企業每年要投入的資金至少也要幾個小目標。而目前又有幾家企業每年能真正賣出幾個億的數據庫許可證與服務呢?
基于此我一般不太敢相信中國真的存在很多這樣的完全自研的數據庫企業和產品。算一算賬我們大體上也知道數據庫廠商動不動就說我們核心研發幾百人上千人是件多么不靠譜的事情,大部分國產數據庫廠商的年收入都不足1個小目標,如何能長期支撐如此燒錢的核心研發團隊?我所了解的很多數據庫廠商的核心研發人員不過二三十人而已,甚至一些小企業只是一個個位數。
既然現在從零開始干不大現實,那么基于開源代碼是否簡單一些呢?確實這是難度較低的做法,也是目前大多數國產數據庫廠商采用的方案。基于開源代碼可選的是MySQL或者Postgresql,MySQL雖然很強大,長期霸占數據庫流行榜的TOP 2,但是MySQL的核心代碼不足以支撐它成為一個大型的集中式數據庫,其GPL開源協議也不支撐在它的基礎上大幅度修改代碼,并做成開源的商用數據庫。
因此PG變成了唯一的選擇了。可惜的是,PG在整體架構,核心代碼以及一些核心算法上也不具備直接成為Oracle這樣的大型通關系型數據庫的潛質。astore存儲引擎、XID64、FULL PAGE WRITE、DOUBLE BUFFER、不太完善的checkpoint設計、低效率的lwlock代碼、由于缺乏pmon/smon導致的kill -9災難、優化器能力不足、缺乏高并發與增量備份能力、沒有類似ORACLE RAC的高可用方案等因素都阻礙了PG作為一個大型關鍵數據庫的基礎平臺。 要想達成我提的目標,必須對PG的核心代碼做大手術才行。
要對PG動大手術,依然需要大量高水平的數據庫核心開發人員參與,這也不是一般企業能玩得起的。所以說目前國產數據庫雖然有200多家了,不過大多數企業都選擇去搞分布式數據庫,而不去碰大型集中式數據庫這個燙山芋。這是因為數據庫核心研發的難度太大了,分布式數據庫可以把有限的研發放到分布式集群上,從而避免更加花錢的對數據庫核心的深度優化所需要的投入。
花大力氣去研發數據庫核心不僅僅是技術上有難度,甚至有些時候有錢都不一定能干好,因為可能找不到足夠的高水平的研發人員。在沒有占有足夠大的市場的情況下,不敢投入巨資去做研發。產品水平不夠又無法吸引足夠多的用戶。這個先有雞還是先有蛋的問題是目前困擾國產數據庫發展的最大障礙。
雖然說研發一個大型集中式數據庫很難,但是中國自主可控的市場又必須有這么個產品,中國的數據庫市場規模也支撐得了這么一個產品,因此我還是對中國能夠出現這么一個產品持有樂觀態度的。只不過在目前千軍萬馬爭奪這個制高點的情況下,絕大多數企業會在這場長跑中落敗,只有少數企業最后會在競爭中活下來,就像30年前國外商用數據庫市場的那場大戰一樣。