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