赞
踩
HTAP、HSAP是OLAP与OLTP综合需求驱动下的新的数据库系统,既满足事务处理,又满足大规模分析查询,并且是基于一套系统下实现。
本节首先我们要了解服务于分析的区别。相当多从应用角度对数据处理分类的划分,大致可以分为Transaction交易于Analysis分析两大类,一类位于企业数据架构的上游用于生产数据;一类位于企业数据架构的下游用于数据价值的利用。
HSAP的出现是为了满足企业对“大数据”的需求,也就是说HTAP虽然同时满足了交易类数据的分析查询需求,但对更大范围的大数据,比如来自日志等非交易系统(用户行为)的数据,则不能很好的满足。因为HTAP系统设计的基石和优势是执行hi细粒度的分布式事务,交易型数据往往以大量分布式小事务的方式写入HTAP系统。而来自日志等系统的数据,大多并没有分布式事务的需求,以HTAP系统来处理他们,显然带来了不必要的开销,从而降低了系统效能。
HSAP需求采用一套复杂的技术栈组合来完成,例如Flink+Hbase或者Hive+Druid等
OLTP | OLAP | |
---|---|---|
用户 | 操作人员、底层管理人员 | 决策人员、高级管理人员 |
数据结构 | 采用行存储方式,适用于实时事务处理 | 采用列存储方式,适用于数据分析 |
数据库 | 关系型数据库:Mysql、Oracle,E-R模型 | 数据仓库:hive 星型模型或雪花模型 |
性能要求 | 高吞吐、低延迟 | 当前及历史数据 |
数据一致性 | 强调数据的强一致性,通过ACID属性确保每个事务的完整执行 | 一致性相对要求低一些,更注重查询和分析性能 |
读写操作 | 处理大量的插入、更新和删除的操作,需要快速完成 | 更注重复杂的查询和分析操作,允许较长的响应时间 |
性能优化 | 通过缓存、分区和负载均衡等技术提高性能 | 通过索引、分区和并行处理等技术优化查询性能 |
OLTP查询一般仅涉及单表,点查为主,返回的是记录本身或该记录的多个列。即使是范围查询,基本上也会通过limit来限制返回的记录数。
OLAP则不同,表中单条记录本身并不是查询所关心的,比较典型的特点包括由聚合类算子、涉及多表关联。这些操作都非常消耗计算资源,而且数据仓库相比数据库在数据量上大很多,因此,OLAP类查询经常表现为cpu-bound而不是io-bound。
目前的趋势是将OLAP与OLTP相融合,在同一个系统中同时提供TP和AP的两种服务,即HTAP或者HSAP产品,国内的数据库创业公司PingCAP的TiDB就比较好。
但是由于两者服务类型相差较大,完全融合是很难的,如何解决AP业务对要求更高实时性和稳定性的TP业务带来的影响,如何同时提供两种服务且两种服务与业界其他系统相比具备足够竞争力,这些都是很大的挑战。
在目前的HTAP系统中,一般通过存储层的数据多副本来进行针对AP和TP业务的不同方式的优化,使用多个副本来以行存方式更好的满足TP业务,通过增加一个副本来以列存方式为AP业务提供服务。
在存储系统上,配置独立的计算/查询系统,分别满足TP和AP不同的要求。比如TP系统很重要的一点就是事务的ACID,而AP系统更加关心分布式并行查询的能力。
钻取(Drill-down):是往更细粒度深挖。从上一层到下一层,即深入该层内部,比如数据中可以分为计算机、数理化、文史地理等。
上卷(Roll-up):与钻取往深度挖相反,即从细粒度数据向上层聚合,如江苏省、上海市和浙江省的销售数据进行汇总查看江浙沪地区的销售数据。上面的钻取和上卷通常是改变维度的粒度。
切片(Slice):选择维中特定的值进行分析,比如只选择电子产品的销售数据,或者浙江一个省粒度进行分析;
切块(Dice):选择维度中给特定区间的数据或者某批特定值进行分析,比如选择2010年第一季度到2010年第二季度的销售数据。与切片不同的是,切块的粒度更大,会选择一个维度中某个区间或者范围的值,而不是仅仅是某个值。
旋转(Pivot):维度的位置呼唤,就像是二维表的行列转换。旋转并为较少或增加要分析的样本。而是根据不同的目的,改变了分析的角度。
OLTP即联机事务处理,就是我们经常说的关系数据库,增删改查就是我们经常应用的东西,这是数据库的基础;
OLAP即联机分析处理,是数仓的核心部分,所谓的数据仓库就是对于大量已经由OLTP形成的数据的一种分析型的数据库,用于处理商业智能、决策支持等重要的决策信息;数据仓库是在数据库应用到一定程序之后而对历史数据的加工和分析,读取更多,更新较少。
HTAP数据库简单理解就是OLAP与OLTP业务都统一的在一套数据库系统里完成。HTAP数据库相对于传统TP数据库有TP所不具备的计算引擎,可以加快SQL的执行效率,而HTAP数据库基于传统AP数据库,又有AP所不具备的事务引擎,能做到所写即可见,数据具有高时效性。
TP/AP型数据时效性:简单说,就是业务的TP查询和AP查询看到总是“同一份数据”,不会有明显的延迟。目前比较成熟的Mysql主备同步机制能保证数据延迟达到毫秒级或压秒级,用户几乎不会察觉,并且同步准确性非常高,这笔依赖于异步的外部数据同步系统的可靠性要高得多;
TP/AP稳定性与高可用:TP与AP两者互相隔离,保证各自的稳定可靠是HTAP的基本要求。要做到这一点,可以基于独立部署进行物理隔离,也可以基于链路隔离以及备库字典容灾与切换方案进行隔离;
跨业务库的关联查询:跨业务库关联分析是HTAP常见场景,这要求HTAP查询引擎能基于MYSQL协议对接不同类型的Mysql存储;
复杂SQL处理能力:除了要有强大的优化器以外,MPP计算引擎和Streaming计算引擎等加速SQL执行的手段也必须要有的。
橙色一层是存储层,这层一般都是HTAP分库分表的Mysql实例(云上就是RDS实例),通常每一个物理分库都会配一主多备保证高可用。灰色的一层是引擎层,引擎层使用集群提供高可用,集群的每一个节点都是无状态的server节点。Server里包含了用于处理Mysql协议的网络模块、查询优化器以及一整套TP引擎对应的执行算子。
通常业务OLTP类的sql在Server的TP引擎内完成全部执行。但如果业务的sql是OLAP类的复杂Sql,引擎层会将SQL对应的物理查询计划发到右侧的FireWorker引擎进行计算;
Fireworks是一个基于Spark的具有DAG能力并行执行引擎,它能够进行MPP计算及Streaming计算,Fireworks内部的每一个Worker会主动连用户mysql的备库获取数据并进行计算。
在存储层默认用Mysql的一主多备来实现。像TP引擎会默认只访问主库,这样数据可以保持数据一致性。而Fireworks引擎默认只允许访问应用的备库,这样业务在存储层AP流量和TP是天然的物理隔离,保证互相不受干扰。
由于备库承载的是OLAP类的Sql,Sql通常是相当的复杂性,备库被打垮是高概率事件, 所以,HTAP能在多备库之间实施自动的容灾和切换,这样就算一台备库宕机了,另一个备库也可以继续提供服务,从而高可用。
在引擎上,通常建议业务将OLTP流量用主实例承载,业务的OLAP流量用只读实例来承载,这样业务的AP和TP业务就能在引擎上也能实现物理隔离,从而保证各自的稳定性和高可用。
原则上,优化器会尽可能地算子下推到物理存储,这样可以大大减少引擎成本地执行压力以及中间数据地网络传输代价,从而提升执行效率。
对于一些诸如必须要跨多个物理分片地或跨多个逻辑库才能完成计算地算子(如跨库JOIN),他们没有办法下推物理存储,优化器会自动采用MPP地执行策略,直接将物理计划发给Fireworks引擎做MPP计算。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。