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逻辑卷管理。

相关推荐
ActionTech9 天前
ChatDBA VS DeepSeek:快速诊断 OceanBase 集群新租户数据同步异常
oceanbase·deepseek·chatdba·爱可生
码农老起10 天前
从Oracle到OceanBase数据库迁移:全方位技术解析
数据库·oracle·oceanbase
OceanBase数据库官方博客10 天前
数据文件误删除,OceanBase中如何重建受影响的节点
oceanbase·分布式数据库·运维管理·实践经验
码农老起14 天前
OceanBase数据库基于脚本的分布式存储层性能深度优化
数据库·分布式·oceanbase
码农老起14 天前
万亿级数据量的OceanBase应用从JVM到协议栈立体化改造实现性能调优
jvm·oceanbase
OceanBase数据库官方博客16 天前
OceanBase 读写分离最佳实践
oceanbase·分布式数据库·读写分离·最佳实践
OceanBase数据库官方博客17 天前
网易云信架构升级实践,故障恢复时间缩至8秒
oceanbase·分布式数据库·架构选型·布道师计划
OceanBase数据库官方博客19 天前
自然语言秒转SQL—— 免费体验 OB Cloud Text2SQL 数据查询
数据库·sql·ai·oceanbase·分布式数据库·向量·text2sql
OceanBase数据库官方博客1 个月前
关于OceanBase与CDH适配的经验分享
oceanbase·分布式数据库·cdh
OceanBase数据库官方博客1 个月前
石基大商:OceanBase + Flink CDC,搭建连锁零售系统数据湖
flink·oceanbase·分布式数据库·实时数仓·零售