數(shù)據(jù)庫列存儲:設(shè)計最佳壓縮算法的捷徑
數(shù)據(jù)庫存儲的方式能決定數(shù)據(jù)庫運行的效率問題,51CTO數(shù)據(jù)庫頻道向您推薦《數(shù)據(jù)庫性能優(yōu)化與調(diào)試》專題。
其實列存儲并不是什么新概念,早在1985年SIGMOD會議上就有文章” A decomposition storage model”對DSM(decomposition storage model)做了比較詳細的介紹,而Sybase更在2004年左右就推出了列存儲的Sybase IQ數(shù)據(jù)庫系統(tǒng)(見200年VLDB文章” Sybase iq multiplex - designed for analytics”),主要用于在線分析、數(shù)據(jù)挖掘等查詢密集型應(yīng)用。
列存儲,縮寫為DSM,相對于NSM(N-ary storage model),其主要區(qū)別在于,DSM將所有記錄中相同字段的數(shù)據(jù)聚合存儲,而NSM將每條記錄的所有字段的數(shù)據(jù)聚合存儲,如下圖所示:
列存儲有什么優(yōu)點?
就我目前比較膚淺的理解,列存儲的主要優(yōu)點有兩個:
1) 每個字段的數(shù)據(jù)聚集存儲,在查詢只需要少數(shù)幾個字段的時候,能大大減少讀取的數(shù)據(jù)量,據(jù)C-Store, MonetDB的作者調(diào)查和分析,查詢密集型應(yīng)用的特點之一就是查詢一般只關(guān)心少數(shù)幾個字段,而相對應(yīng)的,NSM中每次必須讀取整條記錄;
2) 既然是一個字段的數(shù)據(jù)聚集存儲,那就更容易為這種聚集存儲設(shè)計更好的壓縮/解壓算法。
列存儲適合用在什么場合?
OLAP,數(shù)據(jù)倉庫,數(shù)據(jù)挖掘等查詢密集型應(yīng)用。當然,列存儲數(shù)據(jù)庫并不是說完全不能進行更新操作,其實它們的更新操作性能并不是很差,一般也夠用,但是一方面不如自己的查詢性能,另外一方面也不如Oracle這種專門搞OLTP的數(shù)據(jù)庫,所以一般就不提這個。
列存儲不適合用在什么場合?
相對來說,不適合用在OLTP,或者更新操作,尤其是插入、刪除操作頻繁的場合。
為啥上世紀80年代就出現(xiàn)的概念現(xiàn)在又重新炒起來了呢?
2005年VLDB有篇文章(“One Size Fits All - An Idea Whose Time Has Come and Gone”),就是那個老牛M. Stonebraker寫的,明確指出,時代變了,指望一個數(shù)據(jù)庫產(chǎn)品就統(tǒng)一天下的日子已經(jīng)一去不復(fù)還了。于是,這個老牛在2005年左右做了C-Store,一個列存儲的數(shù)據(jù)庫原型系統(tǒng),在VLDB, SIGMOD等***國際會議上灌了幾桶水后,拉了一伙人出去開了個公司叫Vertica,將其商業(yè)化,專注于數(shù)據(jù)倉庫、在線分析等市場,最近貌似還挺紅火的;順便說一下,為了貫徹上面的思想,這個老牛在同一時期又做了H-Store,一個主內(nèi)存數(shù)據(jù)庫原型系統(tǒng),沒怎么灌水就又招呼了一幫人開了個公司叫VoltDB,將其商業(yè)化,專注于聯(lián)機事務(wù)處理,但是近況貌似不怎么樣,可能是跟Oracle老大大直接沖突了吧。
聯(lián)想到M. Stonebraker在上世紀70年代帶頭開展關(guān)系數(shù)據(jù)庫管理系統(tǒng)的實現(xiàn)工作,做出來了Ingres,其中灌水無數(shù),從這個原型系統(tǒng)基礎(chǔ)上產(chǎn)生了很多商業(yè)數(shù)據(jù)庫軟件,包括 Sybase、Microsoft SQL Server、NonStop SQL、Informix 等,而所謂的***進的開源數(shù)據(jù)庫系統(tǒng)PostgreSQL也是Ingres的一個后繼分支。
原文標題:說說列存儲技術(shù)
鏈接:http://www.cnblogs.com/happyy/archive/2010/04/26/1721481.html
【編輯推薦】