OceanBase源码解读(七):带你看透虚拟表

2024年 5月 7日 65.6k 0

OceanBase源码解读(七):带你看透虚拟表-1

本节为源码解读的第七篇,将主要为大家介绍如何新建虚拟表。了解虚拟表能够理解 OceanBase 内部的模块设计,更重要的是运维和诊断需要的信息很多是通过虚拟表实现的。

前六篇可参考:

1、OceanBase 数据库源码解读(一)引言:https://open.oceanbase.com/articles/1100222

2、OceanBase 数据库源码解读(二)目录结构:https://open.oceanbase.com/articles/1100224

3、OceanBase 源码解读(三)SQL 的一生:https://open.oceanbase.com/articles/1100225

4、OceanBase 源码解读(四)分区的一生:https://open.oceanbase.com/articles/1100236

5、OceanBase 源码解读(五)事务的一生:https://open.oceanbase.com/articles/1100237

6、OceanBase 源码解读(六)租户的一生:https://open.oceanbase.com/articles/1100242

虚拟表严格说应该属于视图,是把内存数据结构映射成可以用 SQL 语句直接查询的“表”。

视图的概念:https://open.oceanbase.com/docs/community/oceanbase-database/V3.1.0/view

虚拟表的命名

虚拟表命名是以 oceanbase.__all_virtual 为前缀,从 sys 租户的 __all_table 中可以查到部分虚拟表。

注意:

  • 这些虚拟表不是公开的接口(所以也没有公开文档),不能保证跨版本兼容。因此外部应用时应使用公开的 oceanbase.v$ 视图和数据字典。
  • MySQL 租户下所有 show 语句(如 show variables),都是通过一个特殊的 SQL 改写为对对应虚拟表的 select。

如:show parameters like '%syslog%' 语句被改写为 select * from __all_virtual_parameter_stat where name like '%syslog%' 。

新建虚拟表

1.添加表定义。在 share/inner_table/ob_inner_table_schema_def.py 中定义了所有内部表(系统表)。给虚拟表预留的 ID 是10000-20000。按照里面的某个 MySQL 租户虚拟表添加。然后运行 generate_inner_table_schema.py 脚本会自动产生这个表定义相关的 C++ 代码。

OceanBase源码解读(七):带你看透虚拟表-2

2. 实现这个虚拟表内容的迭代器。每个虚拟表实现接口 ObVirtualTableScannerIterator。

当前虚拟表的实现分为两类:

  • RS 虚拟表位于 rootserver/virtual_table,展示的是 RS 特有信息。
  • observer/virtual_table 里的虚拟表展示的是每个节点上的信息。

3.在 ObVTIterCreator 的 switch-case 中根据表 ID 创建对应迭代器。

OceanBase源码解读(七):带你看透虚拟表-3

相信通过前面的介绍,大家对虚拟表有了一定的了解。

好了,这个系列的第一个练习题来了。请给 observer 新增虚拟表 __all_virtual_os_process,可以 select 出每台 observer 上的操作系统进程信息。让我们一起动起手来吧!https://github.com/oceanbase/oceanbase/discussions/290

(未完待续.....敬请期待第八篇哟)

如果您有任何疑问,可以通过以下方式与我们进行交流:

微信群:扫码添加小助手,将拉你进群哟~

OceanBase源码解读(七):带你看透虚拟表-4

钉钉群:33254054

OceanBase源码解读(七):带你看透虚拟表-5

欢迎大家一起参与社区贡献, 指南请参考看这里 :https://open.oceanbase.com/docs/community/oceanbase-database/V3.1.0/how-to-contribute

社区答疑:https://open.oceanbase.com/answer

相关文章

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

发布评论