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