【视频】入门实战: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 模式进行编译。

相关文章
|
自然语言处理 数据库 开发者
MiniOB select - meta 实现解析 | 学习笔记
快速学习 MiniOB select - meta 实现解析
MiniOB  select - meta 实现解析 | 学习笔记
|
存储 关系型数据库 MySQL
深入理解MySQL索引:从原理到最佳实践
深入理解MySQL索引:从原理到最佳实践
1211 0
|
10月前
|
人工智能 弹性计算 关系型数据库
学生免费领取阿里云服务器一年的方法,以及各种活动
学生可以免费领取阿里云服务器一年,新人可获2核4G,非新人2核2G。访问链接注册并完成学生认证,领取300元无门槛优惠券,购买轻量应用服务器。此外,还有多项活动可赢取实物奖品。
3472 2
|
10月前
|
存储 Prometheus 监控
构建高可用性ClickHouse集群:从理论到实践
【10月更文挑战第27天】在数据驱动的时代,构建一个稳定、高效的数据库系统对于企业的业务发展至关重要。作为一名数据工程师,我深知数据库系统的高可用性和可扩展性对于支撑企业应用的重要性。在这篇文章中,我将分享如何构建一个高可用性的ClickHouse集群,从分布式表的设计到数据复制与分片,再到故障恢复机制,确保系统在大规模数据处理中的稳定性和可靠性。
357 0
|
数据可视化 Ubuntu Linux
PyCharm连接远程服务器配置的全过程
相信很多人都遇见过这种情况:实验室成员使用同一台服务器,每个人拥有自己的独立账号,我们可以使用服务器更好的配置完成实验,毕竟自己哪有money拥有自己的3090呢。 通常服务器系统采用Linux,而我们平常使用频繁的是Windows系统,二者在操作方面存在很大的区别,比如我们实验室的服务器采用Ubuntu系统,创建远程交互任务时可以使用Terminal终端或者VNC桌面化操作,我觉得VNC很麻烦,所以采用Terminal进行实验,但是Terminal操作给我最不好的体验就是无法可视化中间实验结果,而且实验前后的数据上传和下载工作也让我头疼不已。
|
存储 网络协议 数据安全/隐私保护
OSI七层模型 (详细讲解,看这一篇就够了)
OSI七层模型 (详细讲解,看这一篇就够了)
10727 0
|
存储 NoSQL 关系型数据库
面试官:别告诉我你管这个叫高可用
大家好。今天分享一篇写得很透彻的关于高可用的理解。以下是正文: 今天我们来聊一下互联网三高(高并发、高性能、高可用)中的高可用,看完本文相信能解开你关于高可用设计的大部分困惑
|
存储 开发工具 数据安全/隐私保护
解决Gitee或者Github出现Access denied fatal: unable to access,The requested URL returned error: 403
解决Gitee或者Github出现Access denied fatal: unable to access,The requested URL returned error: 403
4372 0
【完美解决】Github action报错remote: Write access to repository not granted.
【完美解决】Github action报错remote: Write access to repository not granted.
|
存储 SQL 缓存
一文带你了解MySQL之Adaptive Hash Index
在InnoDB体系架构图的内存结构中,还有一块区域名为:Adaptive Hash Index,翻译成中文:自适应哈希索引,缩写:AHI,它是一个纯内存结构,我们今天就来了解它。
2456 0

热门文章

最新文章