数据库-数据库基础与原理

数据库基础与原理

核心组件

进程管理器

  • 很多数据库具备一个需要妥善管理的进程/进程池,为了实现纳秒级操作,一些现代数据库使用自己的线程而不是操作系统线程

网络管理器

  • 网络I/O是个问题,尤其是对于分布式数据库,所以一些数据库具备自己的网络管理器

文件系统管理器

  • 磁盘I/O是数据库的首要瓶颈,具备一个文件系统管理器来完美处理OS文件系统甚至取代OS文件系统,是非常重要的

内存管理器

  • 为了避免磁盘I/O带来的性能损失,需要大量的内存,如果需要处理大容量内存就需要高效的内存管理器

安全管理器

  • 用于用户的验证和授权

客户端管理器

  • 用于管理客户端连接

工具

备份管理器

  • 用于保存和恢复数据

恢复管理器

  • 用于崩溃后重启数据库到一个一致状态

监控管理器

  • 用于记录数据库活动信息和提供监控数据库的工具

管理员管理器

  • 用于保存元数据,提供管理数据库、模式、表空间的工具

查询管理器

查询解析器

  • 用于检查查询是否合法

查询重写器

  • 用于预优化查询

查询优化器

  • 用于优化查询

查询执行器

  • 用于编译和执行查询

数据管理器

事务管理器

  • 用于处理事务

缓存管理器

  • 数据被使用之前置于内存,或者数据写入磁盘之前置于内存

数据访问管理器

  • 访问磁盘中的数据

数据查询的流程

客户端管理器

  • 客户端可以是一个浏览器或者一个最终用户,客户端管理器通过一系列知名的API(JDBC、ODBC、OLE-DB)提供不同的方式来访问数据库。客户端管理器也提供专有的数据库访问API

  • 连接数据库执行查询的流程

    • 管理器首先检查你的验证信息如用户名和密码,然后检查你是否访问数据库的权限,权限有DBA分配
    • 然后管理器检查是否有空闲进程来处理你的查询
    • 管理器还会检查数据库是否负载很重
    • 管理器可能需要等待一会获取需要的资源,如果等待时间达到超时时间,它会关闭连接并给出一个可读的错误消息
    • 然后管理器会把你的查询送给查询管理器来处理
    • 因为查询处理不是“不全则无”的,一旦从查询管理器得到数据,它会把部分结果保存到一个缓冲区并开始给你发送
    • 如果遇到问题,管理器关闭连接,向你发送可读的解释信息,然后释放资源

查询管理器

  • 查询流程

    • 查询首先被解析并判断是否合法
    • 然后被重写,去除了无用的操作并且加入预优化部分
    • 接着被优化以便提升性能,并被转换为可执行代码和数据访问计划
    • 然后计划被编译
    • 最终被执行
  • 查询解析器

    • 会检查sql语句的语法,如SELECT等关键字编写错误,或是WHERE写在SELECT之前会被拒绝

    • 分析查询中的表和字段,使用数据库元数据来检查

      • 表是否存在
      • 表的字段是否存在
      • 对某类字段的运算是否可能,如对一个整数使用字符串切割函数,这是不允许的
    • 检查是否有权限执行当前的语句

    • 解析过程中,sql查询被转换为内部表示

    • 如果一切正常,内部表示被送到查询重写器

  • 查询重写器

    • 目标

      • 预优化查询
      • 避免不必要的运算
      • 帮助优化器找到合理的最佳解决方案
    • 通过以下规则对查询进行检测

      • 视图合并,如果在查询中使用视图,视图会转换为它的sql代码
      • 子查询扁平化,子查询是很难优化的,因此重写器会尝试移除子查询
      • 去除不必要的运算符,比如使用了DISTINCT,如果已经有了UNIQUE约束,那么就没有必要使用DISTINCT,可去掉
      • 排除冗余的联接,如果相同的JOIN条件出现两次,比如隐藏在视图中的JOIN条件,或者由于传递产生无用JOIN都会被消除
      • 常数计算赋值,如果查询需要计算,那么在重写过程中计算会执行一次,比如where age > 10+2会转换为where age > 12
      • *分区裁剪,如果用了分区表,重写其能够找到需要使用的分区
      • *物化视图重写,如果有个物化视图匹配查询谓词的一个子集,重写器将检查视图是否最新并修改查询,令查询使用物化视图而不是原始表
      • *自定义规则,如果有自定义规则来修改查询,重写器就会执行这些规则
      • *OLAP转换,分析/加窗函数,星形连接,ROLLUP函数等等都会发生转换
  • 查询优化器

数据管理器

客户端管理器

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值