1. 数据库对象及操作
数据库对象的体系结构可以从用户视角和系统视角查看,用户视角类似使用MySQL一样,可以创建多个数据库,在每个数据库下面创建多个数据表,而在系统视角一个用户实例对应一个集群,而集群对应的是物理的数据库,该数据库为分布式的大规模并行MPP架构,数据库会分片到不同的节点上,而每个分片对应着物理表,通过Partition实现分区,分片是一级分区,分区是二级分区。
数据库对象的体系结构有以下概念:
• 用户集群:一个用户实例就是一个集群、用户集群资源独享。
• 物理库:一个用户集群系统默认初始化一个物理库。
• 数据库:逻辑数据库,最多256个;表名空间和权限隔离。
• 表:普通表又称分布式表,需要指定分布键;维度表又称广播表,每个节点冗余一份。
• 分片:表被分布键拆分后的子表,又称分片(Shard)。
• 分区:分片(Shard)可以再按某个字段划分为分区;分片列通常是时间字段,有生命周期管理功能。
1) 表:分区数据清除机制
数据清理机制:表元数据记录表的生命周期设置数,下面示例设LIFECYCLE 90,通过对分区的排序,超出生命周期数的分区将被清理掉,如图所示:
2) 数据建模:SQL开发规范
编写和优化SQL时,需要充分考虑其分布式特性,开发规范如下:
• SQL编写原则为追求简单:一般情况下,数据库性能会随SQL复杂度而下降。例如,单表查询(冗余设计)优于表关联查询。
• SQL优化核心方法是减少I/O:尽可能少的进行列扫描,返回最小数据量,减少I/O同时也减少内存开销。
• 分布式计算,本地计算&并行计算:大数据计算情况下,本地计算时充分利用分布式多计算资源的能力,避免数据跨节点。
• 高QPS,分区裁剪:业务系统要求高QPS、毫秒级RT时,表和SQL必须设计为分区裁剪模式。
a) 去掉不必要的列
返回的列的数量直接影响性能,在编写SQL时要确认业务需要返回的列,不要直接使用星号(*)进行查询,如:
• 错误SQL
select * from tab1 where c1>100 and c1<1000; |
• 正确SQL
select col1,col2 from table_name where C1>100 andc1<1000; |
b) 索引和扫描
当SQL包含多个查询条件时,优先选择高筛选条件,其他条件可以通过扫描实现。在SQL命令中通过条件c1=3可快速查询到少量记录(假设10000),单独使用time>'2010-01-0100:00:00'时返回的记录数又非常大,如:
• 原始SQL
select c1,c2 from tab1 where c1=3 and time >='2010-01-01 00:00:00'; |
• 建议SQL
/*no-index=itab1.time*/ selectc1,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集群的服务账号,技术支持人员才可以通过服务账号提供技术支持服务。
2) 用户
• 用户账号和认证
账号格式:ALIYUN$user_account@aliyun.com
认证需要使用AccessKey
• 用户类型
OWNER:数据库拥有者,开通云原生数据仓库服务,并创建数据。
用户:被授权的数据库用户,由OWNER添加,无需开通云原生数据仓库服务。
• RAM子账号
支持RAM(阿里云访问控制)子账号登录和使用云原生数据仓库。
主账号可建多个子账号,通过授予授权策略,使子账号在一定条件下可以访问云原生数据仓库。
子账号访问云原生数据仓库的MySQL协议端时,需要使用其的AccessKey ID/Secret作为用户名和密码。
3) 权限模型
AnalyticDB for MySQL集群支持如下粒度的权限控制:集群、数据库、表、列、行级(基于视图),如下图:
4) SQL审计
SQL审计功能可以实时记录数据库DML和DDL操作信息,并提供数据库操作信息的检索功能,提高云原生数据仓库AnalyticDB MySQL版的安全性。
• SQL审计日志:记录对数据库执行的所有操作。通过审计日志记录,用户可以对数据库进行故障分析、行为分析、安全审计等操作。
• 搜索:可以按照数据库、客户端IP、执行耗时、执行状态等进行多维度检索,并支持导出搜索结果。
3. 智能索引
ADB为表的每个字段智能构建索引,目前支持五种类型:字符串类的Invert索引(倒排索引)、bitmap索引、数值类的KDTree索引、JSON索引、向量索引。
不同类型的索引可以实现列级索引多种条件(交、并、差)任意组合,查询时无需建组合索引,通过Index CBO 智能动态筛选索引下推,通过谓词计算层进行流式渐进多路归并输出。
• 倒排索引
分区表的所有列(适用Bitmap索引的列除外)都建了倒排索引,key为排序的列值,value为对应的RowlD list,所以对于任何列进行FILTER(WHERE key=value)或者JOIN查询都非常高效。
• Bitmap索引
对于值重复率高的列,建立Bitmap索引。
• KDTree索引
为了加速范围查询,对于类型为数字的列同时建立了KDTree索引。
• 行列混存的块索引
块索引即块的元数据信息。
• 分区元数据:分区总行数,单个block中的列行数等信息。
• 列元数据:列值类型、整列的MAX/MIN值,NULL值数目,直方图信息等,便于加速查询。
• 列Block元数据:该列的MAX/MIN/SUM总条目数(COUNT)等信息,便于加速查询。
说明
复杂类型数据(json,vector)存储采用统一大小的块组织存储,按顺序存,采用稀疏索引查询。
更多精彩内容,欢迎观看:
《阿里云认证的解析与实战-数据仓库ACP认证》——云原生数据仓库AnalyticDB MySQL版解析与实践(上)——三、产品相关概念(下):https://developer.aliyun.com/article/1223283?groupCode=certification