遙遠的數據世界里,在商業(yè)智能領域內有兩個王國,一個王國叫super,它秉承了開源的教義,天下本源,天下一體,眾生平等,眾生自由,所以它吸收別人的發(fā)明創(chuàng)造有所得時,同時把自己的發(fā)明創(chuàng)造貢獻出來,而另一個王國smart則相信天下熙熙,皆為利來,天下往往,皆為利往,它認為發(fā)明創(chuàng)造的東西本意是為追求利潤空間,技術專利從來不對外開放,為了達到利益最大化,甚至不惜代價利用各種資源。
由于兩者理念和意識形態(tài)不同,所以它們一直在暗暗較勁,就像冷戰(zhàn)時期美國蘇聯(lián)軍備競賽一樣,兩者多方面展開追逐對比,眾所周知,商業(yè)智能是一個橫跨多個領域,混合各種技術的學科,至少包含數據存儲、數據處理、數據分析三部分。如圖所示,數據處理居于中間位置,負責承上啟下的作用,引擎能力做為最重要的一環(huán),它等當于王國的軍事力量強弱,商業(yè)智能至今,橫跨IT多個時代,兩個王國一直在努力尋找最合適的處理引擎。

小數據時代
90年代,OLAP剛剛興起,全球開始普及化信息化建設。市場上選擇的數據產品不多,smart選擇了Oracle作為數據處理中心,而super選擇了mysql,表面是Oracle是壓倒性MySQL,其實兩者差不多。Oracle擅長的是OLTP,直到今天它依然擅長的是OLTP,單機Oracle在OLAP領域是雞肋,而super選擇了Oracle,是因為客戶群體本身就有Oracle,或者計劃使用Oracle。 所以smart推出捆綁Oracle的解決方案,更贏得客戶人心。而super王國選擇MySQL,MySQL是全球最流行的數據庫,super好玩技術,通過MySQL定制的列式引擎或集群實踐 ,也能支持運營管理系統(tǒng)和各種報表分析。
smart的客戶埋怨數據處理不及時,花錢的東西甚至比MySQL慢,Oracle推出Oracle RAC或者 Oracle Exadata解決方案,但是成本昂貴,不是普通的用戶能夠承受。smart王國尋找更好的武器。
大數據時代
來到大數據年代,數據產品相比過去豐富了很多,開源精神越來越得到工程師的認可。super因時導勢采用了hadoop解決方案,hadoop有三大功能,分布式存儲實現(xiàn)了海量存儲,分布式計算實現(xiàn)了對海量存儲的計算能力,最后YARN實現(xiàn)集群的資源管理?;趆adoop為中心,周邊生態(tài)繼續(xù)添加實時計算、批處理、SQL框架等等,使它的功能更加豐富,對于BI來說至今hadoop未失為一套良好全面的解決方案。但是hadoop同時存有生態(tài)臃腫,對初入門的人學習成本過高、管理混亂等缺點,hadoop洐生的lamda架構和kappa架構能夠解決各種分析問題,但是對商業(yè)智能的工程師、開發(fā)者、業(yè)務員提出更高的要求。
相對于super王國工程化的解決方案,smart王國選擇了產品級的解決方案,引入greeplum代替數倉建設,greeplum支持橫向擴展,通過增加節(jié)點提高計算能力。greeplum的底層用的是postgresSQL,這個意味著兼容postgresSQL生態(tài),并且可以把原有的postgresSQL用戶集成進去,最重要的是greeplum也支持開源。商業(yè)版greeplum和開源版greeplum提供一樣的能力,但是商業(yè)版greeplum提供更多的技術服務。
greeplum既支持開源,又支持商業(yè),而且使用簡單,smart王國整合greeplum賣給那些急需數據分析又買不了exadata的中小企業(yè),對于那些沒有技術能力實現(xiàn)數倉的客戶,greeplum對其言也是一個不錯的選擇。
處理引擎的極限
大數據時代,數據太多,訪問太多,無論哪一種處理引擎都會有力竭時,就拿MPP處理引擎Greeplum來說,你必須對全量的數據分析,而你只從數海只取一瓢飲,為了實時性,你必須增長節(jié)點提高性能。當數據越來越大,每個節(jié)點從硬盤讀取數據互相通信反而增加了集群的消耗,再增加節(jié)點,性能不但沒有增加,相反還下降。針對高并發(fā),數據量低的業(yè)務super王國采用了presto做為處理引擎,presto是一個分布式內存集群,優(yōu)先把數據鎖定在內存,響應并發(fā)請求。預處理技術kylin提出另外一種解決方案,把全量數據根據需求特征生成立方體,再從立方體讀取數據,這是一個多種數據處理技術協(xié)同的解決方案。
super王國和smart都支持兩種處理技術,但是兩種技術缺點也很明顯,如果全量數據超出集群內存的閥值,那么presto也沒有辦法。而kylin的預處理第一步必須耗費大量的力氣,而且預定義維度后無法隨心所欲自定義查找數據。
合適的處理引擎
super王國終于找到了一個高效、可靠、實用的武器,它就是clickhouse,clickhouse按列存儲,通過高壓縮算法對數據進行,并且實現(xiàn)向量化,讀取的速度非???,批量寫的速度也非??臁5敲乐胁蛔愕氖侨绱藘?yōu)越的性能,clickhouse只體現(xiàn)在大寬表,對于日常經常使用的多表關聯(lián)業(yè)務場景,clickhouse有心無力。
smart王國同樣集成了對clickhouse的支持,但是smart王國相信還有更好的處理引擎,這次它找到了vertica。
vertica是什么?它是一個基于列式存儲、實現(xiàn)MPP、去中心化、分布式、可擴展、高可用的數據庫。clickhouse揚名立萬的成功之作就是基于大寬表某些業(yè)務場景比vertica快,但是其它業(yè)務場景測試不及vertica,甚至滿足不了測試條件。
美國的數據分析市場是我們的3倍,數據集成分析領域的領頭軍Denodo提出數據虛擬化的思想,通過統(tǒng)一界面訪問唯一的接口,背后卻是不同的數據源。通過智能調度,請求發(fā)送到數據源,通過數據源原生的引擎讀取數據,傳送到數據虛擬存儲區(qū),最后再送回給用戶。下次類似的請求,用戶直接從數據虛擬存儲區(qū)讀取數據。
用生活語言介紹Denodo,Denodo是一個地產代理商 ,它代理Greeplum、Hadoop、Oracle、MySQL等數據源,為了計算貼近數據,Denodo會利用數據源的原生執(zhí)行引擎,當數據源讀出來后,它存放到數據虛擬存儲區(qū),數據虛擬存儲區(qū)就是Denodo私人經營的樓盤。
數據虛擬存儲區(qū)的位置非常重要,它每天要整合不同的數據源,整合后再對它們有序按規(guī)律整齊擺放。Denodo支持多種方式滿足數據虛擬存儲區(qū)建設,默認使用緩存或內存的方式,如果你購買了Denodo的高級商業(yè)版,那么Denodo提供你vertica數據庫系統(tǒng)的管理運營數據。
即使Denodo這樣的公司,也需要通過vertica提供高段位服務,那么vertica是怎么做到呢?
同樣是MPP引擎,vertica的關鍵核心技術是沒有采用傳統(tǒng)關系數據庫的B樹索引結構,而是冗余存儲一張表的多個物理視圖,每一個物理視圖等于是映射,vertica稱之為projection。
vertica維護不同排序有重疊的映射,盡量使得每個查詢只來自于一個映射,為提高查詢性能,表查詢需要的列至少在一個映射中。

