最近總有朋友問我數據庫選型的問題,希望我寫幾篇文章闡述下我的觀點。寫這種文章是十分得罪友商的,所以在這方面我一向比較謹慎。不過有些話還是不吐不快,今天就講幾句吧。觀點只是個人的看法,并不一定正確,也沒有任何學術探討的意思。實際上數據庫應用場景的復雜性決定了不同的用戶對自己的數據庫選型都有一套自己的看法,可能對別人來說,不一定合適,不過可能只有自己會知道,這種選擇是合適的。鞋是不是合適,只有腳知道。因此今天我所表達的觀點,如果有些不太對您的胃口,姑且一笑而過。
談到數據庫選型,免不了要說benchnark測試,當年數據庫與小型機市場戰火紛飛的時候,TPC-C打榜十分熱鬧,數據庫廠商要證明自己的數據庫是天下武功第一。數據庫市場和小型機市場塵埃落定之后,廠家很少去搞TPC-C打榜了,反倒是近些年中國和韓國的數據庫廠家偶爾會出現在最新的榜單中。TPC-C基準測試實際上并不僅僅是數據庫的性能測試,而是一個數據庫應用系統的整體性能測試,不僅僅要看TPMC的極端指標,還要看每個TPMC的成本。我想現在國產數據庫選型的時候,每個企業都會針對TPC-C/TPC-H等進行測試。實際上這種測試意義并不大,只要是一個合格的數據庫廠商,那么它出廠時TPC-C就能夠滿足絕大多數應用場景的需求,而那些真正的需要高并發,大負載的場景,benchmark測試是測不出來的。TPC-H也是類似,每個數據庫廠商都會在數據庫研發時針對tpc-c/tpc-h等基準測試場景做好優化工作,因此只要是一個靠譜一點的數據庫產品,這方面都能夠滿足你的業務需求。另外一方面,TPC-C測試是一種十分專業的測試,一般的測試團隊不具備測試與分析測試數據的能力,因此測試獲得的數據也不一定準確,無法進行橫向對比。
數據庫選型中的第二個常見問題是分布式數據庫和集中式數據庫之間的選擇。很多用戶在考慮數據庫選型的時候都會對橫向擴展能力有一些執念,認為選擇數據庫一定要選擇具有橫向擴展能力的數據庫產品。實際上絕大多數企業數據庫應用場景對橫向擴展的要求并沒有那么高,一臺2路服務器往往已經能夠滿足未來5年的業務需求了,更何況我們還有更大配置的4路、8路服務器可選。而五年后,服務器的性能又可以翻番。因此對于大多數系統來說,橫向擴展并不一定是剛需。我和很多金融企業的IT人員交流過,他們選擇分布式數據庫的主要考慮是安全性和可靠性,并不是更大的并發處理能力與動態擴展能力。在他們進行的一些測試中,也發現了交易在分布式數據庫上交易延時并不像分布式數據庫廠商所說的那么優秀。對于絕大多數用戶來說也是如此,對于OLTP系統來說,用戶需要的是分布式數據庫的高可用架構,而并不是其橫向擴展能力以及極致高并發能力,大多數系統一個單機集中式數據庫就能夠很好的支撐了。OLAP領域則是相反的,支持列存引擎的MPP數據庫在低并發,復雜SQL并發執行上面的優勢是十分明顯的。
第三個問題是Oracle兼容性問題,這個問題上有兩派截然不同的觀點。第一派認為和Oracle兼容十分重要,兼容性已經成為他們選擇替代數據庫的最重要的原則。另外一派則認為無所謂,數據遷移是一次性的,只要能夠做好數模轉換,花費一次性的成本就可以解決問題了,沒必要把企業的數據庫應用鎖定在與Oracle兼容這個圈子里,讓自己在數據庫選型方面受到限制。持這種觀點的人大多數都是MySQL的擁躉,因為MySQL與Oracle的兼容性方面確實差距有點大。第一派認為與Oracle的兼容性十分關鍵,這不僅僅涉及到應用遷移的成本,也涉及到今后長期運維時能夠降低一些成本。在這方面我還是傾向于這種觀點的,因為在考慮數據庫選型的企業中,往往都是已經大規模使用Oracle數據庫的,與Oracle保持較高的兼容性,不僅僅可以降低應用遷移的成本,更重要的是可以讓整個企業IT都維持在一個Oracle兼容性生態中,研發隊伍也不需要去適應新的研發習慣,以往的一些積累也可以繼續沿用。這樣就可以大大節約數據庫國產化工作中的整體IT投資。不過兼容性不僅僅要看表面上的兼容性,如果一條SQL不加以修改就能在新數據庫上跑,但是性能下降了幾十倍,不該寫還無法正常使用,那么這種兼容性是偽兼容性,而不是真正的兼容。在企業做數據庫選型的時候,需要對一些常用的復雜SQL進行測試,才能真正區分出兩種看似“很兼容”的數據庫產品中的兼容性的差別。
第四個問題是關于serverless database的,serverless database是企業數據庫應用的問題來趨勢嗎?最近serverless database的概念很熱,這個概念也十分能吸引企業的IT部門的高層決策者。作為IT部門的領導,誰不愿意讓自己的IT中最頭痛的部分變得serverless啊。不過我也要給這些領導潑盆冷水,我覺得在未來的十年里,serverless database是屬于公有云的,而不是屬于企業云或者私有云的。Serverless database平臺的運營需要很高的水平與技術能力,哪怕一些私有云供應商能夠把各種serverless database解決方案賣給企業,私有化部署的數據庫云平臺也很難在企業自身IT的管理下運作的很好。當然有一些技術能力很強的企業能夠很好的運營自己的serverless database云平臺,不過對于大多數傳統企業來說,運營的就是一個黑匣子,一旦暴雷,后果不堪設想。
第五個問題是HTAP能力,關于我們的數據庫是否需要HTAP,這一點毋庸多言了,誰不希望自己的數據庫系統一個頂倆呢?不過今天我要談的觀點是,HTAP是要有代價的,要想實現很好的支持HTAP工作負載,付出的不僅僅是選一個數據庫那么簡單,在基礎硬件方面,肯定要付出更大的投入。在這方面我前幾年也寫過幾篇文章,大家有興趣可以去公眾號中搜索HTAP來查閱。另外要說的一件事就是,目前的國產數據庫產品雖然都號稱是HTAP的,但是在復雜負載的支撐能力上,還都存在較大的不足。真正具有很強HTAP能力,各方面都能讓用戶較為滿意的國產數據庫,可能還要等下一個版本吧。
今天只是就數據庫選型談了一些我的個人觀點,這些觀點并不一定適合于每個用戶,僅僅給大家一些參考而已。針對不同的應用場景,考慮的因素可能會有所不同,因此也不能一概而論。