第 003 篇:OceanBase,阿里巴巴应对海量数据开发的分布式关系数据库 - 图1

随着互联网的发展和数据量的不断增加,数据库的重要性越发凸显。市面上主流的关系数据库系统(RDS)有MySQLOracleSQL Server等,这些数据库都有着一定的优点和缺点。近年来,以OceanBase为代表的分布式关系数据库渐露头角,成为了关注的焦点。

本文将对OceanBase数据库进行介绍,以让您对该数据库有个系统性的了解。

概述

OceanBase是一款由阿里巴巴集团完全自主研发的企业级原生分布式数据库,打破传统关系数据库瓶颈,实现高可用、高性能、高可扩展性、高安全性和高灵活性。

核心特性

1. 高可用

  • 支持同城/异地容灾
  • 支持多地多活

2. 高兼容

  • 高度兼容 OracleMySQL 协议
  • 提供自动迁移工具
  • 支持迁移评估反向同步,以保障数据迁移安全

3. 水平扩展

  • 透明水平扩展,支持业务快速扩容缩容
  • 准内存处理架构,实现高性能
  • 支持数千个集群节点
  • 单集群最大数据量可超过 3PB
  • 单表最大行数可达万亿级

4. 低成本

  • 基于 LSM-Tree 的高压缩引擎,降低 70% - 90% 存储成本
  • 原生多租户架构,租户间数据隔离,降低部署和运维成本

5. 实时 HTAP

支持在线实时交易及实时分析两种场景,“一份数据”的多个副本可以存储成多种形态,从根本上保持数据一致性

6. 安全可靠

  • 完全自主研发,代码级可控
  • 完备的角色权限管理体系,数据存储和通信全链路透明加密

第 003 篇:OceanBase,阿里巴巴应对海量数据开发的分布式关系数据库 - 图2

架构设计

OceanBase 数据库采用 Shared-Nothing 架构,各个节点之间完全对等,每个节点都有自己的 SQL 引擎、存储引擎、事务引擎,运行在普通 PC 服务器组成的集群之上,具备高可扩展性、高可用性、高性能、低成本、与主流数据库高兼容。

第 003 篇:OceanBase,阿里巴巴应对海量数据开发的分布式关系数据库 - 图3

安装部署

以下是使用容器方案快速安装部署OceanBase的简要步骤:

1. 获取 OceanBase 数据库镜像

  1. [sudo] docker pull oceanbase/oceanbase-ce

上述命令默认拉取最新版本,可根据实际需求在 Docker 镜像 中选择版本

2. 启动 OceanBase 数据库

  1. [sudo] docker run -p 2881:2881 --name obstandalone -e MINI_MODE=1 -d oceanbase/oceanbase-ce

这里部署 mini 独立实例,通过MINI_MODE参数设定。

启动预计需要 2~5 分钟。执行以下命令,如果返回 boot success!,则表示启动成功。

  1. docker logs obstandalone | tail -1
  2. boot success!

3. 访问 OceanBase 数据库

  1. # 使用 root 用户登录集群的 sys 租户
  2. [sudo] docker exec -it obstandalone ob-mysql sys
  3. # 使用 root 用户登录集群的 test 租户
  4. [sudo] docker exec -it obstandalone ob-mysql root
  5. # 使用 test 用户登录集群的 test 租户
  6. [sudo] docker exec -it obstandalone ob-mysql test

由于它是兼容MySQL协议的,您也可以运行以下命令,使用 MySQL 客户端访问数据库:

  1. mysql -uroot@sys -h127.0.0.1 -P2881

使用示例

以下为OceanBase 在 MySQL 模式下的一些 SQL 基本操作。

1. 创建数据库

使用 CREATE DATABASE 语句创建数据库。

创建数据库 helloworld,指定字符集为 UTF8 ,并创建读写属性。

  1. obclient> CREATE DATABASE helloworld DEFAULT CHARACTER SET UTF8 READ WRITE;
  2. Query OK, 1 row affected

创建完成后,可以通过 SHOW DATABASES 命令查看当前数据库服务器中所有的数据库。

  1. obclient> SHOW DATABASES;
  2. +--------------------+
  3. | Database |
  4. +--------------------+
  5. | oceanbase |
  6. | helloworld |
  7. | test |
  8. +--------------------+
  9. 3 rows in set

2. 创建表

使用 CREATE TABLE 语句在数据库中创建新表。

在数据库 helloworld 中创建表 test。

  1. obclient> USE helloworld;
  2. Database changed
  3. obclient> CREATE TABLE test (c1 INT PRIMARY KEY, c2 VARCHAR(255));
  4. Query OK, 0 rows affected

3. 插入数据

使用 INSERT 语句在已经存在的表中插入数据。

在 test 表插入一行数据。

  1. obclient> INSERT test VALUES(1, 'helloworld');
  2. Query OK, 1 row affected
  3. obclient> SELECT * FROM test;
  4. +----+--------------+
  5. | c1 | c2 |
  6. +----+--------------+
  7. | 1 | 'helloworld' |
  8. +----+--------------+
  9. 1 row in set

4. 更改和删除数据

  1. obclient> UPDATE test SET c2 = 'helloworld 1024' WHERE c1 = 1;
  2. obclient> DELETE FROM test WHERE c1 = 1;

从上面可看出,在MySQL模式下,基本是可以当做MySQL使用,SQL基本是通用。

相关资源