列式存儲數據庫(Column-Oriented DBMS)是一套以數據列而非數據行的方式存儲數據表的數據
庫管理系統。相比之下,大多數關係型數據庫都把數據存儲於行中,故得名。列式存儲數據庫在
數據倉庫系統,CRM系統,以及其它即席查詢(AD HOC Query)系統這樣對同類數據有大量聚合
運算的系統中適用。
關係型數據庫系統以二維表的形式提供數據,二維即行列。如下示例:
這張簡單的表中包含了一個員工標識符(EmpId),姓名列(Lastname, Firstname)和薪水
(Salary)。其實這樣的二維表只在理論上(邏輯上)存在,實際情況中,硬件存儲設備要求數
據以序列化的方式存在,亦即:
001:10,Smith,Joe,40000;002:12,Jones,Mary,50000;003:11,Johnson,Cathy,44000;004:22,Jon
es,Bob,55000;
001,002...是rowid。當數據插入表時會被賦予一個rowid, 用於系統內部引用數據。(這裏以
三位整數舉例,實際上系統會適用64位數或128位數作爲rowid)
我們經常需要獲取系統中某個對象信息的操作,比如獲取一個通訊錄系統中某個聯繫人的聯繫方
式,或者獲取一個網購系統中某產品的信息。行式數據庫被設計爲可用最少的操作返回整行數據
,與該種操作正相匹配。
但行式數據庫處理對整個數據集的操作時效率不高。比如爲獲取薪水在40000到50000區間的員工
記錄,行式數據庫必須遍歷整個數據集。當然,上例中所有數據都符合條件,遍歷得到的數據都
是滿足條件的;但只要數據量稍微一多,甚至只要幾百條,就會有很多無效遍歷,造成很多磁盤
操作。
爲提高此類操作的效率,大多數數據庫系統採用了索引。索引將某一列(或多列)的所有值與相
應的一個指向rowid的指針存儲在一起。於是Salary列的索引就是這樣:
001:40000;002:50000;003:44000;004:55000;
因爲索引只存儲一列值,而非所有列的值,索引的大小會明顯小於原表。而且索引一般都會事先
排序,於是在索引這個較小的數據集中遍歷數據,減少了磁盤的操作。索引會對效率起到很大幫
助,但維護索引對系統來說又是一項負擔,尤其是在新數據寫入數據庫時,索引也必須更新。
有些行式數據庫把所有數據存在內存中。這樣的系統沒有磁盤操作,對數據集怎麼訪問的效率都
差不多,於是可以省略索引。這樣的數據庫系統很精簡,但容量受到內存限制。
行式數據庫原理
硬盤最耗時的操作是尋址。爲提高整體效率,相關的數據應該規律存放以減少尋址次數,這就是
所謂的就近訪問原則(Locality of Reference, or Principle of Locality)。硬盤由一系列
固定大小的塊(block)組成,一般一個數據塊可以存儲多行數據。通過整理我們讓一個數據塊
只存儲一行數據,同時把相關的數據塊放在一起,以減少系統對塊的尋址以及讀取。
而列式數據庫以列的方式將數據序列化,先存一個列,然後存下一個列,就像這樣:
10:001,12:002,11:003,22:004;Smith:001,Jones:002,Johnson:003,Jones:004;Joe:001,Mary:0
02,Cathy:003,Bob:004;40000:001,50000:002,44000:003,55000:004;
lieshi
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章
批量刪除mysql一個庫所有數據表方法
coolner
2019-02-23 00:39:39
Linux中的configure、pkg-config、pkg_config_path
781732825
2019-02-23 13:43:04
dxdiag是什麼 dxdiag命令怎麼用
rtyuop998
2019-02-23 13:37:48
C# 惠普打印機 打印
星星鑫鑫
2019-02-23 13:18:56
【***教程】******、防範及善後
X93458
2019-02-23 13:06:44
2017年上半年信息安全工程師考試真題含答案(上午題)
dreamdeer
2019-02-23 00:33:04
2018年信息安全工程師備考技巧
dreamdeer
2019-02-23 00:32:59
2018年上半年信息安全工程師真題含答案(上午題)
dreamdeer
2019-02-23 00:32:59
信息安全工程師考試大綱
dreamdeer
2019-02-23 00:32:59
2017年上半年信息安全工程師考試真題含答案(下午題)
dreamdeer
2019-02-23 00:32:58
YUM倉庫服務與PXE網絡裝機
孫瑞瑞
2019-02-23 00:43:25