简单说说列式存储数据库

2022-01-25  本文已影响0人  小草莓子桑

随着业务越来越看重数据的重要性,相信大家也做了很多多维分析的需求,在调研技术选型时候,会发现很多olap,如druidclickhousestarRocks都是列式存储数据库,今天我们来通过对比行存储简单说下列存储

举个栗子来说下列存储和行存储

要过年回家了,今天做了核酸检测,我们就以存储核酸检测为业务场景

栗子

核酸检测表

行存储

行存储优点分析
select * from 核酸记录表 where 身份证号='彦祖的身份证号'
1.先从索引查询出来彦祖的记录存储的物理地址
2.在通过物理地址去表的物理存储中查询对应地址中的数据
行存储缺点分析
select sum(价格) from 核酸记录表 where 身份证号='彦祖的身份证号'
1.先从索引查询出来彦祖的记录存储的物理地址
2.在通过物理地址去表的物理存储中查询对应地址中的数据
3.拿到所有数据时候,在通过对于价格列sun聚合得到结果
行存储优缺点总结
1.连续空间对于插入/更新很方便
2.对于记录查询很方便
1.会查询出来很多不需要的列

列存储

姓名 身份证号 检测机构 检测时间 结果 价格
彦祖 123512387 北京 2021-12-24 12:12:45 阴性 35
德华 213124157 上海 2021-12-22 12:12:45 阴性 20
路人甲 213123145 河南 2021-12-21 12:12:45 阴性 8
德华 213124157 广州 2021-12-29 12:12:45 阴性 23
彦祖 123512387 上海 2021-12-30 12:12:45 阴性 20
列物理结构
列存储的数据压缩
彦祖|德华|路人甲|德华|彦祖
1|2|3|2|1
35|20|8|23|20
1|2|3|4|2
列存储的查询执行过程
select * from 核酸记录表 where 姓名=彦祖 and 价格=20
1.对于where 姓名=彦祖
首先查询姓名字典表,查询到彦祖的id=1
id 姓名列
1 彦祖
2 德华
3 路人甲
2.通过查询到彦祖的id,对于性名列进行对比,构建一个bitmap,把匹配的要的列的索引位设置为1,否则为0
姓名列
3.对于where 价格=20
和上面一样的操作,先查询价格字段表,20的id=2
id 价格列
1 35
2 20
3 8
4 23
4.通过查询到价格20的id,对于价格列进行对比,构建一个bitmap,把匹配的要的列的索引位设置为1,否则为0
价格列
5.对于两个where条件的结果bitmap做与运算,bitmap中,位为1的索引就是要查询数据的所有列的索引,如该栗子中,两个结果bitmap与运算后的结果是00001,所以所有列的第5个值,拼接起来就是我们要查询的数据
与运算
6.所以我们把所有列的第五个值拿出来组装后就是我们需要的数据
列存储优点分析
select sum(价格) from 核酸记录表 where 身份证号='彦祖的身份证号'
列存储缺点分析
列存储优缺点总结
1.数据压缩比较有优势
2.任何列都可以做索引
3.查询时只有涉及到的列会被读取
1.每次查询时,都需要对查询到的列进行数据重新组装
2.插入/更新操作比较困难

列式存储数据库就说到这里,欢迎大家来交流,指出文中一些说错的地方,让我加深认识,愿大家没有bug,谢谢!

上一篇 下一篇

猜你喜欢

热点阅读