开发者学堂课程【数据仓库 ACP 认证课程:【视频】云原生数据仓库 AnalyticDB MySQL 版 _解析与实践1】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/928/detail/14623
【视频】云原生数据仓库 AnalyticDB MySQL 版 _解析与实践1
(2)弹性计算层∶查询执行计划
SQL:
select count(*)
from customer left join lineitem
on customer.c nationkey_= lineitem.l_partkey;
逻辑执行计划:
用户下发SQL
前端节点负责解析SQL,生成分布式执行计划,下发到计算节点和存储节点执行
执行完成后,将结果返回给前端节点
主要概念:
Stage:
为了让Query能够在多台机器上并行执行,会将执行计划拆分成多个阶段(Stage) ,每个Stage会产生多个Task进行执行
Task:
Task负责具体计算的执行,是Stage在某一个Worker或者Executor上的实例
Operator:
对应一个相对独立的计算单位,比如过滤、投影、聚合等操作,作用于输入数据,并产生输出。
执行计划:
(3)弹性计算层∶查询执行模式
①Interactive 模式
场景
适合交互式查询,对响应时间有较高要求
查询Query不高,资源充足
特点
MPP pipeline方式执行,即一个查询的所有分布式执行任务会被同时调度执行
完全基于内存进行计算
大查询消耗资源多
②Batch模式(E系列支持)
场景
适合ETL场景,作业执行时间长,对RT要求低
计算数据量大,计算逻辑复杂,但资源较为有限
特点
BSP方式执行,即StageByStage方式调度执行分布式任务
内存不足时自适应下盘算子状态数据
Stage之间的数据传输(Exchage/Shuffle )依赖本地磁盘+对象存储
大查询/ETL离线任务资源消耗可控
(3)储存层:架构
包括针对实时任务的在线存储和针对离线任务的离线存储
(4)存储层∶高吞吐写入
玄武分析存储引擎为用户提供高可靠、高可用、高性能、低成本的企业级数据存储能力,是AnalyticDB实现高吞吐实时写入、高性能实时查询的基础支撑。
存储层的采用Raft协议,在多副本之间保证数据临时性,同时协议具有更高的这样一个可靠可用性,当我们某一个worker Group失效或者是失败的时候,可以通过多数化来保证系统的一个正常运行,增量数据是通过异步构建的方加载进入全量数据,实行冷热数据分层以及的数据的分析管理
(5)存储层∶行列混合存储
玄武存储引擎支持行列混存和行存的存储格式,其中行列混存是一种以列存为基础兼顾行存的模式,类似于Hadoop中的ORC/Parquet格式。
不同的是玄武的行列混存不仅兼顾分析类的列裁剪和大吞吐扫描性能,而且结合其行对齐的能力,可以实现很好的随机查找性能,这对于任意多维索引过滤的场景也拥有出色的性能优势。
数据分成 Row Group,在 Row Group 中的列是单独存储的,对于固定场所的数据,分成固定场所块以及变长块,变长块采用 Toast File进行存储
(6)存储层:自适应索引
对于不同的索引生成的结果通过联合或并列的操作形成 id 的集合,根据 id 的结合获取对应的数据
四、产品相关概念
1.数据库对象及操作
(1)数据库对象:体系结构
用户集群
一个用户实例就是一个集群
用户集群资源独享
物理库
一个用户集群系统默认初始化一个物理库
数据库
逻辑数据库,最多256个
表名空间和权限隔离
表
普通表,又称分布式表,需要指定分布键
维度表,又称广播表,每个节点冗余一份
分片
表被分布键拆分后的子表,又称分片( Shard )
分区
分片( Shard )可以再按某个字段划分为分区·分片列通常是时间字段,有生命周期管理功能
(2)表∶分区数据清除机制
数据清理机制︰
表元数据记录表的生命周期设置数,下面示例设LIFECYCLE 90,通过对分区的排序,超出生命周期数的分区将被清理掉,
如图所示︰
从1月1日一直到3月31日正好是90个分区。那随着用户的数据添加,用户增加了一个4月1日分区,此时为91个分区,但设定了最多包含90个分区,那第一个分区也就是1月1号分区会自动清除,从而保证还是90个分区
(3)数据建模:SQL开发规范
编写和优化SQL时,需要充分考虑其分布式特性。
①SQL编写原则为追求简单
一般情况下,数据库性能会随SQL复杂度而下降。例如,单表查询(冗余设计)优于表关联查询。
②SQL优化核心方法是减少I/O
尽可能少的进行列扫描,返回最小数据量,减少I/O同时也减少内存开销。
③分布式计算,本地计算&并行计算
大数据计算情况下,本地计算时充分利用分布式多计算资源的能力,避免数据跨节点。
④高QPS,分区裁剪
业务系统要求高QPS、毫秒级RT时,表和SQL必须设计为分区裁剪模式。
去掉不必要的列
返回的列的数量直接影响性能,在编写SQL时一定要确认业务需要返回的列,不要直接使用星号(*)进行查询。索引和扫描
当SQL包含多个查询条件时,优先选择高筛选条件,其他条件可以通过扫描实现。
在SQL命令中通过条件c1=3可快速查询到少量记录(假设10000 ),单独使用time> '2010-01-01 00:00:00时返回的记录数又非常大。
错误SQL :
select * from tab1 where c1>100 and c1<1000;
正确SQL:
select col1, col2 from table_name wherec1>100 and c1<1000;
原始SQL :
select c1,c2 from tab1 where c1=3 and time>='2010-01-01 00:00:00;
建议SQL :
*+no-index=[tab1.time]*/select c1,c2 from tab1
where c1=3 and time> ='2010-01-01 00:00:00";
2.权限与数据安全
(1)权限与数据安全:账号类型
账号类型 |
作用范围 |
可进行的操作 |
阿里云账号 |
AnalyticDB for MySQL集群 |
阿里云账号用于创建和管理集群,例如登录阿里云产品控制台、设置白名单、创建数据库账号、申请外网地址、按量付费转包年包月、设置可维护时间段、扩容集群、恢复新集群以及删除集群等。 |
RAM子账号 |
AnalyticDB for MySQL集群 |
阿里云账号授予RAM子账号一定的权限后,RAM子账号也可以在权限范围内创建和管理集群。例如登录阿里云产品控制台、设置白名单、创建数据库账号、申请外网地址、按量付费转包年包月、设置可维护时间段、扩容集群、恢复新集群以及删除集群等。 |
数据库账号 |
数据库 |
数据库账号在权限范围内用于对数据库进行操作,例如创建/删除数据库、连接数据库、创建/删除表、创建/删除视图等。分为普通账号和高权限账号。 |
服务账号 |
AnalyticDB for MySQL集群 |
需要技术支持时授权AnalyticDB for MySQL集群的服务账号,技术支持人员才可以通过服务账号提供技术支持服务。 |
阿里云账号和 RAM是管理账号