大数据笔记

行式存储与列式存储

传统的关系型数据库例如mysql,是使用行式数据存储,所有的记录是以行为单位,一个数据块旁边是同一条记录的另一个字段的数据块。

idnameage
1tiang18
2ling19
4tian21

这样的优点在于:

  1. 每次读取可以很方便的读取整行数据,适用于查询条件或查询结果涉及到所有字段的访问。
  2. 以行为单位,可以很方便保证行级数据的一致性,比较容易实现事务处理

但是行式数据库也有缺点,当一个数据库表中字段数量太多,例如有一百列,每次查询只访问其中几列,采用行式存储仍然会将整行数据取出,造成极大的资源浪费。而以HBase为代表的列式存储,则将同一列的数据存储在一起,一个数据块旁边的数据是同一列的下一行记录的数据。

id124
nametianglingtian
age181921

这样存储的优点在于:

  1. 可以满足快速查找其中部分列数据的需求
  2. 列式存储将同一列数据存储在一起,同一列数据的数据类型相同,更容易做数据压缩,节约磁盘空间,相应也减少了磁盘IO。

OLTP 与 OLAP

数据库从使用场景上看可以分为OLTP和OLAP两种。

OLTP(on-line transaction process)在线事务处理,最大的特点就是支持事务操作。但是事务的创建、执行、回滚等额外的保证导致了处理性能的降低,同时事务的隔离性也导致数据库并发度降低。传统的关系型数据库例如MySql、Oracle就适用于OLTP场景。

OLAP(on-line analysis process)在线分析处理,主要针对大量数据提供近实时的复杂查询分析功能。随着互联网的飞速发展,需要处理的数据量也在飞速发展,例如我们需要为符合条件的用户推荐指定商品,用户本身的信息可能非常多,年龄、爱好、是否已婚、是否有孩子、所在地区、消费习惯等几十个字段,同时用户的数据量也非常大,用户表可能有5、6亿条记录,如何从中快速筛选出符合条件的用户?这就是OLTP的一个典型场景。

显然我们在存储数据时应该使用列式存储。

  1. 首先一点宽表的列非常多,而我们做数据分析时仅需要其中部分列的数据。
  2. 其次,列式存储可以对不同列之间的数据分析做并行处理。例如我们要从年龄、爱好、地区这三列中进行筛选,在行式存储中,只能先从一个条件中筛选,筛选出中间结果之后再使用下一个条件筛选,最终执行的时间复杂度是O(n^3);但是假如使用列式存储的话,可以使用三个线程并行分别按照三个条件进行筛选,之后对得到的结果进行聚合过滤,执行的时间复杂度可以降至O(n).

分布式任务处理架构

当数据库中数据量仅有百万级时,进行复杂查询完全可以建立在单机任务上,但是对于海量数据来说,单机能存储的数据有限,势必要讲数据分散在集群中存储,同时单机任务处理性能也必然无法达到预期,势必要对任务进行拆解,将其分散在集群中处理,最后对结果进行汇总返回。分布式任务处理的核心思想就是对任务的拆解、分配、汇总。

MPP架构

MPP(Massively Parallel Processing)大规模并行处理架构,核心在于消除共享。每台服务器都有独立的CPU、内存、磁盘,同时也存储唯一的部分数据。当执行任务时,会按照数据的维度进行拆解,然后再分配到每一个具体执行的Executor上执行,每个Executor执行的任务都是一样的,只不过处理的数据不一样,只是本分片的数据。

例如用户表有三个分片,分别对应shard 1~3。现在要查询所有年龄在18~26岁之间的用户,最近一次购买的金额平均值。

这样一个任务会被分配到三个分片中,每个分片均执行同样的任务,之后拿到每个分片的结果进行聚合。但是假如等到每一个分片的任务都执行完再进行聚合,就会使执行和聚合两部分操作变成串行化,但是我们可以采用类似于java gc中的安全点的形式,当每个分片拿到部分结果之后进入安全点,将结果交给sever进行汇总,之后再接着执行到下一个安全点。这样可以使执行和聚合两个操作实现并行化。
在这里插入图片描述

优缺点

优点:MPP架构将任务以数据拆解的方式均摊在集群的每台服务器上,每台机器上执行完整的任务,只有在单台机器上任务执行结束之后才会通过网络进行数据汇总,在子任务执行过程中服务器之间没有多余的数据交换,网络开销较低,可以实现近实时的查询。

缺点:

  1. 从执行原理图上可以看出,MPP架构整体的性能取决于其中最慢的一台机器的性能,也就是木桶效应显著。
  2. 由于每台服务器上都需要执行一个完整的任务,因此系统的并发度并不会随着机器的增加而有显著的增加。例如10台机器组成的集群,每台机器能同时处理10个任务,50台机器组成的集群,由于单台机器处理数据量的下降,单台处理性能有所提升,可能可以同时处理13个任务,但是整体并发度并不会有太大的提升。

批处理架构

批处理架构核心在于对任务的拆解,将一个完整的任务拆解成不同构成的子任务,子任务之间通过依赖关系连接。所有的服务器从子任务队列中拉取子任务执行,再将子任务的结果返回给server。
在这里插入图片描述
在这里插入图片描述

优缺点

优点:批处理架构可以屏蔽机器的性能差异,性能较差的机器将执行更少的任务,因此受木桶效应影响较小。同样每台机器执行的仅仅是完整任务的一部分,因此随着机器的增加并发度可以显著增加,集群可以达到更大的规模。

缺点:批处理架构下需要对任务进行细致的拆解,子任务之间由于依赖关系也需要发生数据交换,因此网络开销更大。且子任务执行需要依赖调度系统分配机器,因此实时性较差。例如同样对表A和表B的符合条件的数据进行join这样一个任务,对于MPP架构来说,每台机器会将自己存储的表A和表B数据分别进行过滤和join,之后将结果返回给server,整个流程只会发生一次网络传输。但是对于批处理架构来说,会将任务拆分成三个子任务,表A过滤、表B过滤、join。每个子任务执行结束之后均需要通过网络传输将中间结果回传给server,因此会发生三次网络传输。

总结

OLAP可以分为实时计算和离线计算两种,MPP架构单个任务性能较高,可以实现准实时查询,但是扩展度和并发度不高。批处理架构可以大规模扩展,使集群规模和并发度达到很高,但是性能较差,可以实现离线计算。

参考文献

  1. 为什么 OLAP 需要列式存储
  2. MPP 的进化:深入理解 Batch 和 MPP 优缺点
  3. MPP架构与批处理架构有何异同
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值