oceanbase基础概念和语法介绍

OceanBase 是由蚂蚁集团自主研发的分布式关系型数据库,兼容 MySQL 和 Oracle 模式,具备高可用、强一致性、水平扩展、HTAP(混合事务/分析处理)等能力。以下是其核心基础概念与常用语法介绍。


一、OceanBase 核心架构与基础概念

1. 分布式架构

  • 多副本强一致:数据自动分片(Partition),每个分片在多个节点(OBServer)上存有副本(通常 3 副本),通过 Paxos 协议保证强一致性。
  • 无共享(Shared-Nothing):每个节点独立存储和计算,避免单点瓶颈。
  • 自动负载均衡:数据和流量可动态迁移,实现弹性扩缩容。

2. 关键组件

组件 说明
OBServer 数据库服务进程,负责 SQL 执行、存储引擎、事务处理
RootService 集群管理服务(自动选主),负责负载均衡、副本调度、DDL 管理
OCP(OceanBase Cloud Platform) 运维管理平台(Web UI),用于监控、备份、告警等
ODP(OceanBase Database Proxy) 代理层,客户端连接 ODP,由其路由到具体 OBServer

3. 租户(Tenant)

  • 逻辑隔离单元 :类似"数据库实例",一个集群可创建多个租户(如 mysql_tenant, oracle_tenant)。
  • 资源隔离:每个租户分配 CPU、内存、磁盘资源(通过 Resource Unit 控制)。
  • 模式选择:创建租户时指定兼容模式(MySQL / Oracle)。

4. 分区(Partition)

  • 表数据按分区规则(如 HASH、RANGE、KEY)拆分到多个 Partition。
  • 每个 Partition 有多个副本(Leader + Follower),Leader 处理读写,Follower 只读或同步。

5. LS(Log Stream) & Tablet

  • LS(日志流):事务日志的最小单位,一个 LS 包含多个 Tablet。
  • Tablet:存储的最小物理单元(类似传统数据库的"段"),是副本调度的基本单位。

二、OceanBase 兼容模式

OceanBase 支持两种 SQL 模式:

特性 MySQL 模式 Oracle 模式
默认端口 2881 2881
标识符大小写 不敏感(默认转小写) 敏感(双引号保留大小写)
字符串引号 单引号 ' 单引号 '
分页语法 LIMIT offset, size ROWNUMFETCH FIRST
自增列 AUTO_INCREMENT SEQUENCE + TRIGGER
日期函数 NOW(), CURDATE() SYSDATE, CURRENT_DATE

💡 创建租户时指定模式:

sql 复制代码
CREATE TENANT mysql_tenant 
RESOURCE_POOL_LIST = ('pool1'), 
PRIMARY_ZONE = 'zone1', 
LOCALITY = 'F@zone1,F@zone2,F@zone3',
COMMENT 'MySQL mode tenant';

三、常用 SQL 语法(以 MySQL 模式为例)

1. 建表与分区

sql 复制代码
-- 普通表(自动分区)
CREATE TABLE users (
  id BIGINT PRIMARY KEY,
  name VARCHAR(50),
  create_time DATETIME
);

-- 显式 HASH 分区(按 id 分 8 个分区)
CREATE TABLE orders (
  order_id BIGINT,
  user_id BIGINT,
  amount DECIMAL(10,2)
) PARTITION BY HASH(user_id) PARTITIONS 8;

-- RANGE 分区
CREATE TABLE logs (
  log_id BIGINT,
  log_date DATE
) PARTITION BY RANGE COLUMNS(log_date) (
  PARTITION p2023 VALUES LESS THAN ('2024-01-01'),
  PARTITION p2024 VALUES LESS THAN ('2025-01-01')
);

2. 插入与查询

sql 复制代码
-- 插入数据
INSERT INTO users (id, name, create_time) 
VALUES (1, 'Alice', NOW());

-- 查询(支持 MySQL 语法)
SELECT * FROM users WHERE id = 1 LIMIT 1;

-- 分布式 JOIN(自动优化)
SELECT u.name, o.amount 
FROM users u JOIN orders o ON u.id = o.user_id;

3. 事务控制

sql 复制代码
-- 显式事务(强一致性)
BEGIN;
UPDATE accounts SET balance = balance - 100 WHERE user_id = 1;
UPDATE accounts SET balance = balance + 100 WHERE user_id = 2;
COMMIT;

