OceanBase 系统架构初探

如图,Oceanbase数据库的存储引擎基于LSM Tree(结构日志合并) 架构。

从名字上来看,说明它是基于日志,有序存放的。

动态增量数据(放在MemTable中),还有个名词时memstore,在租户中,包括memstore和KVcache。

memtable可以理解为存放的时候是基于表的存放,是一种增量的数据

如:DML操作,在OB中update 有自己的特点与PG有相同点。

在PG中做update操作会先删除再插入,但数据不会真正删除,会标记为delete状态。

OB中做update操作与PG类似,直接插入一条新的数据,然后带上一条时间戳。不会像oracle一样直接在原来的行进行修改。

如上图,数据不会一直放在内存中,会放在静态基线数据,放在SSTable(Sorted String)中,看名字就知道它在底层是以排序好的字符串的形式。

为了持久化考虑,OB的默认事务级别和oracle一样,也是RC,提交后会把日志写到redo log中,在ob中也叫clog(commit log)。

日志如何同步?

1.如果本机是leader,它会把日志落到本地,同时把日志同步到另外两个副本。

2.如果本机不是leader,会接受leader产生的redo,然后落盘。

memtable结构:

1.Row-Level:

2.Redo/MVCC

3.内存存储引擎

OB是一个准内存数据库,内存会很大,要操作这么大的内存,如何快速找到我们想要的数据?

OB中有两种方式:

1.hash 2.B树

如果DML语句是一个范围操作,就会使用B树,如果是一个单行查询,就会使用hash。

4.数据读取内存区域

select操作会怎么读取?

1.由于写内存区域(memtable)的数据是最新的,所以会先读memtable

2.如果memtable里面没有,就需要去读转储SSTable,再把数据写到Block Cache。

3.如果转储SSTable也没有,就会去找基线SSTable

Block Cache和Row Cache有什么区别?

在OB中磁盘中存放的单位是宏块------2M,类似于oracle中的extent。

在宏块底层是微块------16k。

需要做全表扫描的时候,读Block Cache即可,Block Cache适合OLAP。

ROW 我理解为像一个缓冲池,适合OLTP系统,把热点行数据缓存在ROW Cache,下次select直接访问row cache即可。

在OB中只有一个基线文件,随着合并,这个基线文件会很大。

如果SSTable所在的磁盘有2T,那么会默认分配2T*90=1.8T给到这个文件。

所以要做RAID 5不做RAID 0 并且使用lvm逻辑卷管理。

相关推荐
AllData公司负责人2 天前
AllData 可定义数据中台完成信创适配|银河麒麟 + 海光X86 CPU / 华为鲲鹏ARM CPU+ OceanBase / 人大金仓国产化环境部署落地
大数据·arm开发·数据库·人工智能·oceanbase·kingbase
隔窗听雨眠2 天前
OceanBase调优实战:从合并策略到执行计划的工程化调优体系
oceanbase
隔窗听雨眠5 天前
从存储引擎到执行计划:OceanBase高效运维的调优逻辑与工程实践
运维·oceanbase
隔窗听雨眠9 天前
从预测数据分布到设定阈值:OceanBase自动分区桌面版体验实录
oceanbase
shunwahma10 天前
MySQL 替代选型,为什么首选 OceanBase 集中式?
数据库·mysql·oceanbase
运维小斌12 天前
麒麟 V10 部署 OceanBase:故障速查与验收清单
linux·数据库·oceanbase·麒麟
云贝贝贝13 天前
白天稳如狗半夜就抖:OceanBase 合并转储把读写延迟顶了上去
数据库·sql·oceanbase
库库的数据库笔记13 天前
国产信创数据库的MySQL兼容性深度对比解析
大数据·数据库·mysql·oceanbase·政务
NineData15 天前
MySQL 迁移到 OceanBase 怎么做?NineData 全量迁移、CDC 实时同步与数据校验指南
数据库·mysql·oceanbase
运维小斌17 天前
麒麟 V10 ARM64 离线部署 OceanBase:8 步实施手册
linux·数据库·oceanbase·麒麟