一、OceanBase介绍

1、概念

OceanBase 是一个分布式数据库系统的。它是一种面向在线事务处理 (OLTP) 和在线分析处理 (OLAP) 的新型分布式关系型数据库系统,设计目标是为了解决海量数据的存储和处理问题。

2、特点

分布式架构:OceanBase 是一个分布式系统,数据存储在多个节点上,每个节点负责存储和处理部分数据。

多副本机制:OceanBase采用了多副本机制来保证数据的可靠性和高可用性。数据在多个节点上进行副本存储,即使某个节点发生故障,系统仍然可以继续提供服务。

自动化负载均衡:OceanBase 内置了负载均衡机制,能够自动调整数据的分布和负载,保证各个节点的负载均衡。

分布式事务支持:OceanBase 提供了强一致性的分布式事务支持,能够保证事务的原子性、一致性、隔离性和持久性。

存储成本低:可以发现使用OceanBase来存储数据,磁盘使用量最小,节省了存储数据的成本

3、OceanBase存储引擎

存储引擎架构

OceanBase 是一个基线加增量的存储引擎,跟关系数据库差别很大。 存储机制是LSM树(Log-Structured Merge Tree,日志结构合并树),这也是大多数NoSQL使用的存储机制。OceanBase采用了一种读写分离的架构,把数据分为基线数据增量数据,其中增量数据放在内存里(MemTable),基线数据放在SSD盘(SSTable)

LSM树的设计思想非常朴素:将数据库的DML(数据操作语言)操作,包括插入、更新、删除等增量保持在内存中,这使得写入性能相当于内存数据库,非常适合历史归档库写入频率高于读取的场景。等到积累到指定大小后,再使用归并排序的方式将内存内的数据合并追加到磁盘队尾(因为所有待排序的树都是有序的,可以通过合并排序的方式快速合并到一起)。不过读取的时候稍微麻烦,需要合并磁盘中历史数据和内存中最近修改操作,所以写入性能大大提升,读取时可能需要先看是否命中内存,否则需要访问较多的磁盘文件。 LSM Tree 架构特点:采用追加写入而非原地更新,顺序写入磁盘,合并机制压缩存储空间

多层数据压缩技术
层级压缩技术节省效果
内存(MemTable)数据在内存中即进行字典编码、差值压缩等优化减少内存占用,间接降低磁盘写入量
SSTable默认采用 Zstandard(ZSTD) 压缩算法,压缩比高达 5:1(比 MySQL 的 ZLIB 更高效)单表空间减少 60%~80%
宏块(Macro Block)按列存储(OLAP 场景)+ 列内压缩,对重复数据、NULL 值高效压缩分析场景额外节省 50%+
智能存储分层与冷热分离

OceanBase 自动将数据分为 热数据(频繁访问)和 冷数据(低频访问),通过冷热分离,整体存储成本降低 50%~70%。采用不同存储策略:

热数据:保存在高性能存储(如 SSD),采用轻量压缩。

冷数据:自动迁移到低成本存储(如 HDD 或对象存储),启用高比率压缩。

4、原子性

OceanBase分布式数据库技术要支持事务,事务拥有ACID原则,数据分布在不同节点,难点就是保证原子性,OceanBase主要使用投票机制和监督机制来保证。

投票机制 数据库采用“三副本”,也就是任何一个账户,都有一个主咖两个备胎共三份相同的数据。

举例来说:账户A的数据一定同时存在三台机器上。转账时,至少两台机器执行完毕才算转账完成,这意味着,三台机器里有一台坏掉,并不影响转账的执行。同时,三台机器之间相互实时发送“心跳信号”,如果有一台机器挂了,其他两台马上就能感觉到,处理完手头这个交易后,马上向系统发送警报,系统自动为他俩匹配一个新搭档,三台机器继续工作。而换下来那个坏机器,交给技术人员维修,修好后重新上架成为备用机器,等待进入战斗序列。也就是说,除非两台机器在同年同月同日同分同秒同毫秒坏掉,否则数据库的工作不受影响。

监督机制

