内核入门第一期 | 成为内核开发者的第一步:搭建研发环境

2024年 5月 7日 55.3k 0

OceanBase 为培养数据库内核开发者而举办的OceanBase数据库大赛开幕在即,为了让你在大赛中发挥更好的表现,OceanBase 免费打造了开发者训练营「从0到1数据库内核实战教程」(非参赛者也可报名学习)。该教程从 MiniOB 入门到 OceanBase 进阶,为期两个月、共7节课的线上学习之旅将带你系统化地了解数据库理论知识,循序渐进地深入实践场景,带你掌握数据库内核开发并提升你的数据库实践能力。8月11日 19:30 第一期「从0到1数据库内核实战教程」即将和大家见面,赶快行动吧!

本期教程将会为大家介绍数据库系统概述、OceanBase 架构和 MiniOB/OceanBase 开发环境搭建。

本期能帮你解决什么问题?

如果你是数据库零基础,赶上车,老司机带你快速 Get 数据库内核知识!

如果你已经学习了数据库理论知识,却苦于没机会在真实企业级环境中动手实践过,那你更不能错过在「从0到1数据库内核实战教程」中动手实践企业级应用的机会。



此外,MiniOB 和 OceanBase 内核源代码也已备好,等你解构,并带你了解企业级分布式数据库的整体架构和模块组成,以及一些关键数据的结构和方法。真正从理论到实践,由浅入深地带你掌握数据库内核开发。赶快扫描下方海报中的二维码报名,和讲师进行互动吧!

内核入门第一期 | 成为内核开发者的第一步:搭建研发环境-1

直播内容抢“鲜”知

数据库系统概述

数据库管理系统的组成

DBMS(数据库管理系统) 允许用户创建数据库并对数据库中的数据进行查询和修改,同时提供故障时的数据恢复功能和多用户同时访问时的并发控制功能。

如图是一个 DBMS 的内部结构示意图。其中单线框表示系统模块,双线框表示内存中的数据结构,实线表示控制流+数据流,虚线表示数据流。该图反映了 DBMS 的几大主要功能的处理流程,即数据定义、数据操纵和事务管理,这些功能均依赖底层的存储管理及缓冲区管理组件提供对磁盘中数据的访问支持。

内核入门第一期 | 成为内核开发者的第一步:搭建研发环境-2

数据库模型和语言

关系模型采用的数据结构称为关系。在关系模型中,数据库中的全部数据及数据间的联系都用关系来表示。关系是一个无序的元组集合,每个元组由一组属性值构成,表示一个实体。一个有n个属性的关系称为n元关系。由于关系中的元组是无序的,因此DBMS可以采用任何它希望的方式存储它们,以便进行优化。

SQL 是关系数据库的标准语言,它是1974 年由Boyce和Chamberlin提出的,最初叫 Seque(Structured English Query Language), 并在IBM公司研发的关系数据库管理系统原型System R上实现,后改名为SQL(Structured Query Language)。SQL是一种通用的、功能极强的关系数据库语言,其功能不仅仅是查询,还包括数据库模式创建、数据库数据的插入与修改、数据库安全性完整性定义与控制等一系列功能。但是,数据查询仍然是SQL中最重要、也最具特色的功能。

MiniOB 概述和编译环境搭建

MiniOB 概述

MiniOB 设计的目标是让不熟悉数据库设计和实现的同学能够快速地了解与深入学习数据库内核,期望通过相关训练之后,能够对各个数据库内核模块的功能与它们之间的关联有所了解,并能够在使用数据库时,设计出高效的 SQL。MiniOB 诸多模块做了简化,比如不考虑并发操作。 注意:此代码仅供学习使用,不考虑任何安全特性。

MiniOB 调试

  1. 首先在自己的 GitHub 中创建一个新的代码库。
  2. 拉取 MiniOB 官方仓库代码到自己的仓库。
# 将代码拉到本地
git clone https://github.com/oceanbase/miniob.git

# 进入到 miniob 目录,删除 .git 目录,清除已有的 git 信息
cd miniob
rm -rf .git

