OceanBase 数据库存储的读写分离的架构
网站编辑2022-10-14 14:14:19644
OceanBase 数据库采用了一种读写分离的架构,把数据分为基线数据和增量数据。其中增量数据放在内存里(MemTable),基线数据放在SSD盘(SSTable)。对数据的修改都是增量数据,只写内存。所以DML是完全的内存操作,性能非常高。读的时候,数据可能会在内存里有更新过的版本,在持久化存储里有基线版本,需要把两个版本进行合并,获得一个最新版本。同时在内存实现了Block Cache和Row cache,来避免对基线数据的随机读。

OceanBase本质上是一个基线加增量的存储引擎,跟关系数据库差别很大,同时也借鉴了部分传统关系数据库存储引擎的优点。
传统数据库把数据分成很多页面,OceanBase也借鉴了传统数据库的思想,把数据分成很多2MB为单位的宏块。合并时采用增量合并的方式,OceanBase的合并代价相比LevelDB和RocksDB都会低很多。另外,OceanBase通过轮转合并的机制把正常服务和合并时间错开,使得合并操作对正常用户请求完全没有干扰。
由于OceanBase采用基线加增量的设计,一部分数据在基线,一部分在增量,原理上每次查询都是既要读基线,也要读增量。为此,OceanBase做了很多的优化,尤其是针对单行的优化。OceanBase内部除了对数据块进行缓存之外,也会对行进行缓存,行缓存会极大加速对单行的查询性能。对于不存在行的“空查”,我们会构建布隆过滤器,并对布隆过滤器进行缓存。OLTP业务大部分操作为小查询,通过小查询优化,OceanBase避免了传统数据库解析整个数据块的开销,达到了接近内存数据库的性能。另外,由于基线是只读数据,而且内部采用连续存储的方式,OceanBase可以采用比较激进的压缩算法,既能做到高压缩比,又不影响查询性能,大大降低了成本。
以上就是关于“OceanBase 数据库存储的读写分离的架构”的相关介绍,如果亲们还有什么不清楚的地方,可以直接咨询我们的在线客服!







