数据库内核基础

本文简单介绍了数据库通用的内核基础以及和分布式的一些类比

(1)经常使用数据库的疑问

经常使用数据库,有一个疑问,假如在数据库中输入select * from table,那么数据库如何把这条语句识别成可执行状态?

(2)数据库内部解析主要步骤

  1. SQL---->Parser

客户端输入一条SQL字符串后,例如select,create等语句,首先会进入Parser模块,对于Parser模块,用户输入的是一条字符串,经过Parser模块会解析成数据库能够识别的状态,它会申请结构体或者一个内存空间把字符串给存起来。

例如select * from tb1。Parser模块会把这条SQL拆分成select、*、from、tb1,然后分别存入相应的内存空间中。

目前主要的Parser主要有两个框架,分别是Yacc和Lex。

2.Parser--->Analyzer

经过Parser模块的初步解析后转换成语句,还要经过Analyzer进一步解析,例如tb1有哪些属性,tb1是分区表还是非分区表,是视图还是物化视图。这些解析都会在Analyzer模块中进行。如果Parser是语法解析器,那么Analyzer模块就是语义解析器。

3.Analyzer--->Query

经过了Analyzer模块后,会进入Query模块,Query模块会把Analyzer模块解析后的表达式或者表或者视图定义转化成内部可以识别的初步的树结构,但这只是一个初步的树还没有形成二叉树等复杂结构。

4.Query--->Optimizer

Optimizer即所谓的优化器。在数据库中输入一条语句为什么会走索引扫描,为什么两张表做join的时候为什么会走hashjoin,这些都会Optimizer中决定。优化器会决定表的连接方式比如走索引还是顺序扫描;如果是索引是走普通索引还是别的方式,是仅仅访问索引还是要访问物理表;而且优化器还会决定表的连接顺序,n张表做连接是MergeJoin、嵌套循环连接还是hash连接。优化器决定这些连接的算法有两种,动态规划算法和遗传算法。一般10张表以下的都是动态规划算法,10张表以上的基本上是遗传算法。计划生成后如果表还有分区表的话需不需要根据表的连接条件对分区进行裁剪。

5.Optimizer--->Plan

Optimizer输入的是Plan,Plan就是一个计划树,这个树是二叉的形式。

(3)一些看法

可以看到从SQL到Parser到Analyzer到Optimizer生成Plan对比Hive也是生成计划交给MapReduce来执行,因此数据库的原理都是通用的。

(4)疑问又来了,得到Plan之后呢?

执行流程如下:

得到计划后会交给执行器,首先执行器会进行初始化操作(Open),申请内存如给tc1+tc2这个表达式赋予一下函数,是用哪个函数来计算,根据tc1,tc2是int还是float分别选择不同的函数进行计算。然后交给Next,Next会向下层去要数据。数据库首先会向Access去取数据,Access里面本身是没有数据的,他会向底层存储去取数据(Storage),Storage是一个模块,但细分过后会分为sBuffer和sSF/OS,sBuffer代表一个内存块,sSF代表缓存管理文件。整个过程就是Next会向Access要一条元祖,Access没有,它会向Storage去申请,但本身Storage也没有,于是会找Buffer,Buffer会向内存中申请一段内存,然后把Buffer传入SF,SF通知文件系统打开文件,文件系统会文件通过二级制的形式拷贝到Buffer中。Buffer中的文件可能很多,但每次Access只拿8K的数据,Access经过一些计算就会把8K中的一条元祖取出交给Next,此时Next拿到元祖会计算,如果满足的话返回给用户,如果不满足会循环去取,直到取完后进入Close退出。

(5)执行器总结以及和分布式的类比

通过类比分析Executor和Access属于计算模块,而Storage输入文件存储模块,这些可以和Hadoop相类比。

(6)执行器优化考虑图

数据库内核基础

时间: 2024-10-12 14:19:21

数据库内核基础的相关文章

[转帖]Greenplum :基于 PostgreSQL 的分布式数据库内核揭秘 (上篇)

Greenplum :基于 PostgreSQL 的分布式数据库内核揭秘 (上篇) https://www.infoq.cn/article/3IJ7L8HVR2MXhqaqI2RA 学长的文章.. 姚延栋 阅读数:7142019 年 9 月 15 日 17:11 本文经授权转载自公众号 PostgreSQL 中文社区,主要介绍了 Greenplum 集群概述.分布式数据存储和分布式查询优化. 一.数据库内核揭秘 Greenplum 是最成熟的开源分布式分析型数据库(今年 6 月份预计发布的 G

PostgreSQL数据库内核分析 笔记(这本书没有怎么很好的看,主要就是一些数据结构、概念和流程的文字介绍)

