從簡單庫入手瞭解行式存儲和列式存儲

名詞解釋

OLTP:事務型處理,比如:select 字段1,字段2 from table where 字段1='x'

OLAP:分析型處理,比如:select avg(字段2) from table

行式存儲和列式存儲

我們以上圖中簡化後的廣告單元表爲例:

行式存儲

列式存儲

再來分別看下兩種查詢在行式列式存儲數據庫上的表現:

1⃣️OLTP:select * from table where ad_id='14286580'

行式存儲:只需要在存儲模塊1中遍歷到該內容就可以,把該行數據取出來返回(是不是遍歷到要的數據就停止,查資料沒查到)

列式存儲:遍歷存儲模塊2,找到ad_id,再遍歷存儲模塊1和存儲模塊2找到其他數據

2⃣️OLAP:select avg(pay_balance) from table

行式存儲:遍歷存儲模塊1和2,隨機讀取到pay_balance,最終再計算

列式存儲:遍歷存儲模塊2,順序讀取pay_balance字段並計算

  • 插入/刪除/更新數據

行式存儲:比較快,找到對應行,刪除更新數據

列式存儲:比較慢,需要重新組合所有的列

列式存儲的優點

 優缺點

壓縮

將重複的數據從列式存儲中取

存儲爲

 

當有查詢sql請求篩選壓縮字段時:

select * from table where extended_content1="擴展字段1的內容3" and extended_content2="擴展字段2的內容5"

1、根據內容從字典表裏取出對應的編號3、5(只需要進行一次字符串比較)

2、根據編號去列表中匹配,匹配的位置設爲1

extended_content1:0100000100

extended_content2:0000001100

3、 把不同列的匹配結果進行位運算得到符合所有條件的記錄下標(位運算之後就是:0000000100)

4、使用這個下標組裝出最終的結果集

 

參考文檔:https://zhuanlan.zhihu.com/p/35622907

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章