Oceanbase是什么?
OceanBase 企业版是一款完全自主研发的企业级原生分布式数据库,在普通硬件上实现金融级高可用,首创”三地五中心”城市级故障自动无损容灾新标准,刷新了 TPC-C 标准测试,单集群规模超过 1500 节点,具有云原生、强一致性、高度兼容 Oracle/MySQL 等特性。
核心特性
系统概念
OceanBase 集群、Zone 和 OBServer
一个集群由若干个 OBServer 节点组成,这些 OBServer 节点分属于若干个区(Zone),每个节点属于一个区。区是一个逻辑概念,表示集群内具有相似硬件可用性的一组节点,它在不同的部署模式下代表不同的含义。例如,当整个集群部署在同一个数据中心(IDC)内的时候,一个区的节点可以属于同一个机架,同一个交换机等。当集群分布在多个数据中心的时候,每个区可以对应于一个数据中心。每个区具有 IDC 和地域(Region)两个属性,描述该区所在的 IDC 及 IDC 所属的地域。一般地,地域指 IDC 所在的城市。区的 IDC 和 Region 属性需要反映部署时候的实际情况,以便集群内的自动容灾处理和优化策略能更好地工作。
资源池和租户
集群的多个服务器组成了一个大的资源池,管理员会根据各个租户的要求,创建与之对应的虚拟资源池给租户使用,资源池包括指定规格的 CPU、内存、存储等。为了避免租户之间争抢资源,租户之间的资源相互隔离,内存是物理隔离、CPU 是逻辑隔离。
租户是一个逻辑概念。在 OceanBase 数据库中,租户是资源分配的单位,是数据库对象管理和资源管理的基础,对于系统运维,尤其是对于云数据库的运维有着重要的影响。租户在一定程度上相当于传统数据库的”实例”。租户之间是完全隔离的。在数据安全方面,OceanBase 数据库不允许跨租户的数据访问,以避免用户的数据资产被其他租户窃取。在资源使用方面,OceanBase 数据库表现为租户”独占”其资源配额。总体上来说,租户(tenant)既是各类数据库对象的容器,又是资源(CPU、Memory、IO 等)的容器。
数据分区和分区副本
OceanBase 数据库参考传统数据库分区表的概念,把一张表格的数据划分成不同的分区(Partition)。在分布式环境下,为保证数据读写服务的高可用,OceanBase 数据库会把同一个分区的数据拷贝到多个机器。不同机器同一个分区的数据拷贝称为副本(Replica)。同一分区的多个副本使用 Paxos 一致性协议保证副本的强一致,每个分区和它的副本构成一个独立的 Paxos 组,其中一个分区为主副本(Leader),其它分区为从副本(Follower)。主副本具备强一致性读和写能力,从副本具备弱一致性读能力。
Mysql兼容性对比
与 MySQL 数据库对比,OceanBase 数据库暂不支持空间数据类型,其他类别的数据类型支持情况是等于或大于 MySQL 数据库的
SQL语法
select
-
支持大部分查询功能,包括支持单、多表查询;支持子查询;支持内联接、半联接以及外联接;支持分组、聚合;常见的概率、线性回归等数据挖掘函数等。
-
支持对多个
SELECT
查询的结果进行UNION
、UNION ALL
、MINUS
、EXCEPT
或INTERSECT
等集合操作。 -
支持通过如下方式查看执行计划:
EXPLAIN [explain_type] dml_statement; explain_type: BASIC | OUTLINE | EXTENDED | EXTENDED_NOADDR | PARTITIONS | FORMAT = {TRADITIONAL| JSON} dml_statement: SELECT statement | DELETE statement | INSERT statement | REPLACE statement | UPDATE statement
-
不支持
SELECT ... FOR SHARE ...
语法。
insert
-
支持单行和多行插入,以及指定分区插入。
-
支持
INSERT INTO ... SELECT ...
语句。 -
不支持直接对子查询进行插入操作。
update
-
支持单列和多列更新。
-
支持使用子查询。
-
支持集合更新。
-
不支持直接对子查询进行更新值操作。
delete
-
支持单表和多表删除。
-
不支持直接对子查询进行删除操作。
truncate
-
支持完全清空指定表。
-
不支持在进行事务处理和表锁定的过程中操作。
字符集和字符序
OceanBase 数据库兼容 MySQL 数据库的部分字符集和字符序,具体支持情况如下:
-
字符集:binary、utf8mb4、gbk、utf16 和 gb18030。
-
字符序:utf8mb4_general_ci、utf8mb4_bin、binary、gbk_chinese_ci、gbk_bin、utf16_general_ci、utf16_bin、utf8mb4_unicode_ci、utf16_unicode_ci、gb18030_chinese_ci 和 gb18030_bin。
函数
与 MySQL 数据库对比,OceanBase 数据库的 MySQL 模式不支持如下函数:
-
日期时间函数:
ADDTIME()
、DAY()
和DAYNAME()
。 -
字符串函数:
CHARACTER_LENGTH()
、FROM_BASE64()
、LOAD_FILE()
、MATCH()
、OCTET_LENGTH()
、SOUNDEX()
和TO_BASE64()
。 -
XML 函数:
ExtractValue()
和UpdateXML()
。 -
加密和压缩函数:
COMPRESS()
、RANDOM_BYTES()
、SHA1(), SHA(
)、SHA2()
、UNCOMPRESS()
、UNCOMPRESSED_LENGTH()
和VALIDATE_PASSWORD_STRENGTH()
。 -
锁定函数:
GET_LOCK()
、IS_FREE_LOCK()
、IS_USED_LOCK()
、RELEASE_ALL_LOCKS()
和RELEASE_LOCK()
。 -
其他函数:
MASTER_POS_WAIT()
和NAME_CONST()
。
另外,OceanBase 数据库的 MySQL 模式不支持空间分析函数和性能模式函数。OceanBase 数据库所支持的分析(窗口)函数是 MySQL 数据库的超集,即 MySQL 数据库的分析(窗口)函数都支持。
分区支持
OceanBase 数据库与 MySQL 数据库对分区的支持差异如下:
-
OceanBase 数据库支持一级分区,模板化和非模板化二级分区;MySQL 数据库不支持非模板化二级分区。
-
OceanBase 数据库的二级分区支持 Hash、Key、Range、Range Columns、List 和 List Columns 分区;MySQL 数据库的二级分区仅支持 Hash 分区和 Key 分区。
-
OceanBase 数据库支持模版化和非模版化二级分区表组;MySQL 数据库不支持非模板化二级分区表组。
备份恢复
OceanBase 数据库兼容了部分 MySQL 数据库的备份恢复特性,主要支持情况如下:
-
支持全量备份和增量备份。
-
支持备份数据的备份。
-
支持备份数据的校验。
-
仅支持热备份,不支持冷备份。
-
不支持数据库和表级的备份恢复。
存储引擎
与 MySQL 数据库基于数据块的 InnoDB 和 Myisam 引擎不同,OceanBase 数据库使用的是基于 LSM-Tree 架构的存储引擎。
分区分类
OceanBase 数据库 MySQL模式目前支持的分区类型如下:
-
Range 分区
-
Range Columns 分区
-
List 分区
-
List Columns 分区
-
Hash 分区
-
Key 分区
-
组合分区