# 第 1 章：OceanBase 数据库概述

OceanBase 数据库是一个原生的分布式关系数据库，它是完全由阿里巴巴和蚂蚁集团自主研发的项目。OceanBase 数据库构建在通用服务器集群上，基于 Paxos 协议和分布式架构，提供金融级高可用和线性伸缩能力，不依赖特定硬件架构，具备高可用、线性扩展、高性能、低成本等核心技术优势。

OceanBase 数据库具有如下特点：

+ 高可用
  单服务器故障能够自愈，支持跨城多机房容灾，数据零丢失，可满足金融行业 6 级容灾标准（RPO=0，RTO<=30 秒）。
+ 线性扩展
  透明扩展，自动负载均衡，应用透明的水平扩展，集群规模可超过 1500 节点，数据量可达 PB 级，单表记录万亿行。
+ MySQL/ORACLE 高度兼容
  社区版兼容 MySQL 协议、语法和使用习惯，MySQL 客户端工具可以直接访问 OceanBase 数据库。MySQL 从 5.6 开始。
  企业版兼容 MySQL、ORACLE 协议。ORACLE 从 ORACLE 11g 开始兼容。需要使用 OceanBase 自己的驱动才可以访问 OceanBase 的 ORACLE 租户。
+ 高性能
  准内存级数据变更操作、独创的编码压缩技术，结合线性水平扩展，TPC-C 测试达到 7.07 亿 tpmC。
+ 低成本
  使用 PC 服务器和低端 SSD，高存储压缩率降低存储成本，高性能降低计算成本，多租户混部充分利用系统资源。
+ 多租户
  原生支持多租户构架，同一套数据库集群可以为多个独立业务提供服务，租户间数据隔离，降低部署和运维成本。

OceanBase 数据库支持支付宝的全部核心业务，以及银行、保险、证券、运营商等多个行业的数百个客户的核心业务系统。

## OceanBase 发展历史

在使用 OceanBase 之前，我们先对 OceanBase 的历史做一个简单的了解。

