近期數字化轉型在業界提的很火熱,數字經濟規劃作為單獨篇章出現在了最新的十四五規劃中,足以說明國家對數字經濟的重視。那么對于我們數據人來說,這無疑是一個非常好的“風口”,可以讓我們大展身手。
那么對于做數據工作,特別是處理海量數據,有一款趁手的數據計算引擎,無疑是非常重要的。那么對于海量數據處理,今天給大家聊一聊Vertica這款數據庫。
1. Vertica是誰
Vertica是一款真正列存儲的MPP架構的數據庫,他支持PB級別的數據處理。
提到Vertica,我們必須得聊聊他的作者Michael Stonebraker,因對現代數據庫系統底層的概念與實踐所做出的基礎性貢獻而獲得2014年圖靈獎,VMware的創始人Diane Greene(戴安·格林)是他的學生!2004年Stonebraker基于C-Store創辦了Vertica,也就是今天我們要說的這款數據庫。

一款無 Primary MPP數據庫
Vertica數據庫屬于無Primary的MPP架構,所有節點均可訪問使用,當然其也提供了負載均衡,以保障節點的合理使用。
什么意思?
一句話解釋: 就是說Vertica的所有節點都可以作為連接訪問節點,同時也作為計算存儲節點,這樣就不會存在還要去考慮Primary節點的高可用。比如,現在業內的GreenPlum屬于有Primary節點的數據庫。
下圖對比:

Primary/Replica架構

多Primary架構
列式存儲數據庫
Vertica是一款列式存儲數據庫,列式存儲的好處在哪呢?
比如我們查詢一個表table1,table1有100列,寫一個SQL語句查詢出col1,col2,col3,col4四列數據:
select col1,col2,col3,col4 from table1 ;
如果是行式關系型數據庫,比如Oracle,那么他會掃描每一行所有列數據,然后取出col1,col2,col3,col4。那么對于列存儲的Vertica,只需要掃描col1,col2,col3,col4這四列的每一行即可,減少了和剩余96列的數據進行IO操作,能不快嗎?

行式查詢

列式查詢
而且列存儲還有一個好處就是可以根據不同列數據類型不同,采取不同的壓縮方式,減少存儲的同時,提升IO性能,能不快嗎?
2. Vertica能干什么?
從上面我們講的Vertica數據庫的特點可以看出,Vertica非常適合于OLAP場景,特別是對于我們常說的“大寬表”,查詢性能異常強悍!

Vertica 作為數據倉庫
- 所以,可以將Vertica替換為你現在的Hive作為數據倉庫的計算引擎,效率可以提升百倍以上。

- Vertica 還可以作為你的資助分析引擎,替換現有的Spark即席查詢,效率可以提升幾十倍。
3. Vertica與其他OLAP引擎的差異
本文選取了與Vertica同宗的GreenPlum,還有目前市面上比較火的Clickhouse和Kylin作為對比,分析一下Vertica與它們的差異在哪?
Greenplum
簡介
Greenplum也是典型的MPP架構,將數據平均分布到系統的所有節點服務器上,所以節點存儲每張表或表分區的部分行,所有數據加載和查詢都是自動在各個節點服務器上并行運行,并且該架構支持擴展到上萬個節點。但是Greenplum有獨立的Master。

產品特性
- Greenplum數據庫通過將數據分布到多個節點上來實現規模數據的存儲
- 支持行存儲和列存儲格式
- 應用生態豐富,利用Greenplum外部表技術,映射Hadoop集群中的HDFS、HIVE、HBASE 等多種格式數據,使用標準SQL訪問
Clickhouse
簡介
Clickhouse 是一個真正的列式數據庫管理系統(DBMS)。在 ClickHouse 中,數據始終是按列存儲的,包括矢量(向量或列塊)執行的過程。只要有可能,操作都是基于矢量進行分派的,而不是單個的值,這被稱為“矢量化查詢執行”,它有利于降低實際的數據處理開銷。

產品特性
- 支持SQL查詢,但是比起GreenPlum還不完備
- 列式存儲與數據壓縮
- 向量化執行引擎,這是Clickhouse單表查詢快的原因,極力的去“壓榨硬件資源”
- 多樣化的表引擎,我理解的這一點與Vertica的建不同的projection有異曲同工之初
- 多主架構,就是前面介紹Vertica的一樣,每個節點都可以是Primary
Kylin
Apache Kylin?是一個開源的、分布式的分析型數據倉庫,提供Hadoop/Spark 之上的 SQL 查詢接口及多維分析(OLAP)能力以支持超大規模數據,最初由 eBay 開發并貢獻至開源社區。它能在亞秒內查詢巨大的表。
值得一提的是,Kylin是國人主導的Apache頂級項目,爆贊!

