MiniOB学习笔记-不定期更新

  MiniOB 是一个具备基础功能的项目实战型数据库,可实现数据库的部分功能

官方:https://github.com/oceanbase/miniob

1. 数据库系统概论

数据库模型

根据数据之间联系的表达方式划分:

层次数据模型

  在数据库中定义满足以下两个条件的记录以及它们之间联系的集合为层次模型:

  1. 有且只有一个结点没有双亲结点,这个结点称为根结点;
  2. 根节点以外的其他结点有且只有一个双亲结点。

网状数据模型

网状模型的数据结构主要有以下两个特征:

  1. 允许有一个以上的节点无双亲。
  2. 至少有一个节点可以有多于一个的双亲。

  从上述特征中可以看出,层次模型中子结点与双亲结点的联系是唯一的,而在网状模型中这种联系可以不唯一
  因此,在网状模型中要为每个联系命名,并指出与该联系有关的双亲记录和子记录

关系数据模型

 关系模式实际就是记录类型,包括:模式名、属性名、值域名及模式的主键。关系模型利用表的集合来表示数据和数据间的联系,在逻辑层和视图层描述数据,使用户不必关注数据存储的底层细节。
  关系模型就是现在数据库的主流模型



数据库系统架构

整个关系数据库大概分为三大块:存储、事务和 SQL

  • 存储:相当于关系数据库的数据结构

存储在工业界基本上最常见的两种基础的数据结构:哈希表、B+ 树

哈希表:可以实现 O(1) 的计算,哈希表 put/get 的性能非常快,唯一的缺陷是不支持范围scan。


B+ 树:是今天关系数据库里面用的最多的一种方式。最大的优势它可以做范围scan,并且它是一个平衡二叉树,它的读、写、删除都非常的均衡


补充:LSM-Tree
最大的特点就是它会更适合于写多读少的场
景,其核心思想就是将离散的随机写请求都转换成批量的顺序写请求,大幅度减少随机写的这种随机操作,提高写的性能

  • 事务:相当于关系数据库的算法

事务里面最核心的有四个概念:
原子性(Atomicity):事务操作要么全部成功,要么全部失败。即一旦事务出错,就回滚事务。
一致性(Consistency):一个事务只能使数据库从一个一致的状态跳到另一个一致的状态,不能存在一个中间的状态。
隔离性(Isolation):多个并发事务互相不影响,就如同多个事务串行执行一般。
持久性(Duration):事务一旦提交成功对数据库的影响就是永久的。

  • SQL:相当于关系数据库操作的描述语言,其实就是相当于接口。SQL 在数据库实现中相当于接口的实现。在数据库内部有专门一个**模块 (SQL 引擎)**来实现这一套接口。
    在这里插入图片描述

MiniOB框架

在这里插入图片描述

MiniOB线程模型

SEDA框架——线程池事件处理框架

  MiniOB使用了 SEDA 的框架,像 Resolver、优化器等在 SEDA 中都是一个个的 Stage,各个 Stage 之间通过事件来传递数据。MiniOB 的多线程能力是基于 SEDA 来做的,SEDA 本身就是支持线程池的。

  SEDA框架图:如下所示,线程池可以有多个,每个线程池可以包含多个 Stage,一个 Stage 会绑定到某一个线程池里面。每个线程池可以设置自己的线程的个数、事件队列的大小,线程池中的多个 Stage 之间是通过事件通讯的,不同的线程池之间的 Stage 也可以通过事件通讯,并且每一个线程池里面的 Stage 可以是不同的。
在这里插入图片描述
  SEDA 框架好处:可以将 Stage 进行分类,比如把处理 SQL 的分作一类,把 IO 处理的分作为一类,并把不同的分类分配到不同的线程池。——隔离性好

  Stage 模型:一个 Stage 对应一个类型的事件,事件是放在线程池事件队列中的。线程池事件指当事件队列有事件后,就将其交给对应的 Stage 来处理
在这里插入图片描述
有空可以查查具体资料(下面资料文章只是随手找了一篇阅读量相对高的贴上来):
资料1
资料2

MiniOB事件

事件生命周期

在这里插入图片描述

事件执行过程

  客户端通过网络发送一个请求到服务端,服务端在接收到消息后会创建一个消息包,并创建对应的SessionEvent。然后调用 add_event 把 SessionEvent 添加到 SessionStage 里(即线程事件队列中)(参考 net/server.cpp 中session_stage_->add_event(sev);),再放到对应的事件队列中。SessionStage 以及后续处理事件的几个
Stage,都在 SQLThreads 线程池中
  SessionStage 处理 SessionEvent 后,会创建一个 SQLStageEvent 传递给后面的 Stage后续的 Stage 都是处理这个 SQLStageEvent 的事件。如下图所示,事件经过一个流转,处理完成后返回结果给客户端
在这里插入图片描述

代码层面的具体了解

  在配置文件 etc/observer.ini 中可以很清晰的看到 MiniOB 有哪些线程池(SQL、IO 和 Default)以及 Stage。

2. 数据库的存储结构

2.1 存储器的层次结构

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
《Python学习笔记》是由皮大庆编写的一本关于Python语言学习的教材。在这本书中,作者详细介绍了Python语言的基础知识、语法规则以及常用的编程技巧。 首先,作者简要介绍了Python语言的特点和优势。他提到,Python是一种易于学习和使用的编程语言,受到了广大程序员的喜爱。Python具有简洁、清晰的语法结构,使得代码可读性极高,同时也提供了丰富的库和模块,能够快速实现各种功能。 接着,作者详细讲解了Python的基本语法。他从变量、数据类型、运算符等基础知识开始,逐步介绍了条件语句、循环控制、函数、模块等高级概念。同时,作者通过大量的示例代码和实践案例,帮助读者加深对Python编程的理解和应用。 在书中,作者还特别强调了编写规范和良好的编程习惯。他从命名规范、注释风格、代码缩进等方面指导读者如何写出清晰、可读性强的Python代码。作者认为,良好的编程习惯对于提高代码质量和提高工作效率非常重要。 此外,作者还介绍了Python的常用库和模块。他提到了一些常用的库,如Numpy、Pandas、Matplotlib等。这些库在数据处理、科学计算、可视化等领域有广泛的应用,帮助读者更好地解决实际问题。 总的来说,《Python学习笔记》是一本非常实用和全面的Python学习教材。通过学习这本书,读者可以系统地学习和掌握Python编程的基础知识和高级应用技巧,为以后的编程学习和工作打下坚实的基础。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值