ToB企服应用市场:ToB评测及商务社交产业平台

标题: (Nosql)列式存储是什么? [打印本页]

作者: 数据人与超自然意识    时间: 2022-9-16 17:15
标题: (Nosql)列式存储是什么?
首先nosql可以被理解为not only sql 泛指非关系型数据库,也就是说不仅仅是sql,所以它既包含了sql的一些东西,但是又和sql不同,并在其的基础上改变或者说扩展了一些东西。
提到nosql,首先我们就要分析一下关系型数据库的行式存储和非关系型数据库的列式存储区别在哪?
行式存储我们都很熟悉,不论是mysql数据表还是我们熟悉的excel表,这些表里每一行都是完整的一条数据,它们彼此关联,彼此有关系。
以核酸检测的数据为例:
行式存储

一般核酸检测需要以下几个字段:姓名、身份证号、检测机构、检测时间、结果、价格
比如是这样的:


行存储优点分析

  1. select * from 核酸记录表 where 身份证号='彦祖的身份证号'
复制代码
  1. 1.先从索引查询出来彦祖的记录存储的物理地址
  2. 2.在通过物理地址去表的物理存储中查询对应地址中的数据
复制代码
行存储缺点分析

  1. select sum(价格) from 核酸记录表 where 身份证号='彦祖的身份证号'
复制代码
  1. 1.先从索引查询出来彦祖的记录存储的物理地址
  2. 2.在通过物理地址去表的物理存储中查询对应地址中的数据3.拿到所有数据时候,再通过对于价格列sum聚合得到结果
复制代码
行存储优缺点总结

  1. 1.连续空间对于插入/更新很方便
  2. 2.对于记录查询很方便
复制代码
  1. 1.会查询出来很多不需要的列
复制代码
列式存储


列存储的数据压缩

  1. 彦祖|德华|路人甲|德华|彦祖
复制代码
  1. 1|2|3|2|1
复制代码
  1. 35|20|8|23|20
复制代码
  1. 1|2|3|4|2
复制代码
列存储的查询执行过程

  1. select * from 核酸记录表 where 姓名=彦祖 and 价格=20
复制代码
  1. 1.对于where 姓名=彦祖
  2. 首先查询姓名字典表,查询到彦祖的id=1
复制代码
id姓名列1彦祖2德华3路人甲
  1. 2.通过查询到彦祖的id,对于性名列进行对比,构建一个bitmap,把匹配的要的列的索引位设置为1,否则为0
复制代码
  1. 3.对于where 价格=20 和上面一样的操作,先查询价格字段表,20 的id=2
复制代码
id价格列135220384234.通过查询到价格20的id,对于价格列进行对比,构建一个bitmap,把匹配的要的列的索引位设置为1,否则为0

5.对于两个where条件的结果bitmap做与运算,bitmap中,位为1的索引就是要查询数据的所有列的索引,如该例子中,两个结果bitmap与运算后的结果是00001,所以所有列的第5个值,拼接起来就是我们要查询的数据
  1. 6.所以我们把所有列的第五个值拿出来组装后就是我们需要的数据
复制代码
列存储优点分析

  1. select sum(价格) from 核酸记录表 where 身份证号='彦祖的身份证号'
复制代码
列存储缺点分析

列存储优缺点总结

  1. 1.数据压缩比较有优势
  2. 2.任何列都可以做索引
  3. 3.查询时只有涉及到的列会被读取
复制代码
  1. 1.每次查询时,都需要对查询到的列进行数据重新组装
  2. 2.插入/更新操作比较困难
复制代码
参考自:https://juejin.cn/post/7056820168239874062

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4