监督机制其实是对两阶段提交协议(2PC)的实践,在一个操作中对多个步骤进行监督,只要有一个操作执行失败就抛异常阻止继续执行。

5.高可用

高可用是数据库的基本需求之一,传统数据库允许通过日志同步实现主备镜像;然而,由于主备镜像中主库与备库无法完全同步,因此传统数据库的高可用其实是建立在传统的高可靠服务器和高可靠共享存储之上的。

OceanBase同样使用性价比较高、可靠性略低的服务器,但同一数据保存在多台(>=3)服务器中的半数以上服务器上(例如3台中的2台,5台中的3台等),每一笔写事务也必须到达半数以上服务器才生效,因此当少数服务器故障时不会有任何数据丢失。不仅如此,传统数据库主备镜像在主库发生故障时,通常需要外部工具或人工把备库升级成主库,而OceanBase底层实现了Paxos高可用协议,在主库故障后,剩余的服务器会很快自动选举出新的主库,并继续提供服务,OceanBase数据库能做到自动切换且完全不丢数据。

二、具体使用

1.拉取OceanBase 镜像

可以使用docker安装oceanbase,OceanBase 提供官方 Docker 镜像,支持社区版(CE)和企业版(需许可证)

这里拉取的是最新社区版的镜像

2.启动 OceanBase 单机容器

拉取镜像完成后启动容器,在 OceanBase 的 Docker 镜像中,默认会同时监听 28812883 两个端口,分别对应 MySQL 协议OceanBase 原生协议。所以这里指定了两个端口,一个是MySQL的2881,一个是OceanBase默认的协议端口2883。

因为OceanBase兼容MySQL协议,使用2881端口有以下优点:

客户端兼容:可以使用MySQL的客户端来连接OceanBase,语法和操作方法与MySQL一致。

低迁移成本:如果业务原本使用 MySQL,可以无缝迁移到 OceanBase,几乎无需修改代码。

默认推荐:大多数用户通过 MySQL 协议连接 OceanBase,因为工具链和生态更成熟。

OceanBase原生协议2883端口则提供了MySQL端口无法进行操作的一些功能:

完整功能支持:某些 OceanBase 特有的高级功能(如分布式事务调试、多租户管理)可能需要原生协议。

性能优化:在特定场景下(如大规模批量写入),原生协议可能比 MySQL 协议更高效。

运维工具依赖:OceanBase 的运维工具(如 obclient、OCP)通常使用原生协议。

3.进入容器并初始化

先进入容器Shell

先输入obd cluster start进行初始化,然后输入obd cluster list查看运行状态,显示Running即成功

4.连接数据库

上面开放了2881和2883两个端口,分别可以使用MySQL客户端和OceanBase客户端obclient来进行连接

比如这里使用MySQL客户端的方式连接数据库,默认是没有设置密码的,也可以下载obclient来连接2883端口,两种连接方式的结果都是相同的,访问的都是同一个数据库实例

当然这里也可以通过IDEA或者dbeaver等方式进行连接

5.兼容MySQL说明

数据类型兼容: OceanBase的MySQL模式兼容MySQL 5.7的绝大部分数据类型,包括数值类型(如INT、BIGINT、FLOAT、DOUBLE等)、日期和时间类型(如DATETIME、TIMESTAMP等)、字符串类型(如CHAR、VARCHAR等)以及其他复杂数据类型(如ENUM、SET、JSON等)。此外,OceanBase还支持空间数据类型,这在某些特定应用场景中非常有用。

SQL语法兼容: OceanBase支持MySQL 5.7版本的大部分SQL语法,包括SELECT、INSERT、UPDATE、DELETE等基本操作,以及复杂的SQL查询,如子查询、联接操作、聚合函数等。此外,OceanBase还支持对JSON数据进行查询和操作,提供了丰富的JSON函数。

存储引擎和分区功能:OceanBase本质上是一个基线加增量的存储引擎,采用LSM树(Log-Structured Merge Tree)作为存储机制,这与传统的关系数据库存储引擎有所不同。尽管如此,OceanBase仍然提供了与MySQL相似的分区功能,支持分区表和二级分区,可以完全取代MySQL常用的分库分表方案。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