一、前言

        OceanBase数据库是蚂蚁集团研发的分布式数据库,OceanBase 3.0 发布的同时,OceanBase 宣布正式开源,并成立 OceanBase 开源社区,社区官网同步上线,300 万行核心代码向社区开放。查看官网可查询详细说明

OceanBase数据库产品家族主要产品:

a) OceanBase数据库内核:通过Paxos协议保证了高可用性,可以兼容MySQL和Oracle,同时兼容HTAP,即它既可以用于OLTP业务,也可以用于OLAP业务。

b) OceanBase给运维者提供OCP工具平台,图形化的界面,帮助管理员更好的完成日常的集群管理、租户管理、监控警告、性能诊断等任务。

c)  OceanBase给开发者提供ODC工具平台,图形化的界面,帮助开发者更好的完成数据库连接管理、数据库对象管理、存储过程开发测试、导入导出等任务。

d)  OceanBase提供了OMS数据库迁移平台,既可以从数据库订阅数据,也可以从异构的数据库中(如DB2、Oracle、MySQL)进行数据迁移,回滚等。

Paxos协议是什么? Paxos协议超级详细解释+简单实例_凉拌灰土的博客-CSDN博客

OLTP和OLAP是什么?OLAP与OLTP的区别?_Gasing.C的博客-CSDN博客_olap和oltp的区别

OceanBase数据库的核心特性:

a)分布式事务引擎:OceanBase 数据库的分布式事务引擎严格支持事务的 ACID 属性,OceanBase 数据库通过 Paxos 协议将事务日志复制到多个数据副本来保证事务的可用性和持久性。

b)透明可扩展:OceanBase 数据库独创的总控服务和分区级负载均衡能力使系统具有极强的可扩展性,可以在线进行平滑扩容或缩容,并且在扩容后自动实现系统负载均衡,对应用透明,确保系统的持续运行。

c)高可用:OceanBase 数据库采用基于无共享(Shared-Nothing)的多副本架构,让整个系统没有任何单点故障,保证系统的持续可用。支持单机、机房、城市级别的高可用和容灾,可以进行单机房、双机房、两地三中心、三地五中心部署。经过实际测试,可以做到城市级故障 RPO=0,RTO<30 秒,达到国际标准灾难恢复能力最高级别 6 级。

d)混合事务和分析处理:OceanBase 数据库独创的分布式计算引擎,能够让系统中多个计算节点同时运行 OLTP 类型的应用和复杂的 OLAP 类型的应用,让数据库利用率最大化的同时利用多个节点的计算能力,完成对 OLTP 和 OLAP 应用的支持。

e)多租户:OceanBase 数据库采用了单集群多租户设计,天然支持云数据库架构,支持公有云、私有云、混合云等多种部署形式。

f)高兼容性:OceanBase 数据库针对 Oracle、MySQL 这两种应用最为广泛的数据库生态都给予了很好的支持。支持 MySQL 5.6 版本全部语法,支持绝大部分的 Oracle 语法和几乎全量过程性语言功能。

g)  高性能:OceanBase 数据库作为准内存数据库,通常只需要操作内存中的数据,并且采用了基于 LSM-Tree 结构的存储引擎,对于硬件更加友好,读写性能均远超传统关系型数据库。

h)  安全性:OceanBase 数据库在调研了大量企业对于数据库软件的安全需求,并参考了各种安全标准之后,实现了企业需要的绝大部分安全功能,支持完备的权限与角色体系,支持 SSL、数据透明加密、审计、Label Security、IP 白名单等功能,并通过了等保三标准测试。

i)  国产化配置:OceanBase 数据库支持全栈国产化解决方案。迄今已基于硬件整机中科可控 H620 系列、华为 TaiShan 200 系列、长城擎天 DF720 等整机,完成与海光 7185/7280、鲲鹏 920、飞腾 2000+ 等 CPU 的适配互认工作。同时,OceanBase 数据库还支持麒麟 V4、V10 和 UOS V20 等国产操作系统,并与上层中间件东方通 TongWeb V7.0、金蝶 Apusic 应用服务器软件 V9.0 等完成适配互认工作。

RPO = Recovery Point Objective  (指的是发生灾难的时候,数据最多丢失多少秒的数据)

RT0 - Recovery Time Objective    (指灾难恢复需要多长时间能够让系统重回正常运行状态。假如设置为30s,那么30s内需要恢复到正常状态)

二、系统概念篇

        OceanBase 数据库通过 OceanBase 集群来进行管理。一个 OceanBase 集群由多个 OBServer 节点组成,每个 OBServer 节点属于一个 Zone。一般情况下,各个 Zone 内的机器配置与数量保持一致,多台 OBServer 作为资源组成各个业务所需的资源池。管理员可以根据业务情况,将资源再划分成不同大小的资源池分配给租户使用,一般建议高性能要求的业务分配大资源池,低性能要求的业务分配小资源池。

