OceanBase数据库开发和运维漫谈

本文面向OceanBase数据库的初学者,介绍了OceanBase的直观特点,从开发和运维两个视角阐述其特性和使用。开发人员可以理解OceanBase的租户、表分组、SQL兼容性等,运维人员则关注集群设计、资源分配和高可用性。OceanBase通过分区、副本和OBProxy提供高可用和弹性扩展,支持分布式事务和多活部署。
摘要由CSDN通过智能技术生成

摘要:本文是面向初次接触OceanBase数据库的开发和运维人员,介绍OceanBase数据库的直观特点(所以没有高大上的理论和复杂的技术细节)。然后再以一个实际问题为引子,逐步展现OceanBase数据库的独特魅力。


OceanBase开发和运维漫谈


目录

 

1     简介

2     开发视角看OceanBase

3     运维视角看OceanBase

4     再说分区Partition

5     数据拆分讨论

6     OceanBase部署案例介绍

7     其他

8     总结


1 简介


本文是面向初次接触OceanBase数据库的开发和运维人员介绍OceanBase数据库的直观特点所以没有高大上的理论和复杂的技术细节。然后再以一个实际问题为引子逐步展现OceanBase数据库的独特魅力。稍微注意的是为了便于理解前面介绍的特点会偏简化后面在深入展开的时候会变复杂有些地方会改变前面的结论。实际上这也是OceanBase数据库在逐步发展过程中的特点。

 

2 开发视角看OceanBase


我们假设开发人员已经接触过其他数据库如MySQL、SQL Server或者Oracle。公司如果有运维团队的话开发人员需要数据库只需要跟运维人员提个需求即可。


2.1 申请一个OceanBase数据库


开发申请数据库时需要说明业务需求。业务需求指的是预计要多大的空间、有多大的访问量、对数据库SQL响应时间要求多少等。


申请通过后开发会从运维拿到的OceanBase数据库信息是一个连接信息跟传统数据库一样这个信息包含数据库IP或者域名、端口、用户名和密码。如下


640?wx_fmt=jpeg


OceanBase的连接信息跟MySQL很像因为这个连接的协议就是兼容mysql的。用户可以通过MySQL客户端Java客户端Connector/J和通用客户端Connector/ODBC连接OceanBase。这么做是考虑到MySQL的普及性让更多人和应用能接受OceanBase。其中唯一有点不一样的是用户名的格式。如root@app_tenant#obdev 它的格式定义是用户名@租户名#OB集群名。用户名还支持另外一种格式OB集群名:租户名:用户名 。

 

2.2 租户和实例


租户tenant是OceanBase特有的概念等同于一个实例。开发拿到租户后往往不知道租户在哪台机器上。实际上租户存在某几台机器上但是不是固定的。并且也不一定独占所在机器。这些都是运维细节开发可以不关心。开发只需要理解如果把全部的机器当作一个资源池的话租户只是它的一个子集。这也是租户的本意。


上面给的数据库连接信息就是一个租户的连接信息开发人员可以当这个租户是一个独立的MySQL实例不同的是租户没有独立的进程。可以在租户里运行一些MySQL命令。如


640?wx_fmt=jpeg


640?wx_fmt=jpeg


创建一个tablegroup表分组后面用。


640?wx_fmt=jpeg


重新以用户 app_user 登录租户


640?wx_fmt=jpeg


640?wx_fmt=jpeg


所以目前可以当租户是一个MySQL实例。未来OceanBase还会支持Oracle实例模式。

 

2.3 分布式和表分组


OceanBase是一个分布式数据库但目前开发还看不出分布式体现在哪里。这个细节需要从运维视角去看后面会详细描述。这里简单的描述一下当表很多的时候分布式数据库肯定会将这些表分散存储在多个节点上。而当SQL涉及多个表连接的时候如果跨节点了对SQL的性能会有些影响。


大部分分布式系统在面临跨节点请求时性能都会有些下降。产品本身会做优化这个不说。开发在设计表的时候可以避免这个情况发生。这就是表分组的作用。


表分组是表的一个属性用于做亲和性设置。当多个表设置为同一个表分组时OceanBase在设计这些表存储分布时会尽可能的将它们分配在同一台物理机上以达到减少跨节点请求的场景。


前面的例子里创建的 tg_sbtest 就是一个tablegroup。下面设置表的tablegroup。


640?wx_fmt=jpeg


640?wx_fmt=jpeg


表分组只是OceanBase提供的一个用于干预分布式存储细节的手段。其原理后面在运维人员视角里会详细阐述。实际上OceanBase还有其他类似的干预手段区别只在于干预的范围。比如说有设置还可以控制几个租户的所有分区的位置分布。


OceanBase目标是做一个通用的数据库然而数据库性能好不好除了跟数据库产品自身的能力有关外还跟应用的设计能力有关。应用和数据库需要互相配合开发和运维也需要配合。这样应用性能才好。

 

2.4 表、分区和分区组


OceanBase的表支持分区表分区策略支持RangeHash等。一个分区表有多个分区一个非分区表可以认为是只有一个分区。


在应用层面表是存储业务数据的不可分割的最小单元。在OceanBase层面分区Partition才是存储业务数据的不可分割的最小单元。所以一个分区是不能跨机器存储一个表的不同分区是可以跨机器存储的。当然如果分区表有二级分区这里说的分区就是指那个二级分区。所以当一个业务大表的数据大小远超出单台机器的磁盘容量时OceanBase可以通过分区的方式解决这个空间难题。

 

上面表分组说会将不同表尽可能的组织在一起存储但是当这些表很大单机放不下的时候显然不合适。所以大表会做成分区表这个表分组TableGroup会细化为多个分区组PartitionGroup。不同分区表设置为同一个表分组时其对应的分区就属于同一个分区组。当然前提是二者的分区策略和分区数目保持一致。如果有人说有些业务表就是没办法按相同策略分区这个问题的处理还是要顶层设计上解决就不在这里展开了。这里说的是OceanBase提供这种能力。

 

分区更大的意义在运维和调优它也是负载均衡和高可用的最小单元。后面会详细解释。

 

2.5 SQL兼容性和执行计划


OceanBase SQL基本兼容MySQL语法部分兼容Oracle SQL语法。目前1.x版本对于函数、游标和存储过程之类都还不支持2.x版本会逐步支持。

 

OceanBase的SQL解析执行是仿照Oracle的设计去做有Plan cache执行计划是基于Cost。跟SQL和执行计划相关的v$视图OceanBase也有。这些设计奠定了OceanBase的SQL性能水平。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值