PostgreSQL数据库内核分析 跳转至: 导航. 搜索 目录 1系统概述 2体系结构 3存储管理 4索引 5查询编译 6查询执行 7事务处理与并发控制 8数据库安全 9附录A 用Eclipse开发和调试 系统概述 初始化数据库:./initdb --no-locale -D ../data ./pg_ctl start -D ../data 数据库命令:initdb createuser dropuser createdb dropdb pg_dump pg_restore pg_ctl v

《C#语言和数据库技术基础》单词必备

<C#语言和数据库技术基础> 第一章1..NET Framework   框架2.sharp            尖锐3.application      应用程序4.developer        开发者5.network          网络6.build            建造,建筑7.console          控制台8.debug            调试9.namespace        命名空间10.project         项目11.solution 

.NET基础拾遗(6)ADO.NET与数据库开发基础

一.ADO.NET和数据库程序基础 1.1 安身立命之基本:SQL SQL语句时操作关系型数据库的基础,在开发数据访问层.调试系统等工作中十分常用,掌握SQL对于每一个程序员(无论是.NET.Java还是C++等)都非常重要.这里挑选了一个常见的面试题目,来热热身. 常见场景:通过SQL实现单表行列转换 行列转换时数据库系统中经常遇到的一个需求,在数据库设计时,为了适合数据的累积存储,往往采用直接记录的方式,而在展示数据时,则希望整理所有记录并且转置显示.下图是一个行列转换的示意图: ①好了,废

前端学数据库之基础操作

前面的话 SQL是一门用于访问和处理数据库的ANSI的标准计算机语言.但是,存在着很多不同版本的SQL语言,为了与ANSI(美国国家标准学会)标准相兼容,它们必须以相似的方式共同地来支持一些主要的关键词(如 SELECT.UPDATE.DELETE.INSERT.WHERE等) RDBMS指的是关系型数据库管理系统,RDBMS是SQL的基础,同样也是所有现代数据库系统的基础,比如Oracle.MySQL和Access.RDBMS中的数据存储在被称为表(tables)的数据库对象中.表是相关的数据

内核基础---AT&T汇编与x86汇编的区别

1.深入Linux内核的前提 因为以前学习过intel的x86汇编语言,所以本文就不在讲述汇编的基本语法了: 内核绝大部分的代码都是用C和汇编语言实现的,要理解内核,C语言大部分的人都已经掌握了,接下来就得首先掌握汇编知识,以便深入理解Linux内核知识!!! 2.学习Linux内核的线路 首先内核有基础部分和深入的部分,我认为应该从一个全局的角度去解读Linux内核,以便我们达到一个更加深刻的认识,从内核的整体架构--->内核源码的解读,并且在这个的过程中不断的去修改代码,编程调试是至关重要的

QT开发(四十六)——QT数据库编程基础

QT开发(四十六)--QT数据库编程基础 一.Qt SQL模块简介 1.Qt SQL模块简介 QT通过Qt SQL模块提供了对SQL数据库的支持,Qt SQL模块中的API分为三层:驱动层.SQL接口层.用户接口层. 如果要使用Qt SQL模块中的类,需要在工程文件(.pro文件)中添加QT += sql代码. 2.驱动层 驱动层为具体的数据库和SQL接口层之间提供了底层的桥梁,主要类包括Qt SQL模块中的QSqlDriver.QSqlDriverCreator.QSqlDriverCreat

基于C#的MongoDB数据库开发应用(1)--MongoDB数据库的基础知识和使用

在花了不少时间研究学习了MongoDB数据库的相关知识,以及利用C#对MongoDB数据库的封装.测试应用后,决定花一些时间来总结一下最近的研究心得,把这个数据库的应用单独作为一个系列来介绍,希望从各个方面来总结并记录一下这个新型.看似神秘的数据库使用过程.本文是这个系列的开篇,主要介绍一些MongoDB数据库的基础知识.安装过程.基础使用等方面. MongoDB是一款由C++编写的高性能.开源.无模式的常用非关系型数据库产品,是非关系数据库当中功能最丰富.最像关系数据库的数据库.它扩展了关系型

Oracle数据库迁移-基础

Oracle数据库迁移-基础 作为一个开发人员,数据库知识肯定是需要我们掌握的.但是目前公司的数据库都是有专门的DBA维护的,一般都是给我们一个环境地址,然后我们书写CRUD SQL.而且公司产品要求是可以跨数据源的,这样平时基本上都不太关心特定数据库平台的操作.结果导致自己的DB知识严重不足.今天因为一些原因,需要在外网服务器上搭建演示环境,结果需要"悲剧"的自己操作数据库. 任务:在外网服务器上搭建演示环境,包括服务器.代码.数据库.     解决方案: (1)找一个新的产品安装程