列存储的特点和优势

列式存储的优势一方面体现在存储上能节约空间、减少 IO,另一方面依靠列式数据结构做计算上的优化。

简单来说两者的区别就是如何组织表

行式存储对于 OLTP 场景是很自然的:大多数操作都以实体(entity)为单位,即大多为增删改查一整行记录,显然把一行数据存在物理上相邻的位置是个很好的选择。

但是对于 OLAP 场景,一个典型的查询需要遍历整个表,进行分组、排序、聚合等操作,分析型 SQL 常常不会用到所有的列,而仅仅对其中某些感兴趣的列做运算,那一行中那些无关的列也不得不参与扫描。同一列的数据被一个接一个紧挨着存放在一起,表的每列构成一个长数组。

列存储的优势 

因此,列存储对于OLAP 场景优势有:

  • 当查询语句只涉及部分列时,只需要扫描相关的列
  • 每一列的数据都是相同类型的,彼此间相关性更大,对列数据压缩的效率较高(有大量重复的数据,并且利于数据结构填充的优化和压缩,对于数字列这种数据类型可以采取更多有利的算法去压缩存储。)

    对比总结一下:
 列式存储读取数据更快的其他原因
  1. 列式存储把相同类型的数据归在一起,压缩比可以很高,通常能到10%~25%。数据库的瓶颈通常在IO,很高的压缩比,可以大大减轻数据读取的压力,提高响应速度。
  2. 除去字符串类型,其他类型的字段通常是固定长度的,而且在磁盘和内存的字节顺序通常是一致的,可以直接映射,省去了解析的过程。而在行存储中,只要有变长的字段存在,需要逐行逐字段的解析。
  3. 列式存储可以向量化的处理一个字段。可以将一个列的一整块连续数据读入CPU cache,效率非常高。而且,可以利用CPU的向量化处理指令并行处理一些常用计算,譬如求和,比较大小等等。而这一切在行存储中都做不到。
  4. 因为数据表中的数据类型都是用户定义的,开发数据库的各种算子的时候,通常都是虚拟函数。在行存储中,意味着在每一行evaluate这个算子(譬如加法算子)的时候,我们都需要一个很大的case语句,对不同的数据类型分别处理,效率很低。而在列式存储中,极端情况下,对整个列只要做一次case处理就可以了,效率就会很高。当然近几年,很多数据库引擎都引入了JIT,行存储这方面的劣势在缩小。
行存储和列存储优缺点对比

显而易见,两种存储格式都有各自的优缺点:

1)行存储的写入是一次性完成,消耗的时间比列存储少,并且能够保证数据的完整性,缺点是数据读取过程中会产生冗余数据,如果只有少量数据,此影响可以忽略;数量大可能会影响到数据的处理效率。

2)列存储在写入效率、保证数据完整性上都不如行存储,它的优势是在读取过程,不会产生冗余数据,这对数据完整性要求不高的大数据处理领域,比如互联网,犹为重要。

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
数据库和行式数据库是两种不同的数据库存储方式,它们有各自的优势和劣势。 数据库(Columnar Database)将数据按进行存储,每个都有各自的数据类型和索引。这种存储方式的主要特点是高度的压缩率和快速的数据访问速度。数据库适用于需要经常查询特定的场景,如数据分析、报表生成等。优点包括: 1. 高压缩率:数据库能够对相同数据类型的进行高效压缩,因为相同类型的数据具有较高的相似性,从而减少存储空间的占用。 2. 快速查询:由于数据按存储,查询时只需要读取所需的数据,减少了不必要的IO操作,提高了查询效率。 3. 聚合查询效果好:数据库适用于聚合计算,例如对大量数据进行分组统计、求和、平均值等操作。 然而,数据库也存在一些劣势: 1. 更新和插入数据较慢:由于数据按存储,更新和插入操作需要涉及多个,导致写入性能较低。 2. 不适合事务处理:数据库一般不支持事务处理,因此在需要频繁进行事务操作的场景下效果不佳。 相比之下,行式数据库(Row-based Database)将数据按行进行存储,每个行包含多个的数据。行式数据库适用于需要频繁更新和插入数据的场景,如在线事务处理系统。优点包括: 1. 高写入性能:由于数据按行存储,插入和更新操作只需要涉及一行数据,因此写入性能较高。 2. 支持事务处理:行式数据库通常支持事务处理,保证了数据的一致性和可靠性。 不过,行式数据库也存在一些劣势: 1. 查询效率较低:由于数据按行存储,查询时需要读取整行数据,造成不必要的IO开销,降低了查询效率。 2. 存储空间占用较大:相同类型的数据在行式数据库中会重复存储,导致存储空间占用较大。 综上所述,数据库适用于数据分析和报表生成等场景,而行式数据库适用于事务处理系统。选择合适的数据库类型应根据具体的业务需求和性能要求来决定。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值