为什么需要列式存储
相对于传统型数据库行式存储而言,区别如下
- 行式存储,存储一个表,通过行的序列构成
- 列式存储,存储一个表,通过列的序列构成
例如图片如下,
从图中可看到,行式的,一行数据在一起,后面跟着其他行;而列式,第一列放在一起,后面跟着第二列等等。
优缺点比较
- 优点,行式数据放在一起,容易insert和update,列式查询时候涉及到的列会读取,投影效率高,任何列都可以进行索引。
- 缺点,行式如果选择部分列,但是其他列的数据一样被查出来,列式,查询一条数据,被选择出的列,需要重新组合成一条数据,insert和update比较麻烦
数据压缩
列式存储,因为列在一起,他们的类型固定,可以方便进行压缩,考虑如下的压缩方式,
可以看到,建立Customers和material的字典表(橘黄色部分),字典表通过index标记对应的值,前提条件,值不重复。那么原来的表,就可以按照列,进行重新编码,只保留字典表的index部分,实现压缩的效果。
查询性能
通过一张图来描述,
步骤如下,查询Customer 为miller,material 为 refrigerator
- 通过字典表,可以查找miller的index4,material的index是3,一次字符串比较
- 使用数字到数据中比较,一样的标记1,不一样的标记0,得到两组bit数据。
- 两个bit组进行位运算and
- 如果最终and的结果不为0,则可以算出来是第几行,如图是第6行。