SQL查询优化器浅析(一) | 青训营笔记

145 阅读8分钟

这是我参与「第四届青训营 」笔记创作活动的第1天

大数据体系

大数据体系.png

左侧自底向上,由底层到应用,右侧为具体开发中的运维管理方面

消息队列用于存储和计算

基础设施

ECS

Elastic Compute Service(云服务器)的缩写,ECS是一种简单高效、安全可靠、处理能力可弹性伸缩的计算服务

服务器

服务器跟我们普通的家庭电脑都属于计算机这个大类,服务器与普通的家用计算机内部结构相差不大,如:cpu、硬盘、内存,系统、系统总线等,只不过服务器是存放于数据中心(机房),专用来对外部提供服务。

也就是说对外提供服务的计算机就可以统称为服务器,而虚拟主机、云服务器都属于服务器。

云服务器与虚拟主机的区别

云服务器:云服务器是一种从物理服务器集群中虚拟化构建的云端资源池,然后按需搭配资源的,具备弹性伸缩性的计算服务。在配置性能上,云服务器可能无法媲美物理服务器,但在性能和管理操作方面要比物理服务器更加的方便。这种更像是虚拟的物理服务器。

虚拟主机:虚拟主机是利用虚拟技术,从一台物理服务器中分出的若干个虚拟空间。我们可以租用某一个虚拟空间用于运行Web网站程序,只提供必要的程序存储、传输和运行功能。

存储

存储的核心是硬盘中的磁片。(一个硬盘有很多块)

磁盘里面由多个铝合金材料做的碟片构成,用于存储数据。每个碟片会有一个读写磁头通过磁化碟片来存储数据。

碟片在格式化被划分成为许多同心圆,这些同心圆的轨迹叫做磁道。磁道从最外圈向最内圈由0开始编号。

碟片上的每个磁道被等分为若干个弧段,这些弧段便是磁盘的扇区。每个扇区512个字节,扇区是磁盘可分的最小单位。

VPC

VPC(Virtual Private Cloud)是公有云上自定义的逻辑隔离网络空间,是一块可我们自定义的网络空间。我们可以自定义网段划分、IP地址和路由策略等,并通过安全组和网络ACL等实现多层安全防护。同时也可以通过VPN或专线连通VPC与我们的数据中心,灵活部署混合云。

VPC主要是一个网络层面的功能,其目的是让我们可以在云平台上构建出一个隔离的、自己能够管理配置和策略的虚拟网络环境,从而进一步提升我们在AWS环境中的资源的安全性。

每个专有网络都由至少一个私网网段、一个路由器和至少一个交换机组成。

HADOOP

Hadoop是一个由Apache基金会所开发的分布式系统基础架构。

hadoop生态圈中 各个组件的作用描述:

(1)HDFS:就是一个文件系统,可以存储海量的数据。

(2)mapreduce:从海量的数据中,通过一定的算法,计算出有用信息。

(3)HIVE:就是sql语句解释器,接收用户输入的sql语句,然后将该sql语句翻译成复杂的mapreduce程序,并发布到mr集群中进行运算,也是计算出有用的信息。

(4)HBASE:mysql是基于linux/window的文件系统的数据库,而HBASE就是基于HDFS文件系统的数据库。

(5)flume:就是一个水泵,将水从一个源水坑,抽到到另一个目的水坑中。当然flume抽的是 “数据”。将数据从一个文件中抽取到另一个文件中。

(6)sqoop:将hdfs文件系统的文件,导出到linux文件系统的文件中。就像“豌豆荚”应用程序,实现 android系统与window系统之间文件的导入导出。

(7)ooize/azkaban:一个完整的业务(work)是由多个任务(task)相互配合完成的。该组件就是负责协调各个task的执行顺序。

重点组件:

HDFS:分布式文件系统

MAPREDUCE:分布式运算程序开发框架

HIVE:基于大数据技术(文件系统+运算框架)的SQL数据仓库工具

HBASE:基于HADOOP的分布式海量数据库

ZOOKEEPER:分布式协调服务基础组件

Mahout:基于mapreduce/spark/flink等分布式运算框架的机器学习算法库