![oceanbase histories](https://cdn.nlark.com/yuque/0/2021/png/383093/1637564600047-4293062f-bbb2-4386-84fc-76b63b737d58.png?x-oss-process=image%2Fresize%2Cw_1500%2Climit_0)

+ 诞生 : 2010年，OceanBase 创始人阳振坤博士带领初创团队启动了 OceanBase 项目。第一个应用是淘宝的收藏夹业务。如今收藏夹依然是 OceanBase 的客户。收藏夹单表数据量非常大，OceanBase 用独创的方法解决了其高并发的大表连接小表的需求。
+ 关系数据库 : 早期的版本中，应用通过定制的 API 库访问 OceanBase 。2012年，OceanBase 发布了支持 SQL 的版本，初步成为一个功能完整的通用关系数据库。
+ 初试金融业务 : OceanBase 进入支付宝（后来的蚂蚁集团），开始应用于金融级的业务场景。2014年”双11“大促活动，OceanBase 开始承担交易库部分流量。此后，新成立的网商银行把所有核心交易库都运行在 OceanBase 上。
+ 金融级核心库 : 2016年，OceanBase 发布了架构重新设计后的1.0版本，支持了分布式事务，提升了高并发写业务中的扩展，同时实现了多租户架构，这个整体架构延续至今。同时，到 2016 年”双11“时，支付宝全部核心库的业务流量 100% 运行在OceanBase ，包括交易、支付、会员和最重要的账务库。
+ 走向外部市场 : 2017年，OceanBase 开始试点外部业务，成功应用于南京银行。
+ 商业化加速 : 2018年，OceanBase 发布 2.0 版本，开始支持 Oracle 兼容模式。这一特性降低应用改造适配成本，在外部客户中快速推广开来。
+ 登峰造极 : 2019年，OceanBase 2.2 版本参加代表 OLTP 数据库最权威的 TPC-C 评测，以 6000万 tpmC 的成绩登顶世界第一。随后，在 2020 年，又以 7亿 tpmC 刷新纪录，截止目前依然稳居第一。这充分证明了 OceanBase 优秀的扩展性和稳定性。OceanBase 是第一个也是截止目前唯一一个上榜 TPC-C 的中国数据库产品。
+ HTAP 混合负载 : 2021年，OceanBase 3.0 基于全新的向量化执行引擎，在TPC-H 30000GB 的评测中以 1526 万 QphH 的成绩刷新了评测榜单。这标志着 OceanBase 一套引擎处理 AP 和 TP 混合负载的能力取得了基础性的突破。
+ 开源开放 : 2021年六一儿童节，OceanBase宣布全面开源，开放合作，共建生态。

OceanBase 在 2021年6月份正式推出社区版并开放源码，版本从 3.1.0 开始，源码托管地址：[`https://github.com/oceanbase`](https://github.com/oceanbase)  。同时代码也同步发布到开源中国网站：[`https://gitee.com/oceanbase`](https://gitee.com/oceanbase) 。
开源的内容包括：

+ 数据库内核 OceanBase
+ 反向访问代理 `obproxy`
+ 数据库客户端命令行工具 `obclient`
+ 自动化部署工具 `OBD`
+ c 语言驱动 `obconnector-c`
+ CDC 组件 `oblogproxy` 和 `canal` 插件
+ OB监控客户端组件 `obagent` 
+ spark 插件 `obspark`（待开源）
+ 其他工具

## OceanBase 业务案例

跟其他开源数据库不一样的地方是， OceanBase 先有企业版后有社区版。先有大企业商业版案例，再有社区版案例。社区版和企业版的核心能力是一样的。

典型客户如下：

+ 自用：蚂蚁集团（包括支付宝、网商银行）。
+ 银行：中国工商银行；南京银行、东莞银行、天津银行、苏州银行；常熟农商行。
+ 保险：中国人保、中华保险。
+ 证券：招商证券、上投摩根。
+ 非金融行业：浙江移动、山东移动；数字江西；中国石化。

详细案例请查看：[`https://www.oceanbase.com/customer/home`](https://www.oceanbase.com/customer/home) 。更多行业和客户还没有在这里列出。

OceanBase 本质上是个单进程软件，独立部署，跟硬件、云平台没有绑定关系。可以部署在各个云厂商的云服务器上。OceanBase 在阿里云也有公有云数据库服务（[`https://www.aliyun.com/product/oceanbase`](https://www.aliyun.com/product/oceanbase)）。

OceanBase 在公有云上（包括在 ECS 上独立部署的）客户案例有：

+ 中华联合财险
+ 菲律宾版支付GCash
+ 印度尼西亚电子钱包 DANA

## OceanBase 社区版简介

OceanBase 数据库社区版使用 [MulanPubL - 2.0 许可证](http://license.coscl.org.cn/MulanPubL-2.0/index.html) 。您可以免费复制及使用源代码。当您修改或分发源代码时，请遵守木兰协议。
OceanBase 社区版官方网站地址是： [`https://open.oceanbase.com`](https://open.oceanbase.com) 。

### 下载方法

+ 官网下载：[`https://open.oceanbase.com/softwareCenter/community`](https://open.oceanbase.com/softwareCenter/community)
+ GitHub 下载：[`https://github.com/oceanbase/oceanbase/releases/`](https://github.com/oceanbase/oceanbase/releases/)
+ 阿里云 Yum 源：[`https://mirrors.aliyun.com/oceanbase/OceanBase.repo`](https://mirrors.aliyun.com/oceanbase/OceanBase.repo)

### 支持的操作系统

OceanBase 社区版支持的操作系统包括：

+ CentOS ：推荐7.2 以后版本。
+ Debian ：推荐 9.8， 10.9 版本。
+ openSUSE ：推荐 15.2 版本。
+ OpenAnolis：推荐 8.2 版本。
+ SUSE ： 推荐 15.2 版本。
+ Ubuntu：推荐 16.04 、18.04、20.04 等版本。

### 跟MySQL 数据库的不同

OceanBase 社区版兼容 MySQL 语法功能（主要是 5.6 的绝大部分语法，部分 8.0 的新特性等），底层原理跟 MySQL 完全没有关系，不依赖开源 MySQL 组件，没有 InnoDB 引擎等。
OceanBase 自身的存储引擎相比 MySQL 的存储，空间压缩效果更明显，社区版的压缩效果可以做到 MySQL 空间的四分之一。

OceanBase 是分布式数据库集群产品，生产环境默认数据三副本，并且三副本之前同步协议不是异步同步、半同步同步技术，而是使用 Paxos 协议同步事务日志。OceanBase 集群可以跨机房跨城市部署，机器或者机房故障时，集群内部多副本自动切换，不丢数据。OceanBase 天然适合两地三中心异地容灾和多活建设。

OceanBase 集群支持多租户（也叫多实例），所有的租户按需分配，弹性伸缩，具备高可用能力，类似云数据库服务。运维人员只需要维护少数几套集群，就可以提供很多实例给业务使用，易用性非常好。

OceanBase 支持水平拆分技术，具体就是分区表，不需要分库分表，SQL 和事务对业务完全透明，功能上没有限制。分区表线性扩展性也很好，目前已知案例最大单租户节点规模是 1500 台。

OceanBase 的 SQL 引擎能力远比 MySQL 功能强大，支持 SQL 解析和执行计划缓存，支持复杂的 SQL 运算，支持大纲技术干预 SQL 执行计划等。同时一套 SQL 引擎 一个数据源 同时支持 OLTP 和 ROLAP 类型的混合场景需求。即通常说的 HTAP 能力。

### 社区版核心功能

OceanBase 社区版包含 OceanBase 企业版的所有核心功能，如下：

+ 多副本高可用、强同步能力。
+ 多租户能力。
+ 在线弹性伸缩能力。
+ 异地容灾/多活能力（包括两地三中心、三地五中心等）。
+ 分区表、复制表等分布式能力。
+ HTAP 能力。
+ MySQL 兼容性。
+ 备份恢复能力。
+ CDC 能力。

OceanBase 社区版跟企业版的差异在于企业版会包含更多高级功能。如商业特性兼容、图形化管理工具、操作审计、安全加密、高可用扩展等。有关企业版信息请查看企业版官方网站（[`www.oceanbase.com`](https://www.oceanbase.com))。

## 适合社区版的业务场景

+ MySQL 5.6/5.7 实例规模很大的场景。

MySQL 实例规模大，需要自动化运维平台。自动化运维平台在处理 MySQL 异常宕机切换和主备不一致问题时很可能需要 DBA 介入。高可用和强一致问题是MySQL 最大的风险。
OceanBase 的多租户、高可用和强一致能力可以彻底解决这个痛点。

+ MySQL 5.6/5.7 数据量非常大存储成本高的场景。

MySQL 业务数据量增长到 几T 以上时，查询和读写性能可能会下降，大表 DDL 时间变长风险增加。单机磁盘容量可能到达扩容瓶颈。
OceanBase MySQL租户的在线 DDL，数据存储高压缩比可以解决这些痛点。

+ 业务访问压力大或者变化大的场景。

业务访问压力大，基于MySQL 改造的分布式数据库中间件产品能一定程度分担业务压力和存储空间压力，但是缺乏跨节点的强一致性查询，以及需要分布式事务中间件协调事务，扩容的时候可能要数据逻辑拆分（俗称拆库拆表），运维成本高，风险高。
OceanBase MySQL 租户提供分区表的水平拆分方案，提供原生的 SQL 和事务能力，对业务透明。并且支持在线扩容和缩容，内部数据迁移异步进行，具备高可用能力，不怕扩容和缩容过程中出现故障，可以解决上面这些痛点。

+ 交易数据库上的复杂查询场景。

交易数据库上有少量复杂的查询场景，涉及到的数据量很大，传统解决方案是通过数据同步到数据仓库进行查询。OceanBase 数据库的 SQL 引擎同时满足 OLTP 和 OLAP 场景，采用经过 ORACLE 复杂业务场景检验的先进的SQL优化器技术，能支持复杂的SQL优化和高效执行。因此可以在交易数据库上直接做复杂查询，减少不必要的数据同步。此外，OceanBase 还提供不同程度的读写分离技术来控制复杂查询对交易场景的影响。

其他更多场景待实践总结，敬请关注。

## 如何联系我们

欢迎广大 OceanBase 爱好者、用户和客户有任何问题联系我们反馈：

+ 企业版官网：[`https://oceanbase.com`](https://www.oceanbase.com) 。
+ 社区版官网：[`https://open.oceanbase.com`](https://open.oceanbase.com) 。
+ 社区版项目网站提 `Issue`：[`https://github.com/oceanbase/oceanbase/issues`](https://github.com/oceanbase/oceanbase/issues) 。
+ 钉钉群：群号 `33254054` 。
