从简单库入手了解行式存储和列式存储

名词解释

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

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

行式存储和列式存储

从简单库入手了解行式存储和列式存储_第1张图片

从简单库入手了解行式存储和列式存储_第2张图片

我们以上图中简化后的广告单元表为例:

行式存储

从简单库入手了解行式存储和列式存储_第3张图片

列式存储

再来分别看下两种查询在行式列式存储数据库上的表现:

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

你可能感兴趣的:(行式存储与列式存储)