OceanBase 集群、Zone 和 OBServer

        一个集群由若干个 OBServer 节点组成,这些 OBServer 节点分属于若干个区(Zone),每个节点属于一个区。区是一个逻辑概念,表示集群内具有相似硬件可用性的一组节点,它在不同的部署模式下代表不同的含义。例如,当整个集群部署在同一个数据中心(IDC)内的时候,一个区的节点可以属于同一个机架,同一个交换机等。

资源池和租户

        集群的多个服务器组成了一个大的资源池,管理员会根据各个租户的要求,创建与之对应的虚拟资源池给租户使用,资源池包括指定规格的 CPU、内存、存储等。为了避免租户之间争抢资源,租户之间的资源相互隔离,内存是物理隔离、CPU 是逻辑隔离。

数据分区和分区副本

        OceanBase 数据库参考传统数据库分区表的概念,把一张表格的数据划分成不同的分区(Partition)。在分布式环境下,为保证数据读写服务的高可用,OceanBase 数据库会把同一个分区的数据拷贝到多个机器。不同机器同一个分区的数据拷贝称为副本(Replica)。同一分区的多个副本使用 Paxos 一致性协议保证副本的强一致,每个分区和它的副本构成一个独立的 Paxos 组,其中一个分区为主副本(Leader),其它分区为从副本(Follower)。主副本具备强一致性读和写能力,从副本具备弱一致性读能力。

三、架构实战篇

原文:闲话 OceanBase 部署架构实践_OceanBase数据库官方博客的博客-CSDN博客

        OceanBase官方给出了明确的架构实践,包括资源异构的部署形态以及OB的分区副本类型的介绍、何为多租户、以及OB的容灾多活部署方案作出了详细的说明。

至此OceanBase数据库基本的逻辑及其原理有了大概的了解。

四、创建表

        创建表分为分区表和非分区表,创建非分区表是指创建只有一个分区的表,非分区就不多阐述了,可以理解为和Oracle类似,只是存到一个区域内,不做分区处理。(只针对Oracle)

分区介绍

        OceanBase 数据库可以把普通的表的数据按照一定的规则划分到不同的区块内,同一区块的数据物理上存储在一起。这种划分区块的表叫做分区表,其中的每一个区块称作分区。

如下图所示,一张表被划分成了 5 个分区,分布在 2 台机器上:

       上图分区表的每个分区还能按照一定的规则再拆分成多个分区,这种分区表叫做二级分区表。

        数据表中每一行中用于计算这一行属于哪一个分区的列的集合叫做分区键,分区键必须是主键或唯一键的子集。由分区键构成的用于计算这一行属于哪一个分区的表达式叫做分区表达式。

分区分类

OceanBase 数据库 Oracle 模式目前支持的分区类型如下:

  • Range 分区

  • List 分区

  • Hash 分区

  • 组合分区 

Range 分区

        Range 分区根据分区表定义时为每个分区建立的分区键值范围,将数据映射到相应的分区中。它是常见的分区类型,经常跟日期类型一起使用。例如:可以将业务日志表按日/周/月分区。

List 分区

        List 分区使得您可以显式的控制记录行如何映射到分区,具体方法是为每个分区的分区键指定一组离散值列表,这点跟 Range 分区和 Hash 分区都不同。List 分区的优点是可以方便的对无序或无关的数据集进行分区。

Hash 分区

Hash 分区适合于对不能用 Range 分区、List 分区方法的场景,它的实现方法简单,通过对分区键上的 Hash 函数值来散列记录到不同分区中。如果您的数据符合下列特点,使用 Hash 分区是个很好的选择:

  • 不能指定数据的分区键的列表特征。

  • 不同范围内的数据大小相差非常大,并且很难手动调整均衡。

  • 使用 Range 分区后数据聚集严重。

  • 并行 DML、分区剪枝和分区连接等性能非常重要。

组合分区

        组合分区通常是先使用一种分区策略,然后在子分区再使用另外一种分区策略,适合于业务表的数据量非常大时。使用组合分区能发挥多种分区策略的优点。

分区名字规则

        对于 List 和 Range 分区,因为在创建表的过程中就指定了分区的名字,所以名字就是当时指定的名字。

        对于 Hash 分区,创建时如果没有指定分区的名字,分区的命名由系统根据命名规则完成。具体表现为:

  • 当 Hash 分区为一级分区时,则每个分区分别命名为 p0、p1、...、pn。

  • 当 Hash 分区为二级分区时,则每个分区分别命名为 sp0、sp1、 ...、spn。

     对于模板化二级分区表,二级分区的命名规则为 ($part_name)s($subpart_name)。对于非模板化二级分区表,二级分区的分区名即为⾃定义的分区名。

创建分区表及其说明OceanBase官方文档创建一级分区表说明https://www.oceanbase/docs/enterprise/oceanbase-database-cn/V3.2.3/10000000000357035

创建分区索引及其说明

创建索引及其概述https://www.oceanbase/docs/enterprise/oceanbase-database-cn/V3.2.3/10000000000357173

 

更多推荐

OceanBase数据库入门