Oozie:工作流调度框架

Sqoop:数据导入导出工具

Flume:日志数据采集框架

Flink

Flink是分布式、高性能、随时可以用以及准确的流处理应用程序打造的开源流处理框架

分布式

分布式计算是一门计算机科学,它研究如何把一个需要非常巨大的计算能力才能解决的问题分成许多小的部分,然后把这些部分分配给许多计算机进行处理,最后把这些计算结果综合起来得到最终的结果。

GDPR

《通用数据保护条例》(General Data Protection Regulation,简称GDPR)为欧洲联盟的条例,前身是欧盟在1995年制定的《计算机数据保护法》

Airflow

Airflow 是一个使用 python 语言编写的 data pipeline 调度和监控工作流的平台。 Airflow 是通过 DAG(Directed acyclic graph 有向无环图)来管理任务流程的任务调度工具, 不需要知道业务数据的具体内容,设置任务的依赖关系即可实现任务调度。

这个平台拥有和 Hive、Presto、MySQL、HDFS、Postgres 等数据源之间交互的能力,并且提供了钩子(hook)使其拥有很好地扩展性。 除了一个命令行界面,该工具还提供了一个基于 Web 的用户界面可以可视化管道的依赖关系、监控进度、触发任务等。

大数据流程

数据采集传输-->数据处理-->数据存储-->数据应用

数据采集传输

Sqoop:离线数据传输工具。主要用于Hadoop与传统数据库之间的数据传递,是双向的。

Flume:实时数据采集的开源框架。可以收集诸如日志、时间等数据并集中存储起来供下游使用。

Kafka、RabbitMQ、ActiveMQ、ZeroMQ:一般Flume采集数据的速度与下游处理的速度通常不同步,因此实时平台架构都会用一个消息中间件来进行缓冲。Kafka应用最为广泛。

数据处理

MapRedu:(批处理)核心计算模型,将处理大数据的能力赋予了普通员工

Hive:(批处理)进一步将处理和分析大数据的能力赋予了实际的数据使用人员

Spark:前面两者均有数据查询的延迟。Spark可以满足数据及时查询和迭代分析的需求。

Storm:(流处理)不同于前三者的离线和准实时数据处理,而是实时处理数据的主要工具

Flink:同时面向分布式实时流处理和批量数据处理的开源数据平台。

Beam:比Flink更进了一步,统一大数据处理范式和标准。

数据存储

HDFS:提供了对文件操作和存储的支持。

HBase:构建在HDFS上的分布式、面向列族的存储系统。其中的数据都是字符串,没有类型。

数据应用

Drill:快速高效的大数据分布式查询引擎。

R语言:开源的数据分析解决方案。有很强的统计功能和互动性。

TensorFlow:基于数据流图的处理框架。

数据埋点

再额外正常功能逻辑上添加针对性的逻辑统计。即期望的事情是否发生,发生后应当记录哪些信息。前后端工程师要进行针对性的埋点才能满足有关的分析需求。

SQL处理流程——重点介绍SQL在分布式环境下的处理

SQL是很多系统都支持的接口,应用广泛。

One SQL rules big data all!

SQL的处理流程

SQL-->(Parser)-->AST-->(Analyzer)-->Logical Plan-->(Optimizer)-->Physical Plan-->(Executor)

屏幕截图 2022-07-29 170932.png

Parser

String --> AST(抽象语法树abstract syntax tree)

词法分析——拆分字符串

语法分析——将token组成AST node,最终得到一个AST

Analyzer and Logical plan

连接器:使用TCP加密的ssl通信协议,管理连接,控制最大连接量,检测连接时长,权限验证(账号密码等),优先查询缓存(两次同样的select之间有更新操作,查询缓存会清空) 解析器:和编译器的角色一样,要生成语法树,解析SQL词法以及语法分析 优化器:生成SQL的执行计划以及当前SQL相应的索引的选择(explain可查看) 执行器:调用存储引擎相应的API接口进行数据的读写操作 存储引擎:花费磁盘I/O读写磁盘数据,构建B+树索引,事务日志(undo log/redo log),锁机制,隔离级别…