閱讀892 返回首頁    go 阿裏雲 go 技術社區[雲棲]


Vertica: 基於DBMS架構的列存儲數據倉庫

介紹

Vertica(屬於HP公司),是一個基於DBMS架構的數據庫係統,適合讀密集的分析型數據庫應用,比如數據倉庫,白皮書中全名稱為VerticaAnalytic Database。從命名中也可以看到,Vertica代表它數據存儲是列式的,Analytic代表適合分析型需求,DB代表本身是數據庫,支持SQL。


優勢

和傳統關係型數據庫係統以及其他列式數據(倉)庫相比,Vertica存在下麵三點最關鍵的優勢。

 

列存儲

Vertica對磁盤上的數據采用列式存儲,顯而易見,列存儲可以在數據讀取的時候避免不需要的列,減少IO帶寬,而且列存儲配合壓縮算法可以節省磁盤存儲量。Vertica的列存儲在壓縮方麵還有其優化之處,見下文。

 

AggressiveCompression

這個姑且理解為侵略性壓縮好了。其實在壓縮方麵,Vertica針對不同的數據類型,采用了多種不同的壓縮方式,讓原本磁盤上大量IO開銷與CPU的壓縮工作達到比較好的tradeoff。壓縮率大致是高達90%。此外,Vertica 的寫數據和讀數據是分開進行的,讀的數據以壓縮的狀態存在磁盤上,寫的數據先緩存在內存裏,異步合並到磁盤上,這個下文還會提到。


多備份

由於壓縮比率很高(90%),所以能夠騰出足夠的磁盤空間來做備份。這點很關鍵。首先,備份讓Vertica具備容錯性,且多機器上的備份還能提升ad-hoc查詢性能。其次,能夠通過備份來容錯這點,區別了Vertica與傳統數據庫通過logging和二階段提交這種方式來做容錯的做法。而能做多備份的原因是由於其列存儲壓縮做的優化比較好,這點又是比其他列式存儲的數據倉庫有優勢的地方。

table被拆分後存儲的每個單元叫projection,每個projection按某個或某些attribute進行排序,而且不同的副本排序方式還會不同,所以這對查詢又是有幫助的,這點下文也會提到。

 

當然,Vertica的壓縮,麵向列的存儲以及table拆解後的存儲對用戶來說是透明的。Vertica對前端用戶提供的是標準的SQL接口,而且兼容現有的ETL,reporting,BI工具,所以這點使得其他業務係統可以更方便遷移到Vertica上。


Vertica對硬件也沒有特殊要求,可以跑在廉價的集群上,或是任何現成的linux機器上,使用本地磁盤做存儲。

 

除了上麵說的幾點優勢之外,Vertica還在性能,可擴展性,可用性以及使用便利性方麵有以下優勢。

 

shared-nothing,grid-based 數據庫架構

Vertica可以高效的在普通的機器上擴容。事實上,在數據備份這塊,Vertica提供k-safety的方式,k+1是備份數,可調,且每一份是完全的數據,後麵會提到。


混合數據存儲

這裏的混合指的是內存和磁盤。一方麵,新插入的數據是寫入針對寫做了優化的內存結構裏,所以支持持續的,高性能的並發寫入操作;另一方麵,不影響實時的查詢性能,因為讀的數據來自於磁盤。事實上,寫數據在內存裏是亂序的,所以寫吞吐會比較高,而讀數據在磁盤上是有序的。

 

物理數據庫設計工具

這說的是在使用Vertica的時候,提供了比較方便的工具,能幫助用戶設計物理表,下文會提到。而且提供k-safety的機製保證容錯。

 

高性能兼容ACID數據庫

有輕量級的事務和並發控製scheme,針對查詢和數據載入。並且具備基於k-safety的失敗恢複模型,而不是傳統的基於日誌的。

 

方便的部署、監控、管理


架構


上圖為Vertica單個節點的架構,我們看到查詢和更新是走的所謂的混合存儲,即write-optimizedstore(以下簡稱WOS)和read-optimized store(以下簡稱ROS)。WOS在內存裏,對應數據寫入,裏麵的數據不排序也不壓縮。ROS是被排序和壓縮過了的數據,存在磁盤上,提供了支持高效查詢的格式。Tuple Mover負責把WOS的數據遷移到ROS上,以批的形式把WOS內存裏的數據排序和壓縮後移到ROS,即磁盤上,也是保證高效的。在WOS和ROS內部,數據都是麵向列存的。

 

下麵這張圖展示了table存入到Vertica後,是怎麼轉變到物理存儲的column形態的,即被切成了Projections。

最後更新:2017-04-03 05:39:49

  上一篇:go 使用JAXB實現JAVA對象和XML字符串的互相轉換實例
  下一篇:go STL-list