# 重新初始化 git 信息,并将代码提交到自己的仓库
git init
git add .
git commit -m 'init'  # 提交所有代码到本地仓库

# 将代码推送到远程仓库
git remote add origin https://github.com/hnwyllmm1/miniob.git # 注意替换命令中的信息为自己的仓库信息
git branch -M main
git push -u origin main
  1. 调试 MiniOB

调试 C / C++ 程序,常用的有两种方式,一是通过打印日志进行调试,二是借助 GDB 调试器进行调试。通过调试程序,可以熟悉程序执行的每一步细节,不仅可以定位问题,也可以用来熟悉代码,增加编程能力。

OceanBase 概述和研发环境搭建

OceanBase 架构和基本介绍

内核入门第一期 | 成为内核开发者的第一步:搭建研发环境-1

OceanBase 的一个集群由若干个节点组成。这些节点分属于若干个区(Zone),每个节点属于一个区。区是一个逻辑概念,表示集群内具有相似硬件可用性的一组节点,它在不同的部署模式下代表不同的含义。例如,当整个集群部署在同一个数据中心(IDC)内的时候,一个区的节点可以属于同一个机架,同一个交换机等。当集群分布在多个数据中心的时候,每个区可以对应于一个数据中心。每个区具有 IDC 和地域(Region)两个属性,描述该区所在的 IDC 及 IDC 所属的地域。一般地,地域指 IDC 所在的城市。区的 IDC 和 Region 属性需要反映部署时候的实际情况,以便集群内的自动容灾处理和优化策略能更好地工作。

在 OceanBase 中,一个表的数据可以按照某种划分规则水平拆分为多个分片,每个分片叫做一个表分区,简称分区(Partition)。某行数据属于且只属于一个分区。分区的规则由用户在建表的时候指定,包括 hash、range、list 等类型的分区,还支持二级分区。例如,交易库中的订单表,可以先按照用户 ID 划分为若干一级分区,再按照月份把每个一级分区划分为若干二级分区。对于二级分区表,第二级的每个子分区是一个物理分区,而第一级分区只是逻辑概念。一个表的若干个分区可以分布在一个区内的多个节点上。

为了能够保护数据,并在节点发生故障的时候不中断服务,每个分区有多个副本。一般来说,一个分区的多个副本分散在多个不同的区里。多个副本中有且只有一个副本接受修改操作,叫作主副本(Leader),其他叫作从副本(Follower)。主从副本之间通过基于 Multi-Paxos 的分布式共识协议实现了副本之间数据的一致性。当主副本所在节点发生故障的时候,一个从节点会被选举为新的主节点并继续提供服务。



OceanBase 研发环境搭建

本系列主要指导开发者如何参与到 OceanBase 的研发,解决上手 OceanBase 开发过程中遇到的问题。

  1. 如何编译 OceanBase 源码
  2. 如何设置 IDE 开发环境
  3. 如何成为 OceanBase Contributor
  4. 如何 debug OceanBase
  5. 如何运行测试

8月11日 19:30,让我们准时相约「从 0 到 1 数据库内核实战教程」官方课程。手把手教你如何编译和调试 MiniOB & OceanBase。

赶快扫描下方二维码进入「OceanBase 入门到实战」群

关注课程动态,和更多小伙伴一起学习进步

内核入门第一期 | 成为内核开发者的第一步:搭建研发环境-4

为帮助大家更好地学习数据库知识,结交新的朋友

未来 OceanBase Meetup 也会走到更多的城市中

大家进群后修改自己的群昵称哦【格式:姓名-城市-职位】

相关文章

Oracle如何使用授予和撤销权限的语法和示例
Awesome Project: 探索 MatrixOrigin 云原生分布式数据库
下载丨66页PDF,云和恩墨技术通讯(2024年7月刊)
社区版oceanbase安装
Oracle 导出CSV工具-sqluldr2
ETL数据集成丨快速将MySQL数据迁移至Doris数据库

发布评论