为了整理思路,文章采用模拟2人对话方式,如有误,欢迎留言。

风和日丽下午,小王与老王在咖啡馆相遇了,

小王:我想学习oceanbase,但是笔记本配置低,最新的4.x至少8G内存,不方便安装了,及时安装了也无法长时间运行?更别说编译了。

老王:咱们对学习下个定义

  • 如果业务开发人员,关心的是怎么写sql,可用使用OB Cloud 云数据库 30 天免费试用,先别考虑30是否太短。用完30天在说,实在不行回退到msql,等待按照流量付费方式。

  • 如果源码爱好者,可用gitpod在线看看代码,不要担心代码没有经过充分测试自觉不放心,pr会经过官方自动化测试用例,更加关键是设计方案,代码流程 甚至代码规范。

  • 如果万能DBA 考虑更多。。。咱不是DBA 不考虑这些东西。

    小王:

    image-20240926194315902

    目录结构

    sql 目录

    sql 里有 parser、resolver、rewrite、optimizer、executor、dtl、code_generator、engine、plan_cache、session 等。

    • parser:SQL 语法解析
    • resolver:SQL 语义解析
    • rewrite:SQL 重写
    • optimizer:优化器
    • execuctor:执行器
    • dtl:数据传输层
    • code_generator:由逻辑执行计划生成物理执行计划
    • engine:各种物理算子的实现
    • plan_cache:物理执行计划缓存
    • session:数据库会话管理

storage 目录

storage 里有 blocksstable、compaction、gts、memtable、replayengine、transaction 以及 storage 目录本身的代码文件。

  • blocksstable:包括存储格式、各种缓存等
  • compaction:LSM-Tree 存储中 compaction 相关的逻辑
  • gts:全局时间戳实现,主要用于提供全局事务版本号
  • memtable:LSM-Tree 引擎中 memtable 的实现
  • replayengine:redo 日志回放的实现
  • transaction:事务处理相关
  • storage 目录本身的代码:基于上述代码提供读写等服务

rootserver 目录

rootserver 目录包括 backup、restore、virtual_table 和 rootserver 目录本身的代码

  • backup:备份中 RootService 管理部分
  • restore:恢复中 RootService 管理部分
  • virtual_table:RootService 相关的虚拟表,是 OceanBase 中将内存中信息通过数据库表格方式展示的手段
  • rootserver:包含了 Schema 元数据管理、路由信息管理、负载均衡、机器管理、资源规格管理等

observer 目录

observer 目录包括 omt、virtual_table、observer 目录本身的代码

  • omt:ObServer 单机租户管理
  • virtual_table:ObServer 级别的虚拟表
  • observer 目录本身的代码:一些 ObServer 级别的服务,例如 ObServer 的启动,路由表的汇报等

election是分布式选举模块,它是比较独立的,因为在运行时选举不出1号leader的话系统所有组件都不工作。它是独立于paxos协议的。该选举协议要求各节点时钟同步。clog最初的意思是commitlog,现在成了专有词汇,特指OB的事务redo日志。paxos的实现也在这个目录下。archive是日志归档组件,备份恢复依赖其功能。

rootserver目录是OB集群总控服务。这个命名是错的,准确说是rootservice,它不是独立进程,而是某些observer内部启动的一组服务。(细心的读者可以看看OB 0.4开源代码:)集群管理和自动容灾,系统自举,分区副本管理和负载均衡,以及DDL的执行都在这个组件中。

share目录是被强行从“母体”oblib/src/common中剥离出来的公共类,所以它们的namespace是common而不是share也就可以理解了。

sql就是sql。storage就是存储引擎。事务管理位于storage/transaction下。

observer是所有组件的“总装车间”,入口是ob_server.h和ob_service.h。MySQL协议层的命令处理入口在observer/mysql。

election 目录

包含了 PAXOS 选主相关的实现。

clog 目录

包含了 PAXOS 相关的实现。、

https://www.oceanbase.com/docs/community-observer-cn-10000000000901312

将日志服务抽象为 “Paxos Backed Append Only Log File System”,简称 Palf。

**本篇论文创新性地提出并阐述了分布式日志系统 PALF(Paxos-backed Append-only Log File System),该日志系统满足事务系统 WAL 的功能需求,实现事务的原子性与持久性,保障事务高性能;同时基于 Paxos 协议,支撑分布式系统的高可用、高可靠能力。**具体而言,本篇论文的主要贡献与成果包括:

Vol:17 No:12 → PALF:分布式数据库的复制预写日志记录https://vldb.org/pvldb/vol17/p3 745-xu.pdf

参考

  • [1]万字解析:从 OceanBase 源码剖析 paxos 选举原理

https://zhuanlan.zhihu.com/p/630468476

  • [2] 开源数据库OceanBase代码导读

https://www.zhihu.com/people/yang-zhi-feng-79/posts?page=2

http://oserror.com/uncategorized/yuque/OceanBase%E4%BB%A3%E7%A0%81%E5%AF%BC%E8%A7%88/

PALF: Replicated Write-Ahead Logging for Distributed Databases

沟通步骤

  1. 准备一个图片,一段话,可以放在三页doc,三页ppt 描述你方案

    一、这个技术出现的背景、初衷和要达到什么样的目标或是要解决什么样的问题

    二、这个技术的优势和劣势分别是什么

    三、这个技术适用的场景。任何技术都有其适用的场景,离开了这个场景

    四、技术的组成部分和关键点。

    五、技术的底层原理和关键实现

    六、已有的实现和它之间的对比

  2. 反馈:鸡蛋里挑骨头,经过客户,领导 ,公司认证,做事情价值和意义。听到否定愤怒反对 说明自己对这个事情还不了解。

  3. 最后融合别人建议,然后完善你项目