列式存储
列数据库和行数据库的根本区别是如何存储数据——列数据库把不同的列存储在不同的文件中,而行数据库是按行把数据存到同一个文件中。
列式存储的优点如下:
如果查询表时,只取部分字段;或者查询时按某列的值过滤,行存储需要从硬盘上加载整行到内存,效率没有按列取高
列式存储把相同类型的数据归在一起,压缩比可以很高,通常能到10%~25%。数据库的瓶颈通常在IO,很高的压缩比,可以大大减轻数据读取的压力,提高响应速度
除了字符串类型,其他类型的字段通常是固定长度的,而且在磁盘和内存的字节顺序通常是一致的,可以直接映射,省去了解析的过程。而在行存储中,只要有变长的字段存在,需要逐行逐字段的解析
列式存储可以向量化的处理一个字段。可以将一个列的一整块连续数据读入CPU cache,效率非常高。而且,可以利用CPU的向量化(比如对多个整型进行位移、求和、比较等,现代CPU的功能)处理指令并行处理一些常用计算,而这一切在行存储中都做不到
在执行聚合计算时,可以只选择需要的列进行操作,而不需要操作整行数据,从而降低了计算的成本。因此列式存储做聚合计算会更有优势。
参考
Last updated