数据库引擎开发以及常见数据库内部原理学习(2)

管理员,你确定其他的文章比我的更有原创性或者技术性?虽然是一个写非常简陋的NoSQL数据库的文章,虽然是基于别人的教学资料的总结,最主要的引导总结性的部分,我不好展开,原创性和技术性碾压首页上一般文章没有一点问题,移除我的文章很好玩是吗?

线索
  • 数据库调度流程

1.记录:
  1. 请求解析
    1. 请求接受
      1. 从网络上接收协议抱--网路
    2. 线程调度
      1. 调度系统资源--进程模型
    3. 解析数据
      1. 得到用户请求信息--协议
    4. 生成数据访问流
      1. 解析SQL生成访问计划--优化
  2. 请求处理--运行库
    1. 生成执行代码
      1. 通过访问计划生成可执行代码
    2. 执行代码
    3. 访问数据,写入日志
      1. 数据访问
  3. 存储访问
    1. 数据扫描--数据管理
    2. 索引扫描--索引管理
    3. 数据插入--数据管理、索引管理
    4. 数据更新--数据管理、索引管理
    5. 数据删除--数据管理、索引管理
  4. 日志访问--日志管理
    1. 记录添加
    2. 记录读取
  5. EmeraldDB功能
    1. 客户端支持多节点集群
    2. 不存表或集合的概念
    3. 数据格式是JSON,存储格式是BSON
    4. 对数据进行插入、搜索与删除
    5. 搜索必须按照_id字段
  6. EDB整体架构
    1. 通过散列算法放在指定节点
  7. EDB架构
    1. CLI--client
    2. java Driver--driver
    3. =======================
    4. 请求解析--MSG、PMD
    5. 请求处理--RTN
    6. 存储访问--DMS、IXM
  8. 客户端类图
    1. 数据库引擎开发以及常见数据库内部原理学习(2)_第1张图片
    2. 客户端吧命令发送到一个Command工厂,工厂里面再去匹配命令,而命令都是实现了ICommand接口,这个流程我觉得不是很难理解。就不多说了。
  9. 引擎类以及流程
    1. 数据库引擎开发以及常见数据库内部原理学习(2)_第2张图片
    2. PMD调用OSS层的一个函数,监听某个端口,把监听到命令转换成x给MSG,MSG把它转换成系统能识别的结构,然后调用RTN层,RTN层去调用IXM进行查询操作,最终通过DMS层完成整个数据的操作。
  10. PMD类图以及其流程
    1. 数据库引擎开发以及常见数据库内部原理学习(2)_第3张图片
    2. KRCB是内核控制块,其他控制块都是它的字块
    3. EDU的管理器,就是线程管理器
    4. EDUCB线程的状态
    5. Event线程信息
    6. Options操作选项
  11. MSG类图
    1. 数据库引擎开发以及常见数据库内部原理学习(2)_第4张图片
    2. 协议封装
  12. RTN类图
    1. 数据库引擎开发以及常见数据库内部原理学习(2)_第5张图片
    2. 一般数据库最复杂得模块,但是我们这里是简化版,东西很少,本来日志,事务回滚都是这里控制的。
  13. IXM类图
    1. 数据库引擎开发以及常见数据库内部原理学习(2)_第6张图片
    2. 索引管理器,我们这里使用hash索引,只能做精确的匹配
  14. DMS类图
    1. 数据库引擎开发以及常见数据库内部原理学习(2)_第7张图片
    2. 数据库底层文件操作,以及存储结构操作
  15. OOS类图
    1. 数据库引擎开发以及常见数据库内部原理学习(2)_第8张图片
    2. 封装系统底层的不同平台的基础操作。
    3. latch、内存操作,队列

2.简化:
  1. 一般数据库可以大致分为:请求解析,请求访问,数据访问,日志访问,四大部分!
  2. EDB的客户端是一个基于工厂模式的请求转发架构
  3. PMD是引擎的线程调度模块
  4. MSG是引擎的协议模块
  5. RTN是运行支撑模块
  6. IMX是hash索引模块
  7. DMS是文件操作模块
  8. OSS是跨平台基础函数模块(封装latch、内存操作、队列操作)
3.背诵:
4.思考:
  1. 数据库一门语言,它的主要操作是把操作命令转换成数据库执行命令。这里面最精彩的地方莫过于sql优化引擎对sql的优化处理,但是很可惜,我这个系列的笔记暂时不会涉及到这个方面,但是,这个是我最喜欢的部分。将来有机会我也找个机会分享这个东西!
  2. 数据库的主要模块可大体分为命令的解析,这个过程其实很复杂,甚至是数据库最复杂的部分,然后就是数据的操作,这个是最核心的模块,但是逻辑我个人并不认为是非常麻烦的。当然还有日志模块,我们这个数据库系统的日志模块是非常简单,但是,将来讲到数据库日志模块的时候,我将引申到mysql,Oracle之类的数据库,我觉得数据库的日志是个非常强大的东西,甚至数据库很多衍生产品都是基于此。
5.复习:
总结
  1. 数据库的组成部分有简单,有复杂,但是归根结底基础的操作是不变的,核心本质是不变。用王涛老师的一句话说,数据库的原理现在都是大路货了,人人都知道,数据库怎么处理和取舍才是构建一个数据库的重点。



来自为知笔记(Wiz)


你可能感兴趣的:(数据库引擎开发以及常见数据库内部原理学习(2))