基於列的資料庫vertica
2009-12-07 17:43
最近在研究基於列儲存的資料庫,相對於傳統的基於行的資料庫,它更適合在資料倉儲儲存方面發揮特長。看了一些英文文件之後,將技術相關的語段記錄下來,其中也參雜著我的理解,因此比較凌亂。不過還是希望盡早拿出來與大家分享 :)
1. 基於列儲存的資料庫的優點:
a) 對於聚集操作,比如求sum,明顯基於列儲存的要比基於行儲存的快;
b) 對於update操作,不須接觸其他列值;
c) 基於行儲存的資料庫在查詢每行記錄的多個列值更高效的條件是,row-size比較小,這樣一次磁碟讀取就可以獲取整行;
d) 基於行儲存的資料庫在insert一行的時候相對更高效,畢竟可一次寫入乙個連續空間,即一次single disk seek;
從實際情況上來看,基於行儲存的資料庫更適合oltp(聯機事務處理系統),基於列儲存的資料庫更適合olap(聯機分析處理系統),比如資料倉儲。除此之外,同一列必定是同一型別大小,基於列儲存的資料庫更容易使用高效的儲存方式,與之相對,基於行儲存的資料庫則只能採用隨機方式處理列值了。
2. vertica資料庫的設計特點是:
a) 它是基於列的儲存結構,提高了連續的record處理的效能,但是在一般事務中增加了對單獨record進行update和delete的開銷;
b) 「單獨」更新(out-of-place updates)和混合儲存結構,提高了查詢、插入的效能,但增加了update和delete的開銷;
c) 壓縮,減少儲存開銷和io頻寬開銷;
d) 完全無共享架構,降低對共享資源的系統競爭;
vertica資料庫執行在基於linux的網格伺服器上,目前應用於amazon elastic compute cloud的資料庫管理系統。
the vertica analytic database
1. 重申三大特點:壓縮、基於列、表分解;
2. 混合資料儲存模式,當insert時候,按照寫優先分配原則,實現insert與query的高併發操作;
3. 自動化資料庫結構設計工具,多節點集群系統,所有的資料都會儲存在不止乙個節點上,即所謂的k-safety,這樣可防止單點故障造成的損失;
4. 高效能,支援acid,輕量級事務和併發控制更加適合load和query操作。vertica的故障恢復模型是基於多節點拷貝,而不是傳統的基於日誌;
5. 靈活部署;
6. 監視和管理工具和api;
對於乙個node上的vertica資料庫,資料儲存分為兩個部分,乙個是讀優儲存(read-optimized store,ros),另乙個是寫優儲存(write-optimized store,wos),每次更新和插入的資料臨時放在wos部分,sql查詢會訪問ros部分,並且ros存放已經經過壓縮和排序的資料,這樣就做到了讀寫併發兩不誤,通過tuple mover程序定期將wos的資料壓縮進序後拷貝到ros區域。
對於多個node,乙個表的schema首先會按列拆分為多個對映,將每個列排序儲存在不同磁碟上。
vertica資料庫設計本身就適合基於列的查詢,雖然一些基於行的資料庫經過預處理和內部關係檢視等操作也可以優化常見查詢的速度,但仍和vertica能應付更多不同查詢的高效能無法相比,尤其是vertica的的列主動壓縮(aggressive compression)。主動壓縮,簡單的說就是將乙個列不同的值的一維儲存轉換為二維元組(tuple),格式為《個數,列值》,這樣的話,即使是date型別的百萬條資料,一年最多也只有365個數對,好處不言而喻,節省空間、提高查詢速度、方便聚集函式操作。另外,對應浮點數和時間這樣的連續數值,也採用了某些處理方式實現了一些排序和壓縮(具體沒看懂)。
在讀優儲存(ros)區域,除了排序壓縮外,還有些別的優化處理。比如資料是緻密填充(dense packed)的,即占用的磁碟分頁內沒有空閒,不用考慮後來insert的資料放哪的問題,因為那是tuple mover做的事情。另乙個優化是,vertica會提前取出一大塊資料用以減少多次磁碟掃瞄。
vertica對於各節點上冗餘儲存的列資料可採用不同排序順序儲存,這樣不但利用多拷貝實現了故障恢復,還利用多種排序順序提高了查詢速度,對於每乙個給定的sql操作,vertica都會選擇乙個最合適的排序順序。
db designer根據資料樣本和查詢樣本將邏輯schema對映為多個物理schema,說白了就是將乙個行對映拆分為多個行對映,同時保證每個查詢的from部分都只來自乙個對映。
k-safety,簡單的說就是,對於資料庫中的每一列,都會在k+1個節點上儲存,這樣即使k個節點壞掉了也沒事。
vertica開發,支援標準sql語句,支援jdbc和odbc,支援perl和python程式設計,支援postgresql等資料庫的應用**向其平滑移植。但是vertica對於update這樣的操作實在是笨拙。
vertica call detail analysis data sheet
vertica系統要求
一台或多台無共享計算機組成乙個集群,如果是生產環境至少三颱,每個計算機的要求如下:
l dual-core cpu (at least 2.4ghz), 800mhz (or more) front-side bus
l at least 2gb of ram per cpu core
l 500gb sata [or any 150gb – 500gb drive, 7.2k rpm, sata or scsi]
l red hat enterprise linux 4, suse 10 or fedora core 6
基於列儲存的資料庫vertica
出處 最近在研究基於列儲存的資料庫,相對於傳統的基於行的資料庫,它更適合在資料倉儲儲存方面發揮特長。看了一些英文文件之後,將技術 1.基於列儲存的資料庫的優點 a 對於聚集操作,比如求sum,明顯基於列儲存的要比基於行儲存的快 b 對於update操作,不須接觸其他列值 c 基於行儲存的資料庫在查詢...
Vertica資料庫操作
刪除主鍵 vertica資料庫的主鍵值並非唯一的 select analyze constraints fb s.c log 找到key名,再 alter table fb s.c log drop constraint c primary select analyze constraints fb...
oracle資料庫對應vertica資料型別
需求 在vertica資料庫上建表,表結構 於原oracle資料庫,故需要轉換成vertica資料庫庫表結構。實際轉換操作需要評估源庫用到的所有資料型別和資料本身特性。下面是總結的某場景下的替換規則,僅供參考。1.時間型別 date timestamp 2.數字型別 number numeric n...