随着互联网的发展和数据量的不断增加,数据库的重要性越发凸显。市面上主流的关系数据库系统(RDS)有MySQL
、Oracle
、SQL Server
等,这些数据库都有着一定的优点和缺点。近年来,以OceanBase
为代表的分布式关系数据库渐露头角,成为了关注的焦点。
本文将对OceanBase
数据库进行介绍,以让您对该数据库有个系统性的了解。
概述
OceanBase是一款由阿里巴巴集团完全自主研发的企业级原生分布式数据库,打破传统关系数据库瓶颈,实现高可用、高性能、高可扩展性、高安全性和高灵活性。
核心特性
1. 高可用
- 支持同城/异地容灾
- 支持多地多活
2. 高兼容
- 高度兼容
Oracle
和MySQL
协议 - 提供自动迁移工具
- 支持
迁移评估
和反向同步
,以保障数据迁移安全
3. 水平扩展
- 透明水平扩展,支持业务快速扩容缩容
- 准内存处理架构,实现高性能
- 支持数千个集群节点
- 单集群最大数据量可超过 3PB
- 单表最大行数可达万亿级
4. 低成本
- 基于 LSM-Tree 的高压缩引擎,降低 70% - 90% 存储成本
- 原生多租户架构,租户间数据隔离,降低部署和运维成本
5. 实时 HTAP
支持在线实时交易及实时分析两种场景,“一份数据”的多个副本可以存储成多种形态,从根本上保持数据一致性
6. 安全可靠
- 完全自主研发,代码级可控
- 完备的角色权限管理体系,数据存储和通信全链路透明加密
架构设计
OceanBase 数据库采用 Shared-Nothing 架构,各个节点之间完全对等,每个节点都有自己的 SQL 引擎、存储引擎、事务引擎,运行在普通 PC 服务器组成的集群之上,具备高可扩展性、高可用性、高性能、低成本、与主流数据库高兼容。
安装部署
以下是使用容器方案快速安装部署OceanBase的简要步骤:
1. 获取 OceanBase 数据库镜像
[sudo] docker pull oceanbase/oceanbase-ce
上述命令默认拉取最新版本,可根据实际需求在 Docker 镜像 中选择版本
2. 启动 OceanBase 数据库
[sudo] docker run -p 2881:2881 --name obstandalone -e MINI_MODE=1 -d oceanbase/oceanbase-ce
这里部署 mini 独立实例,通过
MINI_MODE
参数设定。
启动预计需要 2~5 分钟。执行以下命令,如果返回 boot success!
,则表示启动成功。
docker logs obstandalone | tail -1
boot success!
3. 访问 OceanBase 数据库
# 使用 root 用户登录集群的 sys 租户
[sudo] docker exec -it obstandalone ob-mysql sys
# 使用 root 用户登录集群的 test 租户
[sudo] docker exec -it obstandalone ob-mysql root
# 使用 test 用户登录集群的 test 租户
[sudo] docker exec -it obstandalone ob-mysql test
由于它是兼容MySQL协议的,您也可以运行以下命令,使用 MySQL 客户端访问数据库:
mysql -uroot@sys -h127.0.0.1 -P2881
使用示例
以下为OceanBase 在 MySQL 模式下的一些 SQL 基本操作。
1. 创建数据库
使用 CREATE DATABASE 语句创建数据库。
创建数据库 helloworld,指定字符集为 UTF8 ,并创建读写属性。
obclient> CREATE DATABASE helloworld DEFAULT CHARACTER SET UTF8 READ WRITE;
Query OK, 1 row affected
创建完成后,可以通过 SHOW DATABASES 命令查看当前数据库服务器中所有的数据库。
obclient> SHOW DATABASES;
+--------------------+
| Database |
+--------------------+
| oceanbase |
| helloworld |
| test |
+--------------------+
3 rows in set
2. 创建表
使用 CREATE TABLE 语句在数据库中创建新表。
在数据库 helloworld 中创建表 test。
obclient> USE helloworld;
Database changed
obclient> CREATE TABLE test (c1 INT PRIMARY KEY, c2 VARCHAR(255));
Query OK, 0 rows affected
3. 插入数据
使用 INSERT 语句在已经存在的表中插入数据。
在 test 表插入一行数据。
obclient> INSERT test VALUES(1, 'helloworld');
Query OK, 1 row affected
obclient> SELECT * FROM test;
+----+--------------+
| c1 | c2 |
+----+--------------+
| 1 | 'helloworld' |
+----+--------------+
1 row in set
4. 更改和删除数据
obclient> UPDATE test SET c2 = 'helloworld 1024' WHERE c1 = 1;
obclient> DELETE FROM test WHERE c1 = 1;
从上面可看出,在MySQL模式下,基本是可以当做MySQL使用,SQL基本是通用。
相关资源
- OceanBase 官网:https://www.oceanbase.com/
- OceanBase 文档:https://www.oceanbase.com/docs/oceanbase-database-cn
- OceanBase 开源地址:https://github.com/oceanbase/oceanbase