小伙伴们看过来👀
想参加 OceanBase 数据库大赛,但苦于不知从哪里开始入手?
OceanBase 数据库大赛专门为大家设置了 7 期免费的赛前训练营「从0到1数据库内核实战教程」💪
8月11日 19:30「从0到1数据库内核实战教程」第一期直播也即将和大家见面啦!
本期直播我们邀请到了蚂蚁集团研发总监,OceanBase 开源负责人封仲淹(花名:纪君祥)、OceanBase 技术专家王运来(花名:宁封)以及 OceanBase 内核工程师王泽林(花名:官明)为大家介绍数据库系统概述、OceanBase 架构介绍和MiniOB/OceanBase 开发环境搭建。
本期直播能帮你解决什么?
如果你 0 基础,还不了解数据库,赶快报名直播,老司机带你快速 Get 经典数据库内容!
如果你在学校虽然学习了很多数据库理论知识,但却苦于没有在真实企业级环境中动手实践过,本期「从0到1数据库内核实战教程」以 OceanBase 为例,专门为大家搭建了一个企业级的应用场景!
不仅可以带你从零开始系统化地学习数据库理论知识,同时还能熟悉 MiniOB 和 OceanBase 数据库代码的整体架构和模块构成,以及一些关键数据的结构和方法。从理论到实践,带你掌握数据库内核开发,为后期深入学习数据库内核打下夯实的基础。赶快扫描海报上方二维码报名直播,和讲师进行在线互动吧!
直播内容抢“鲜”知
数据库系统概述
数据库管理系统的组成
DBMS(数据库管理系统) 允许用户创建数据库并对数据库中的数据进行查询和修改,同时提供故障时的数据恢复功能和多用户同时访问时的并发控制功能。
如图是一个 DBMS 的内部结构示意图。其中单线框表示系统模块,双线框表示内存中的数据结构,实线表示控制流+数据流,虚线表示数据流。该图反映了 DBMS 的几大主要功能的处理流程,即数据定义、数据操纵和事务管理,这些功能均依赖底层的存储管理及缓冲区管理组件提供对磁盘中数据的访问支持。
数据库模型和语言
关系模型采用的数据结构称为关系。在关系模型中,数据库中的全部数据及数据间的联系都用关系来表示。关系是一个无序的元组集合,每个元组由一组属性值构成,表示一个实体。一个有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 调试
- 首先在自己的 GitHub 中创建一个新的代码库。
- 拉取 MiniOB 官方仓库代码到自己的仓库。
# 将代码拉到本地
gitclone https://github.com/oceanbase/miniob.git
# 进入到 miniob 目录,删除 .git 目录,清除已有的 git 信息
cdminiob
rm-rf .git
# 重新初始化 git 信息,并将代码提交到自己的仓库
gitinit
gitadd .
gitcommit -m 'init' # 提交所有代码到本地仓库
# 将代码推送到远程仓库
gitremote add origin https://github.com/hnwyllmm1/miniob.git # 注意替换命令中的信息为自己的仓库信息
gitbranch -M main
gitpush -u origin main
- 调试 MiniOB
调试 c/c++ 程序,常用的有两种方式,一是通过打印日志进行调试,二是借助 GDB 调试器进行调试。通过调试程序,可以熟悉程序执行的每一步细节,不仅可以定位问题,也可以用来熟悉代码,增加编程能力。
OceanBase 概述和研发环境搭建
OceanBase 架构和基本介绍
OceanBase 的一个集群由若干个节点组成。这些节点分属于若干个区(Zone),每个节点属于一个区。区是一个逻辑概念,表示集群内具有相似硬件可用性的一组节点,它在不同的部署模式下代表不同的含义。例如,当整个集群部署在同一个数据中心(IDC)内的时候,一个区的节点可以属于同一个机架,同一个交换机等。当集群分布在多个数据中心的时候,每个区可以对应于一个数据中心。每个区具有 IDC 和地域(Region)两个属性,描述该区所在的 IDC 及 IDC 所属的地域。一般地,地域指 IDC 所在的城市。区的 IDC 和 Region 属性需要反映部署时候的实际情况,以便集群内的自动容灾处理和优化策略能更好地工作。
在 OceanBase 中,一个表的数据可以按照某种划分规则水平拆分为多个分片,每个分片叫做一个表分区,简称分区(Partition)。某行数据属于且只属于一个分区。分区的规则由用户在建表的时候指定,包括 hash、range、list 等类型的分区,还支持二级分区。例如,交易库中的订单表,可以先按照用户 ID 划分为若干一级分区,再按照月份把每个一级分区划分为若干二级分区。对于二级分区表,第二级的每个子分区是一个物理分区,而第一级分区只是逻辑概念。一个表的若干个分区可以分布在一个区内的多个节点上。
为了能够保护数据,并在节点发生故障的时候不中断服务,每个分区有多个副本。一般来说,一个分区的多个副本分散在多个不同的区里。多个副本中有且只有一个副本接受修改操作,叫作主副本(Leader),其他叫作从副本(Follower)。主从副本之间通过基于 Multi-Paxos 的分布式共识协议实现了副本之间数据的一致性。当主副本所在节点发生故障的时候,一个从节点会被选举为新的主节点并继续提供服务。
OceanBase 研发环境搭建
本系列主要指导开发者如何参与到 OceanBase 的研发,解决上手 OceanBase 开发过程中遇到的问题。
8月11日 19:30,准时相约「从 0 到 1 数据库内核实战教程」官方直播间。手把手教你如何编译和调试 MiniOB & OceanBase。
为避免错过直播,赶快扫描下方二维码进入「OceanBase 入门到实战」群
和更多小伙伴一起学习进步
为帮助大家更好的学习数据库知识,结交新的朋友
未来 OceanBase Meetup 也会走到更多的城市中
大家进群后修改自己的群昵称哦【格式:姓名-城市-职位】