4. 系统视图(监控用)

sql 复制代码
-- 查看当前租户分区信息
SELECT * FROM oceanbase.DBA_OB_TABLE_LOCATIONS;

-- 查看会话
SHOW PROCESSLIST;

-- 查看资源使用
SELECT * FROM GV$OB_SERVERS;  -- 所有节点状态

四、特色功能语法

1. 全局索引(Global Index)

sql 复制代码
-- 在非分区键上创建全局索引
CREATE INDEX idx_order_amount ON orders(amount) GLOBAL;

2. 闪回查询(Flashback Query)

sql 复制代码
-- 查询 5 分钟前的数据(依赖 clog 保留时间)
SELECT * FROM users AS OF TIMESTAMP (NOW() - INTERVAL 5 MINUTE) 
WHERE id = 1;

3. 多模(JSON 支持)

sql 复制代码
-- JSON 类型(MySQL 模式)
CREATE TABLE products (
  id BIGINT,
  info JSON
);

INSERT INTO products VALUES (1, '{"color": "red", "size": "M"}');
SELECT info->'$.color' FROM products;

五、运维常用命令(通过 ODP 或直连)

场景 命令
查看集群状态 SHOW DATABASES;oceanbase 库中有集群元数据
切换租户 USE your_tenant_name;
查看执行计划 EXPLAIN SELECT ...;
查看变量 SHOW VARIABLES LIKE '%timeout%';
设置会话参数 SET ob_query_timeout = 10000000; (单位微秒)

六、与 MySQL 的主要差异

功能 OceanBase(MySQL 模式) MySQL
自增列 支持,但性能较差(建议用序列) 原生高效支持
外键 ❌ 不支持 ✅ 支持
存储过程 ✅ 支持(MySQL 模式) ✅ 支持
触发器 ✅ 支持 ✅ 支持
全文索引 ❌ 不支持 ✅ 支持
临时表 ❌ 不支持 ✅ 支持
分区类型 HASH/RANGE/LIST/KEY 更丰富(如 COLUMNS)

📌 最佳实践

  • 避免大事务(默认超时 10s)
  • 主键设计尽量单调递增(避免热点)
  • OLAP 查询走 只读副本独立分析型租户

七、快速体验

  1. 部署 :使用 OceanBase Docker 镜像 快速启动。

  2. 连接

    bash 复制代码
    mysql -h127.0.0.1 -P2881 -uroot@sys -p -c -A
  3. 创建租户 & 数据库

    sql 复制代码
    CREATE TENANT test_tenant resource_pool_list=('test_pool');
    CREATE DATABASE test_db;
    USE test_db;

✅ 总结

关键点 说明
定位 分布式 HTAP 数据库,替代 MySQL/Oracle
核心优势 强一致性、水平扩展、金融级高可用
使用门槛 兼容 MySQL/Oracle,但需注意限制(如无外键)
适用场景 高并发交易系统、海量数据存储、混合负载

官方文档:https://www.oceanbase.com/docs

开源版本:OceanBase CE(社区版)免费可用。

掌握以上概念和语法,即可开始在 OceanBase 上开发和部署应用!

相关推荐
OceanBase数据库官方博客4 天前
Agent 项目记忆构建指南
oceanbase
yzs8710 天前
OceanBase的向量化引擎shuffle有多强?
oceanbase
小码过河.11 天前
oceanbase表分区变更流程(从8到10)
oceanbase
小码过河.11 天前
oceanbase中zone和observer、分区表之间关系
前端·数据库·oceanbase
小码过河.11 天前
oceanbase根据时间自动新增表分区
oceanbase
小码过河.12 天前
oceanbase表分区指定
oceanbase
喂自己代言13 天前
从 0.7 秒到 11 毫秒:OceanBase 一条慢 SQL 的三连坑优化实战
数据库·sql·oceanbase
marvelyu14 天前
OceanBase 调优实战:从慢查询到高并发的系统性优化
oceanbase
2601_9620715721 天前
基于DataX迁移MySQL到OceanBase集群
数据库·mysql·oceanbase
光锥智能22 天前
OceanBase领跑数字政府数据库选型:产品能力、市场潜力、技术潜力均居首
数据库·人工智能·oceanbase