產品特性
- 作為一個分析型數據倉庫(也是 OLAP 引擎),Kylin 為 Hadoop 提供標準 SQL 支持大部分查詢功能
- 用戶能夠在 Kylin 里為百億以上數據集定義數據模型并構建多維立方體(MOLAP Cube)
- Kylin 可以在數據產生時進行實時處理,用戶可以在秒級延遲下進行實時數據的多維分析。
Kylin 可以說是與市面上流行的 OLAP 引擎走了一條完全不同的道路,Kylin 在如何快速求得預計算結果,以及優化查詢解析使得更多的查詢能用上預計算結果方面在優化,而像Greenplum,Clickhouse則著重于優化查詢數據的過程環節。
Vertica
同上面三種計算引擎對比,首先它和Clickhouse一樣,屬于多主架構,每個節點都可以是Primary,避免了單節點故障,事實上Vertica只要集群有一半以上節點存活,集群即處于可用狀態。另外,Vertica的底層和Greenplum一樣都是基于postgreSQL,SQL支持功能強大,多表關聯,窗口函數完全不在話下。Vertica的周邊生態已經足夠完善,支持和HDFS數據無縫對接,支持和Spark,kafka,R,BI工具等,其本身也封裝了一些機器學習的函數。
以前做機器學習,一般得用Python,掉一些包,才能實現,比如線性回歸:
import pandas as pd from sklearn
import linear_model
import matplotlib.pyplot as plt # 讀入CSV數據
csv_data = pd.read_csv('E:\pycode\data\md0301.csv').dropna() #過濾空值
print(csv_data.shape)
print(csv_data.all)
# 建立線性回歸模型
regr = linear_model.LinearRegression()
# 擬合
regr.fit(csv_data['m_motor_rotate'].values.reshape(-1, 1), csv_data['vehicle_speed']) # 注意此處.reshape(-1, 1),因為X是一維的!
#得到線性回歸公式的系數y=ax+b
a=regr.coef_ print(len(a))
b=regr.intercept_ print(b)
print(regr.score(csv_data['m_motor_rotate'].values.reshape(-1, 1), csv_data['vehicle_speed'])) # 1.真實的點 plt.scatter(csv_data['m_motor_rotate'], csv_data['vehicle_speed'], color='black’)
# 2.擬合的直線
plt.plot(csv_data['m_motor_rotate'], regr.predict(csv_data['m_motor_rotate'].values.reshape(-1,1)), color='red', linewidth=1) plt.show()
現在使用Vertica,調用函數LINEAR_REG一樣可以實現。
可以說從數據實時接入,到數據處理,到數據分析,算法挖掘以及可視化應用,一站式服務。
4. Vertica應用展望
筆者是從2015年第一次接觸Vertica,當時是Vertica7.X,不得不說,這幾年Vertica發展了大的變化,特別是以前Eon模式之前,Vertica的元數據管理做的不是很理想,元數據經常會很大;Eon以前,特別是集群節點不建議無線擴展。
Vertica目前在國內還是很小眾,在網上搜資料你會發現都不多,不過目前還好,17年以前,那真是只有官方文檔了,筆者也是當時開始寫了一些列Vertica使用相關的博客。對Vertica的發展也提幾點自己的心得。
災備
筆者在17年的時候還碰到過一次很意外的異常,當時聯系了原廠工程師還是無法解決,只能重新建了一個新庫,還好歷史數據在Hive中存的有。
后來考慮了備份機制,備份了元數據和表的物理文件,這是一種通用的備份機制,針對任何數據庫都適合。建議Vertica可以出一些災備的方案,能夠將備份文件移到另外節點數不一致的集群中也能快速的恢復。
HTAP
目前流批一體化是數據處理的大趨勢,各種技術方案都有,對于數據庫來說,能夠支持HTAP也許是解決這一問題的關鍵,希望可以考慮這方面的規劃,畢竟市場上有大把的需求,老板都希望用更少的人員(資源)去管理更多的業務(賺錢)。
生態
其實“酒香也怕巷子深”,Vertica是個好東西,但是社區這塊做的不太好,很少見到相關技術活動。一方面由于Vertica是不開源的,但是Oracle也是不開源的,現在資料隨手一搜就能找到。只有生態建立起來了,用戶才會考慮去用,畢竟每個架構師都不希望自己使用的技術棧完全處于“盲區”。
筆者之前寫過一些Vertica的筆記和視頻直播,這里也分享給大家。
Vertica的那些事-筆記下載
Vertica實戰系列-基礎篇-視頻直播
Vertica實戰系列-進階篇-視頻直播




