列式存储

列数据库和行数据库的根本区别是如何存储数据——列数据库把不同的列存储在不同的文件中,而行数据库是按行把数据存到同一个文件中。

列式存储的优点如下:

  1. 如果查询表时,只取部分字段;或者查询时按某列的值过滤,行存储需要从硬盘上加载整行到内存,效率没有按列取高

  2. 列式存储把相同类型的数据归在一起,压缩比可以很高,通常能到10%~25%。数据库的瓶颈通常在IO,很高的压缩比,可以大大减轻数据读取的压力,提高响应速度

  3. 除了字符串类型,其他类型的字段通常是固定长度的,而且在磁盘和内存的字节顺序通常是一致的,可以直接映射,省去了解析的过程。而在行存储中,只要有变长的字段存在,需要逐行逐字段的解析

  4. 列式存储可以向量化的处理一个字段。可以将一个列的一整块连续数据读入CPU cache,效率非常高。而且,可以利用CPU的向量化(比如对多个整型进行位移、求和、比较等,现代CPU的功能)处理指令并行处理一些常用计算,而这一切在行存储中都做不到

  5. 在执行聚合计算时,可以只选择需要的列进行操作,而不需要操作整行数据,从而降低了计算的成本。因此列式存储做聚合计算会更有优势。

参考

DolphinDB - 为什么列存储数据库读取速度会比传统的行数据库快

Last updated