名詞解釋
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、使用這個下標組裝出最終的結果集