greeplum做MPP,impala也做MPP,但是vertica的MPP是犧性了空間換取時間,在空間上vertica構建了大量的索引,加上獨有的列式存儲和壓縮技術,同類產品中只有vertica做到鶴立雞群,出類拔萃。
讀寫的存儲機制上,Vertica數據庫將所有的數據庫更新緩存在一個可查詢的主內存緩存里面。這塊緩存被稱為寫優(yōu)化存儲(write-optimized store,WMS)。寫優(yōu)化存儲中的數據是按照跟新順序以未壓縮的集合,未排序的數據列陣列的形式存儲的。這些數據會被放入到數據投影中。數據結點上的一個異步后臺進程,通常稱為Tuple mover,它會將近期的更新遷移到永久的硬盤存儲區(qū)。這塊存儲區(qū)被稱為讀優(yōu)化存儲(Read-optimized Store,ROS)。讀優(yōu)化存儲區(qū)中的數據是經過排序,壓縮,然后被裝進變長的硬盤分區(qū)中的。這樣優(yōu)化措施保證了數據加載的性能。后來,TiDB的架構設計也借鑒了Vertica的讀寫機制。
目前Vertica推出商業(yè)版和社區(qū)版,但社區(qū)版僅限于1TB數據和3個數據庫節(jié)點,所以喜歡白嫖的同學也可以體驗,見 vertica
vertica knowledge
Vertica介紹
Vertica 創(chuàng)建于2005年,Vertica 成立于2005年,總部位于美國麻薩諸塞州的Billerica,在亞太和歐洲都設有Office。2011年3月被HP公司收購。它的合作創(chuàng)始人是數據庫之父Michael Stonebraker,他曾開發(fā)了Ingres 和 Postgres數據庫,是公認的數據庫權威大師。Vertica是Stonebraker 基于MIT開發(fā)的C-Store 架構的商業(yè)實現(xiàn),致力于解決當前數據分析平臺日益增長的“大數據”和實時分析要求所帶來的挑戰(zhàn),可以以傳統(tǒng)解決方案30%的成本,實現(xiàn)50倍-1000倍的性能提高。
后記
一個項目系統(tǒng)要做好,質量高,取決于三個元素,人、方法、工具,所以項目經理、方法論、技術和工具非常重要。我們都知道現(xiàn)在開源的軟件覆蓋領域鋪天蓋地,到處都是,第一次接觸Vertica是2015年,那時和領導報告 這個東西測試還不錯,我忘了它的上限是100GB還是1000GB,領導一聽是商業(yè),馬上要我們研究HADOOP,免費的東西最香。Vertica是一個好工具,但是企業(yè)卻要你用免費的開源技術把項目做好。那時候,我感覺開源和商業(yè)是兩個對立,smart王國原型來自于smartBI,super王國原型來于superset,三者同屬BI,但是感覺區(qū)別不大,最大的區(qū)別是你使用哪一個數據產品做處理引擎,這決定了你整套解決方案的靈魂和核心。本人在多年的工作經歷打磨比較,當時體驗Vertica后,覺得它技術工程方面確實有過人之處,而且它在國外積淀了多年。近年,數據庫領域出了一個snowflak,也是擅長分析的大行家,snowflake的技術內幕流出不多,但是從技術大勢上,個人認為snowflake或多或少借鑒了Vertica的工程思想。大空間換短時間,犧牲空間的收益最豐富,期待vertica在數據分析其它領域再起建樹。




