【视频】入门实战:MiniOB 概述和环境搭建 | 学习笔记

简介: 快速学习【视频】入门实战:MiniOB 概述和环境搭建

开发者学堂课程【从0到1数据库内核实战教程【视频】入门实战:MiniOB 概述和环境搭建学习笔记,与课程紧密连接,让用户快速学习知识。

课程地址https://developer.aliyun.com/learning/course/1083/detail/16070


【视频】入门实战:MiniOB概述和环境搭建


内容介绍:

一、MiniOB 介绍

二、MiniOB GitHub/Gitee 使用说明

三、MiniOB 安装与调试


一、MiniOB 介绍

为什么要造 MiniOB?

image.png

数据库系统是非常基础的组件,它有以下特点:

学习难度大,要了解非常多的知识,有很多工作经验丰富的人经常使用 mysql 系统,但即使学习使用了很多年也很少有人精通数据库系统。实现难度更大;

数据库系统涉及的知识面非常广,如果要了解或实现一个数据库系统必须对操作系统、内存、网络等知识非常精通才能构建一个比较性能好的数据库系统,这还没有涉及数据库本身领域的一些知识。现在除了单机版数据库还有很多分布式方面的多机房等相关知识,知识面很广;

上手难度大,很难针对入门做数据库;

国内数据库系统发展晚,60年代国外的数据库已经起步,国内是最近几年才开始高速发展,完全的自主产权的国内数据库更是屈指可数,高校人才培养非常少,只有很少部分的学校专门针对数据库开发来培养人才,现在几年国内的数据库厂上都在大力投入数据库领域,因此人才匮乏;

学校在研究生阶段才会开设数据库实现课程,本科只开设如何使用以及基本原理等方面的课。

基于这些背景,做了一个 MiniOB。MiniOB的愿景:

吸引更多的同学参与到数据库系统的研发;让大家有兴趣,有能力去入门做数据库系统。希望同学们通过 MiniOB 的一系列课程能学习到很多数据库的底层原理。


二、MiniOB GitHub/Gitee 使用说明

MiniOB 框架:

image.png

MiniOB 是一个有一些基础功能的小数据库,功能模块设计的比较简单,主要为了学习,而且去年才起步,有些模块不是非常完美。如上图,左边是客户单,右边是服务端,通过客户端发起命令,通过网络通信跟服务端的网络模块去通讯触发命令,服务端的网络模块收到请求后送给 Paser 模块,经过词法解析和语法解析转发给 Plan Cache,它不做处理直接丢给 Resolver 模块,它将 Paser 解析出来的语法束(转化成树状结构对它进行描述解释,解释的内容用字符串表示)进一步细化,转化成比如需要查询一张表,把表的名字转化成具体的表对象,如果查询某个字段,那么会转换成对应的字段文字。

还可以做一些提前的预检,比如查询一张表,但是这张表不存在,那么可以提前返回错误,经过 Resolver 阶段会把处理的结果放到下两层 Transformer 和 Optimizer 优化,这两个阶段在有些数据库比如 Mysql 上面成为一个模块叫做优化,这里虽然划分为两个模块,但可能不会按照这个流程来执行,会多次循环在低成本情况下找到一个最优查询方案,Transformer 会根据一些规则去转换让后面的优化器更好的转化,比如在查询表时,有一个条件是 1=1,这个规则永远是真的,那么可以直接把这个条件删掉,经过规则转换后交给优化模块来根据比如统计数据,找到更好的查询路径,比如一个查询语句根据“索引”查数据,它需要判断是直接根据“索引”去查效果更好速度更快还是通过全表遍历更快,有时即使通过“索引”去查也不一定是快的,因为可能有一些回表,比如查了索引后还要再去数据文件里看一下去找对应的数据,如果对应的数据量比较多的话可能没有全表遍历的速度快。所以在这里会做判断然后选择比较好的查询计划,给后面的执行模块,原原本本的按照查询计划进行,去访问一些索引啊,或者去记录管理,访问底层的管理模块,把结果返回给网络模块,再返回给客户端。MiniOB 蛮适合入手学习,结构清晰而且比较简单。


三、MiniOB 安装与调试

1、MiniOB 开发调试环境搭建

编译

开发环境调试现在自测过的有 Make 机器,如果使用 Windows 的话可以使用 Docker如果想自己搭环境的话,需要安装CMake https://cmake.org/download/

可以装比较新的3.20。安装GCC,版本推荐8.3以上,如果操作系统比较老建议装8.3以上的。下载代码,安装依赖库,依赖库之前介绍过。

image.png

在文档目录下面 How to build 里会介绍怎么编译依赖库直接装到系统上就可以,如图所示。

image.png

编译miniob,还提供了一个 docker 容器,Dockfile 也直接提供出来了,直接在首页上可以看到,如图

image.png

可以自己 build 或者直接在官网上面拉。就是这个 oceanbase 开头的,运行起来很简单。

image.png

调试

目录上面已经编好了编译好后,build 下有个 bin,bin 下有个 observer 和 obclient,是重点关注的文件,后台运行,如图

image.png

运行起来后生成一个文件,调试的时候觉得挺烦人的,可以使用客户端连接上来,进行简单的查询,建表,插数据,在 build 时为了方便调试,建议使用 ddebug 模式进行编译。

相关文章
|
4月前
|
存储 算法 程序员
C++基础快速入门
C++基础快速入门
85 0
C++基础快速入门
|
5月前
|
编译器 开发工具 C语言
C/C++入门001-概述环境搭建与案例
C/C++入门001-概述环境搭建与案例
|
12月前
|
运维 Kubernetes 应用服务中间件
k8s 基础&环境搭建
k8s 基础&环境搭建
156 0
k8s 基础&环境搭建
|
JavaScript C# 开发工具
(MonoGame从入门到放弃-1) MonoGame环境搭建
(MonoGame从入门到放弃-1) MonoGame环境搭建
302 0
|
存储 SQL 运维
入门介绍与部署 | 学习笔记(一)
快速学习入门介绍与部署
87 0
入门介绍与部署 | 学习笔记(一)
|
NoSQL Java Redis
简介|学习笔记
快速学习简介
50 0
|
设计模式 Java 数据库连接
10.0简介|学习笔记
快速学习10.0简介
56 0
|
监控 网络协议 Java
简介2 | 学习笔记
快速学习简介2
73 0
|
缓存 网络架构 开发者
简介1 | 学习笔记
快速学习简介1
76 0
|
前端开发 JavaScript 开发者
less-简介|学习笔记
快速学习 less-简介
77 0