秒懂列式數據庫和行式數據庫
來源:未知 時間:2022-53-29 瀏覽次數:280次
行式數據庫(Row-Based)數據按行存儲,常見的行式數據庫有Mysql,DB2,Oracle,Sql-server等;列數據庫(Column-Based)數據存儲方式按列存儲,常見的列數據庫有Hbase,Hive,Clickhouse,Sybase 等。
行存儲是將整行放入連續的物理位置,就像傳統的記錄存儲或文件存儲方式,列存儲是按列將連續的某幾列數據放入連續的物理存儲單元中,兩種存儲方法如下圖所示。
行存儲的特點
-
數據是按行存儲的
-
沒有索引的查詢會消耗大量的IO資源
-
建立索引和視圖需要耗費大量的時間和系統資源
-
面對高并發的查詢,數據庫必須被大量膨脹才能滿足性能需求
列存儲特點
-
數據按列存儲—每一列單獨存放
-
數據即是索引,無須另建索引
-
只訪問查詢所涉及到的列(與行數據庫不同)--節省IO開支
-
可以高效壓縮
-
查詢的并發處理性能高
實操看列式數據庫性能優點
|
姓名(name) |
年齡(age) |
住址(addr) |
生日(bt) |
證件號(num) |
錄入時間(intime) |
|
張三 |
22 |
北京海淀 |
20000101 |
xxx |
20220201 |
|
李四 |
21 |
北京海淀 |
20011112 |
xxx |
20220201 |
|
王五 |
19 |
|
20031112 |
xxx |
20220201 |
查詢年滿20歲人員姓名住址(表名為person)select name,addr from person where age>20
列式存儲讀取3列
|
姓名(name) |
年齡(age) |
住址(addr) |
生日(bt) |
證件號(num) |
錄入時間(intime) |
|
張三 |
22 |
北京海淀 |
20000101 |
xxx |
20220201 |
|
李四 |
21 |
北京海淀 |
20011112 |
xxx |
20220201 |
|
王五 |
19 |
北京海淀 |
20031112 |
xxx |
20220201 |
行式存儲讀取所有列
|
姓名(name) |
年齡(age) |
住址(addr) |
生日(bt) |
證件號(num) |
錄入時間(intime) |
|
張三 |
22 |
北京海淀 |
20000101 |
xxx |
20220201 |
|
李四 |
21 |
北京海淀 |
20011112 |
xxx |
20220201 |
|
王五 |
19 |
|
20031112 |
xxx |
20220201 |
應用場景
行存儲數據庫適用在OLTP(
on-line transaction processing)場景即聯機事務處理,而列數據庫適合適用在大數據分析OLAP(on-line Analytical processing)聯機分析處理,當然不管是列數據庫還是行數據庫起功能或能力都不是萬能的,只是給DBA多提供了一個可選方案,具體項目執行需要架構師根據項目實際情況選擇最合適的方案。