列式存储vs行式存储

为什么要按列存储?

列式存储(Columnar or column-based)是相对于传统关系型数据库的行式存储(Row-based storage)来说的。简单来说两者的区别就是如何组织表:

  • Row-based storage stores a table in a sequence of rows.
  • Column-based storage stores a table in a sequence of columns.
  • 与行存储将每一行的数据连续存储不同,列存储将每一列的数据连续存储。示例图如下:

    相比于行式存储,列式存储在分析场景下有着许多优良的特性。

    1)分析场景中往往需要读大量行但是少数几个列。在行存模式下,数据按行连续存储,所有列的数据都存储在一个block中,不参与计算的列在IO时也要全部读出,读取操作被严重放大。而列存模式下,只需要读取参与计算的列即可,极大的减低了IO cost,加速了查询。

    2)同一列中的数据属于同一类型,压缩效果显著。列存储往往有着高达十倍甚至更高的压缩比,节省了大量的存储空间,降低了存储成本。

    3)更高的压缩比意味着更小的data size,从磁盘中读取相应数据耗时更短。

    4)自由的压缩算法选择。不同列的数据具有不同的数据类型,适用的压缩算法也就不尽相同。可以针对不同列类型,选择最合适的压缩算法。

    5)高压缩比,意味着同等大小的内存能够存放更多数据,系统cache效果更好。

    官方数据显示,通过使用列存,在某些分析场景下,能够获得100倍甚至更高的加速效应。

    声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

    上一篇 2020年1月1日
    下一篇 2020年1月1日

    相关推荐