兹拉坦在 OceanBase 社区公众号上,曾用一篇 《OceanBase PoC 经验总结(二)—— AP 业务》对庆涛大佬的 PoC 系列文章狗尾续貂。
文中在 “表结构设计” 部分,反复提到 “堆表”,并简单介绍了下索引组织表和堆表的区别和使用场景。
推荐大家在学习本期课程之前,先行阅读上面这篇公众号文章~
背景
因为:仓老师为了独宠社区版的用户,优先在社区版的 MySQL 租户下支持了堆表能力(商业版的 Oracle 租户暂不支持堆表)。
所以:在本期实战营活动的感恩节特刊中,也特批仓老师插队,优先于下期《OceanBase 标量 / 向量 / 全文混合搜索能力》,提前为大家介绍 OceanBase AP 场景下最常见的堆表。
最后,特别感恩堆表的研发同学 —— 澜翊,专门为社区用户撰写了本期实战营的课程内容~
在本期课程开始之前,先附上一个堆表和索引组织表的示意图(图中蓝色表示同属于具体一个用户的数据,红色表示同属于一天的数据),摘自: 《OceanBase PoC 经验总结(二)—— AP 业务》。
- 按时间聚集(堆表默认):

- 按用户聚集(索引组织表,主键为 user):

- 按时间聚集 + 分区:
在常见的 AP 数据库中,有一些是通过 clustered key 进行数据聚集,还有个别的数据库数据聚集方式相对复杂,会分成很多层次。
因为不同数据库的数据聚集方式可能都有一些出入,所以把某些 AP 数据库里的索引直接平迁到 OceanBase 里作为主键,可能并不合适。
需要先理解原数据库的数据聚集方式,以及分片是怎么拆到多个机器上的,否则在进行数据迁移时,可能会出问题。
边学边练,效果拔群
- 在线实验地址:体验 OceanBase AP 场景下堆表
- 课后小测地址:【DBA 实战营】OceanBase 堆表组织表
小提示:
- 这期实验环境还是比较特殊,默认使用的租户竟然是 sys……不过影响不大,大家要注意在课后小测最后一题里执行
select GetKey('你的论坛用户名');获取密钥前,需要通过执行alter system change tenant mysql_tenant;把 sys 租户切换到普通用户租户,或者断连接后再通过obclient -h127.0.0.1 -P2881 -uroot@mysql_tenant -A -Dtest连接到普通用户租户。- 需要先登录 OceanBase 账号,才能初始化屏幕右边的实验环境进行实验。
- 在实验环境里,干什么都可以。大家不要受限于屏幕左边的实验手册,可以天马行空地做一些你感兴趣的事情,或者验证一些你对 OceanBase 官网文档的疑问、以及自己的猜想等等。
- 欢迎大家平时在学习 OceanBase 的过程中,也都能充分利用在线体验页面为您提供的一些实验环境,来体验 OceanBase 中您感兴趣的新特性。
希望大家都能够积极参与上面的在线体验,并通过课后小测。这是我们能够持续为大家更新《DBA 实战营(第三季)》课程内容的最大动力~
本期课程的课程文档,依然有较多的 SQL 和 SQL 执行结果,如果大家觉得 PDF 格式已经到了影响阅读的程度,欢迎来这个公网语雀地址进行阅读~
文档地址:https://oceanbase.yuque.com/org-wiki-obtech-vh7w9r/zlatan_notes/wqkgafpzspv6mbnv
What’s more?
看到这个帖子的评论区有老师希望了解 OceanBase 中堆表的实现原理,个人理解,对原理感兴趣的老师们,可以自行在实验环境里通过元数据表分析出个八九不离十(可以参考《临时表》 这期通过元数据信息倒推实现原理的方式)。
最后,特别对 @ob青松 老师的回复表示感谢!
















