成为OB贡献者(5):
文章目录
【注意】最后更新于 May 26, 2023,文中内容可能已过时,请谨慎使用。
为了整理思路,文章采用模拟2人对话方式,如有误,欢迎留言。
风和日丽下午,小王与老王在咖啡馆相遇了,
小王:我想学习oceanbase,但是笔记本配置低,最新的4.x至少8G内存,不方便安装了,及时安装了也无法长时间运行?更别说编译了。
老王:咱们对学习下个定义
-
如果业务开发人员,关心的是怎么写sql,可用使用OB Cloud 云数据库 30 天免费试用,先别考虑30是否太短。用完30天在说,实在不行回退到msql,等待按照流量付费方式。
-
如果源码爱好者,可用gitpod在线看看代码,不要担心代码没有经过充分测试自觉不放心,pr会经过官方自动化测试用例,更加关键是设计方案,代码流程 甚至代码规范。
-
如果万能DBA 考虑更多。。。咱不是DBA 不考虑这些东西。
小王:
目录结构
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
沟通步骤
-
准备一个图片,一段话,可以放在三页doc,三页ppt 描述你方案
一、这个技术出现的背景、初衷和要达到什么样的目标或是要解决什么样的问题
二、这个技术的优势和劣势分别是什么
三、这个技术适用的场景。任何技术都有其适用的场景,离开了这个场景
四、技术的组成部分和关键点。
五、技术的底层原理和关键实现
六、已有的实现和它之间的对比
-
反馈:鸡蛋里挑骨头,经过客户,领导 ,公司认证,做事情价值和意义。听到否定愤怒反对 说明自己对这个事情还不了解。
-
最后融合别人建议,然后完善你项目