OceanBase 三位一体数据库调研
[!IMPORTANT]
调研范围:TP(事务处理)、AP(分析处理)、Vector DB(向量数据库)三位一体能力
#1. 产品概述与定位
#1.1 产品简介
OceanBase 是由蚂蚁集团自主研发的企业级原生分布式关系数据库,于 2010 年开始研发,至今已有超过 15 年的发展历程[1]。它是中国首个自主研发的通用关系型数据库,具备完全自主知识产权,被广泛应用于金融、电信、政务、零售等核心业务场景[2]。
#1.2 核心定位
OceanBase 的核心定位是三位一体的数据库解决方案:
| 能力维度 | 描述 | 典型场景 |
|---|---|---|
| TP(事务处理) | 高并发、低延迟的联机事务处理能力 | 支付交易、订单处理、账户管理 |
| AP(分析处理) | 大规模数据的实时分析处理能力 | 报表统计、风控分析、商业智能 |
| Vector DB | 高维向量的存储与相似性搜索能力 | RAG 应用、语义搜索、推荐系统 |
#1.3 版本演进
| 版本 | 发布时间 | 重要特性 |
|---|---|---|
| V0.5 | 2014 | 支付宝交易系统上线,替代 Oracle |
| V1.0 | 2016 | 首个全分布式版本,支付宝账务系统 |
| V2.0 | 2018 | 金融级高可用,RPO=0,Oracle 兼容 |
| V3.1 | 2021 | 开源社区版(MySQL 兼容模式) |
| V4.0 | 2022 | 单机分布式一体化架构 |
| V4.3 | 2024 | 列存引擎、向量化执行、实时 AP |
| V4.3.3 | 2024.11 | 向量数据类型与向量索引,AI 原生 |
| V4.4 | 2025 | 向量检索增强、混合搜索、AI 函数 |
#2. 核心架构与技术原理
#2.1 整体架构
OceanBase 采用 Shared-Nothing 分布式架构,各节点完全对等,通过 Paxos 协议保证数据强一致性[3]。
架构层次:
| 层次 | 组件 | 功能 |
|---|---|---|
| 接入层 | ODP (OceanBase Database Proxy) | SQL 路由、读写分离、连接管理 |
| 计算层 | SQL Engine | SQL 解析、优化、执行 |
| 存储层 | LSM-Tree Engine | 数据存储、索引管理 |
| 事务层 | Paxos-based | 分布式事务、强一致性保证 |
| 高可用 | RPO=0, RTO < 8s | 金融级容灾,零数据丢失 |
#2.2 LSM-Tree 存储引擎
OceanBase 采用基于 LSM-Tree(Log-Structured Merge-Tree) 的存储引擎,这是其高性能写入和 HTAP 能力的核心基础[4][5]。
[!TIP]
快递分拣中心类比:LSM-Tree 的工作方式就像一个高效的快递分拣中心:
- MemTable(收件台):快递到达后,先快速堆放在收件台上(内存写入),不必立即归档到仓库——这让"收件"(写入)速度极快。
- 转储(搬运工):当收件台堆满后,搬运工会将这批快递整理打包,送入临时存放区(L0/L1 SSTable)。
- 合并(仓库整理):后台定期进行"大扫除",将多个临时存放区的快递按目的地分类、合并、压缩,最终放入永久仓库(Major SSTable)——这就是 Compaction。
- 查件(读取):收件时可能需要同时查收件台、临时区和永久仓库,通过 Bloom Filter(快递单索引)快速定位包裹所在位置。
LSM-Tree 核心机制:
| 机制 | 描述 | 优势 |
|---|---|---|
| 随机写转顺序写 | 所有 DML 操作先写入内存 MemTable | 写入性能提升 10-100 倍 |
| 多级存储 | MemTable → Mini → Minor → Major SSTable | 分层管理,平衡读写性能 |
| 宏块/微块设计 | 2MB 宏块 + 变长微块 | 减少写放大,提升合并效率 |
| 多级缓存 | Block Cache + Row Cache + Bloomfilter Cache | 加速读取,减少 I/O |
| 数据校验 | 微块级校验和 + 定期巡检 | 数据完整性保证 |
#2.3 分布式一致性
OceanBase 采用 Multi-Paxos 协议保证数据强一致性[6]:
- RPO = 0:数据零丢失,满足金融级要求
- RTO < 8s:故障自动切换,业务快速恢复
- 三副本部署:同城三机房或两地三中心
#3. TP(事务处理)能力分析
#3.1 事务处理特性
OceanBase 在事务处理方面具备金融级能力,已在支付宝核心交易链路验证超过 10 年[7]。
核心事务特性:
| 特性 | 描述 | 技术实现 |
|---|---|---|
| ACID 完整支持 | 原子性、一致性、隔离性、持久性 | 两阶段提交 + Paxos |
| 分布式事务 | 跨分区、跨节点事务自动处理 | 全局事务协调器 |
| 隔离级别 | 支持 RC、RR、Serializable | MVCC + 行级锁 |
| 高并发 | 单集群支持百万级 TPS | 无锁并发 + 异步日志 |
#3.2 MVCC 多版本并发控制
[!TIP]
图书馆借阅类比:MVCC 就像一个智能图书馆,同一本书可以有多个"历史副本":
- 写入(修订版):每次有人修改书籍内容时,不是直接涂改原书,而是创建一个新版本(V1 → V2 → V3),旧版本保留。
- 读取(快照借阅):读者进馆时会拿到一张"时间戳卡",只能借阅在此时间点之前已上架的版本——即使图书馆正在上新版,你依然能安心阅读旧版,互不干扰。
- 清理(过期下架):当所有读者都不再需要旧版本时,图书馆才会回收这些过期副本。
MVCC 核心机制:
| 机制 | 描述 | 优势 |
|---|---|---|
| 版本链 | 每行数据维护多个历史版本 | 读写互不阻塞 |
| 快照读 | 事务开始时获取一致性时间戳 | 读取无需加锁,性能极高 |
| 可见性判断 | 根据版本提交时间与事务开始时间 | 保证事务隔离性 |
| 版本回收 | 当无事务需要旧版本时进行 GC 清理 | 避免版本链无限增长 |
#3.3 高可用架构
| 部署模式 | 副本分布 | RPO | RTO | 适用场景 |
|---|---|---|---|---|
| 同城三机房 | 3 Zone × 3 副本 | 0 | < 8s | 金融核心系统 |
| 两地三中心 | 城市 A(2) + 城市 B(1) | 0 | < 8s | 异地容灾 |
| 三地五中心 | 3 城市 × 5 副本 | 0 | < 30s | 极致容灾 |
#4. AP(分析处理)能力分析
#4.1 HTAP 混合负载架构
OceanBase 的 HTAP 能力基于行列混合存储和资源隔离技术实现[8][9]。
#4.2 列存引擎特性
| 特性 | 描述 | 性能提升 |
|---|---|---|
| 列式存储 | 按列存储,高压缩比 | 存储节省 3-10 倍 |
| 向量化执行 | SIMD 指令批量处理 | 计算提升 5-10 倍 |
| MPP 并行 | 多节点并行查询 | 线性扩展 |
| 智能路由 | 自动选择行存/列存 | 透明优化 |
#4.3 分析处理能力
支持的分析场景:
#5. 向量检索能力
#5.1 向量能力概述
OceanBase 从 V4.3.3 版本开始原生支持向量数据类型和向量索引,V4.4 版本进一步增强了向量搜索能力(混合搜索、AI SQL 函数等)[10][11]。
#5.2 向量数据类型
-- 创建包含向量列的表
CREATE TABLE articles (
id INT PRIMARY KEY,
title VARCHAR(255),
content TEXT,
embedding VECTOR(1536) -- 1536 维向量(OpenAI Ada 模型)
);
-- 插入向量数据
INSERT INTO articles (id, title, content, embedding)
VALUES (1, 'AI 技术发展', '...', '[0.1, 0.2, ..., 0.3]');
#5.3 向量索引算法
#HNSW(Hierarchical Navigable Small World)
HNSW 是一种基于图的近似最近邻(ANN)算法,通过构建多层导航图实现高效搜索[12]。
-- 创建 HNSW 向量索引(OceanBase V4.3.3+ 语法)
CREATE VECTOR INDEX idx_embedding_hnsw ON articles(embedding)
WITH (distance=l2, type=hnsw, lib=vsag);
| 参数 | 描述 | 建议值 |
|---|---|---|
m | 每个节点的最大邻居数 | 16-64 |
ef_construction | 构建时的搜索宽度 | 100-200 |
ef_search | 查询时的搜索宽度 | 40-100 |
#IVF(Inverted File Flat)
IVF 通过聚类将向量划分到不同的桶中,查询时只搜索最相关的桶[13]。
-- 创建 IVF 向量索引(OceanBase V4.3.3+ 语法)
CREATE VECTOR INDEX idx_embedding_ivf ON articles(embedding)
WITH (distance=l2, type=ivf, lib=vsag);
#5.4 距离度量方式
| 度量方式 | 操作符 / 函数 | 适用场景 |
|---|---|---|
| 欧氏距离 (L2) | <-> (ANN 操作符) | 物理相似度 |
| 余弦距离 | <~> (ANN 操作符) | 语义相似度(推荐) |
| 内积 | <@> (ANN 操作符) | 归一化向量 |
[!NOTE]
OceanBase 向量距离计算使用 ANN 操作符(
<->、<~>、<@>),配合ob_ann_distance()函数获取实际距离值。不支持l1_distance()(曼哈顿距离)。
#5.5 向量搜索查询
-- 最近邻搜索 (KNN) — 使用 ANN 操作符
SELECT id, title,
ob_ann_distance(embedding, '[0.1, 0.2, ...]') AS distance
FROM articles
WHERE embedding <-> '[0.1, 0.2, ...]'
ORDER BY distance ASC
LIMIT 10;
-- 带过滤条件的混合搜索
SELECT id, title,
ob_ann_distance(embedding, '[0.1, 0.2, ...]') AS distance
FROM articles
WHERE category = 'technology'
AND created_at > '2024-01-01'
AND embedding <~> '[0.1, 0.2, ...]' -- 余弦距离 ANN 过滤
ORDER BY distance ASC
LIMIT 10;
#5.6 向量能力对比
| 特性 | OceanBase V4.4 | PostgreSQL + pgvector | Milvus |
|---|---|---|---|
| 向量维度 | 16,000 | 16,000 (存储) / 2,000 (HNSW 索引) | 32,768 |
| 索引类型 | HNSW, IVF | HNSW, IVFFlat | HNSW, IVF_FLAT, 等 |
| 混合查询 | ✅ 原生支持 | ✅ 支持 | ✅ 2.4+ 原生 BM25 |
| 事务支持 | ✅ 完整 ACID | ✅ 完整 ACID | ❌ 不支持 |
| 分析能力 | ✅ HTAP | ⚠️ 有限 | ❌ 不支持 |
| 分布式 | ✅ 原生分布式 | ❌ 单机 | ✅ 分布式 |
#6. 三位一体融合优势
#6.1 统一数据平台
传统架构需要多个独立系统处理不同类型的工作负载,而 OceanBase 三位一体架构实现了真正的统一[14]。
#6.2 核心融合优势
| 优势 | 描述 | 业务价值 |
|---|---|---|
| 数据一致性 | 单一数据源,无需 ETL 同步 | 消除数据不一致风险 |
| 实时分析 | T+0 实时数据分析 | 支持实时决策 |
| 运维简化 | 一套系统替代多套 | 降低 50%+ 运维成本 |
| 资源共享 | 弹性资源调度 | 提升资源利用率 |
| AI 原生 | 向量与结构化数据融合 | 简化 AI 应用开发 |
#6.3 典型融合场景
#场景 1:智能客服系统
#场景 2:实时风控系统
-- 单一查询融合三种能力
SELECT
t.order_id,
t.amount,
t.user_id,
-- AP: 聚合分析
SUM(h.amount) OVER (PARTITION BY t.user_id
ORDER BY t.created_at
ROWS BETWEEN 7 PRECEDING AND CURRENT ROW) as week_total,
-- Vector: 行为模式匹配
(t.behavior_vec <-> reference_vec) as anomaly_score
FROM transactions t
JOIN transaction_history h ON t.user_id = h.user_id
WHERE t.created_at > NOW() - INTERVAL '1 hour'
AND (t.behavior_vec <-> reference_vec) < 0.3 -- 向量相似度过滤
ORDER BY anomaly_score
LIMIT 100;
#7. 性能基准与对比分析
#7.1 TPC-C 性能 (OLTP)
OceanBase 在 TPC-C 基准测试中创造了多项世界纪录[15][16]。
| 测试项 | OceanBase | MySQL 企业版 | 对比倍数 |
|---|---|---|---|
| 最高 tpmC | 7.07 亿 | - | 世界纪录(2020 年 5 月) |
| 同配置性能 | 基准 | 基准 × 0.53 | 1.9x |
| 线性扩展 | ✅ | ❌ | - |
#7.2 TPC-H 性能 (OLAP)
| 测试项 | OceanBase V4.3 | Greenplum 6.22.1 | 对比倍数 |
|---|---|---|---|
| 综合性能 | 基准 | 基准 × 0.17 | 5-6x |
| 最优场景 | 基准 | 基准 × 0.11 | 9x |
[!NOTE]
TPC-H 性能数据来源于 OceanBase 官方基准测试白皮书,具体测试配置详见 ref [16]。
#7.3 向量搜索性能
基于 VectorDBBench 基准测试数据[17]:
| 指标 | OceanBase | pgvector | 说明 |
|---|---|---|---|
| QPS | ★★★★☆ | ★★★☆☆ | 高并发场景优势 |
| Recall@10 | ★★★★★ | ★★★★★ | 相当 |
| 构建时间 | ★★★★☆ | ★★★☆☆ | 分布式并行优势 |
#8. 生态集成与工具链
#8.1 AI 框架集成
#LlamaIndex 集成
OceanBase 提供官方 LlamaIndex 集成包 llama-index-vector-stores-oceanbase[18]。
# 安装
pip install llama-index-vector-stores-oceanbase pyobvector
# 使用示例
from llama_index.vector_stores.oceanbase import OceanBaseVectorStore
from pyobvector import ObVecClient
# 配置 OceanBase 连接(通过 ObVecClient)
client = ObVecClient(
host="127.0.0.1",
port=2881,
user="root@test",
password="",
database="test_db"
)
vector_store = OceanBaseVectorStore(
client=client,
dim=1536,
table_name="documents"
)
# 创建索引
index = VectorStoreIndex.from_vector_store(vector_store)
# RAG 查询
query_engine = index.as_query_engine()
response = query_engine.query("什么是 OceanBase?")
#LangChain 集成
OceanBase 提供官方 LangChain 集成包 langchain-oceanbase[19]。
# 安装
pip install langchain-oceanbase
# 使用示例
from langchain_oceanbase.vectorstores import OceanBaseVectorStore
from langchain_openai import OpenAIEmbeddings
# 配置
embeddings = OpenAIEmbeddings()
vector_store = OceanBaseVectorStore(
connection_string="mysql+pymysql://root@test:@127.0.0.1:2881/test_db",
embedding_function=embeddings,
table_name="langchain_docs"
)
# 添加文档
vector_store.add_documents(documents)
# 相似性搜索
results = vector_store.similarity_search("查询内容", k=5)
#8.2 开发语言支持
| 语言 | 驱动/SDK | 说明 |
|---|---|---|
| Python | pymysql, mysql-connector-python | MySQL 兼容 |
| Java | JDBC, OceanBase Client | 官方驱动 |
| Go | go-sql-driver/mysql | MySQL 兼容 |
| Node.js | mysql2, sequelize | MySQL 兼容 |
| Rust | sqlx | MySQL 兼容 |
#8.3 生态工具
#9. 可行性评估
#9.1 技术可行性
| 评估维度 | 评分 | 说明 |
|---|---|---|
| 功能完备性 | ★★★★★ | TP/AP/Vector 三位一体,功能全面 |
| 性能表现 | ★★★★★ | TPC-C/TPC-H 世界纪录,向量搜索优秀 |
| 生态成熟度 | ★★★★☆ | AI 框架集成完善,社区活跃 |
| 运维复杂度 | ★★★☆☆ | 分布式架构需要专业运维 |
| 学习曲线 | ★★★★☆ | MySQL 兼容,易于上手 |
#9.2 成本评估
| 部署模式 | 成本预估 | 适用场景 |
|---|---|---|
| Docker 单节点 | 免费 | 开发测试 |
| OCP 社区版 | 免费 | 小规模生产 |
| 云服务 (OceanBase Cloud) | 按量付费 | 弹性业务 |
| 企业版 | 商业授权 | 大规模核心业务 |
#9.3 风险评估
| 风险 | 等级 | 缓解措施 |
|---|---|---|
| 运维复杂度高 | 中 | 使用 OCP 管理平台,参考官方最佳实践 |
| 向量功能相对新 | 低 | V4.3.3 GA 已稳定,V4.4 持续增强 |
| 社区资源相对少 | 低 | 官方文档完善,技术支持响应快 |
#10. 场景演示
#10.1 应用场景概述
Agentic AI Papers 研究项目,利用 OceanBase 的三位一体能力实现:
| 场景 | 使用能力 | 具体应用 |
|---|---|---|
| 知识库 | Vector DB | 论文摘要/内容的向量化存储与语义搜索 |
| 研究数据管理 | TP | 论文元数据、引用关系的事务性管理 |
| 研究分析 | AP | 论文趋势分析、引用网络分析 |
| RAG 问答系统 | 三位一体 | 基于论文知识库的智能问答 |
#10.2 架构设计
#10.3 数据模型设计
-- 论文元数据表 (TP 场景)
CREATE TABLE papers (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
title VARCHAR(500) NOT NULL,
abstract TEXT,
authors JSON,
publication_date DATE,
venue VARCHAR(200),
arxiv_id VARCHAR(50) UNIQUE,
pdf_url VARCHAR(500),
category VARCHAR(100),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
INDEX idx_category (category),
INDEX idx_date (publication_date)
);
-- 论文向量表 (Vector DB 场景)
CREATE TABLE paper_embeddings (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
paper_id BIGINT NOT NULL,
chunk_index INT DEFAULT 0,
chunk_text TEXT,
embedding VECTOR(1536), -- OpenAI text-embedding-3-small
FOREIGN KEY (paper_id) REFERENCES papers(id)
);
-- 创建 HNSW 向量索引(OceanBase V4.3.3+ 语法)
CREATE VECTOR INDEX idx_paper_embedding_hnsw ON paper_embeddings(embedding)
WITH (distance=l2, type=hnsw, lib=vsag);
-- 引用关系表 (分析场景)
CREATE TABLE citations (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
citing_paper_id BIGINT NOT NULL,
cited_paper_id BIGINT NOT NULL,
citation_context TEXT,
FOREIGN KEY (citing_paper_id) REFERENCES papers(id),
FOREIGN KEY (cited_paper_id) REFERENCES papers(id),
INDEX idx_citing (citing_paper_id),
INDEX idx_cited (cited_paper_id)
);
#10.4 环境准备
#方式一:Docker 快速部署(推荐开发测试)
# 拉取 OceanBase 镜像(使用最新 CE 版本)
docker pull oceanbase/oceanbase-ce:latest
# 启动容器(最小配置)
docker run -d \
--name oceanbase \
-p 2881:2881 \
-e MODE=mini \
-e OB_TENANT_PASSWORD=your_password \
oceanbase/oceanbase-ce:latest
# 等待启动完成(约 2-5 分钟)
docker logs -f oceanbase
# 当看到 "boot success!" 表示启动成功
#方式二:使用 OBD 部署
# 安装 OBD (OceanBase Deployer)
# 注意:以下 URL 为示例,请从 OceanBase 官方下载页获取最新版本
# https://www.oceanbase.com/softwarecenter
bash -c "$(curl -s https://obbusiness-private.oss-cn-shanghai.aliyuncs.com/download-center/opensource/oceanbase-all-in-one/latest/oceanbase-all-in-one.sh)"
# 部署单节点集群
obd cluster deploy demo -c mini.yaml
obd cluster start demo
#10.5 连接数据库
# 使用 MySQL 客户端连接
mysql -h127.0.0.1 -P2881 -uroot@test -p your_password
# 或使用 obclient
obclient -h127.0.0.1 -P2881 -uroot@test -p your_password
#10.6 完整 Demo 代码
#Step 1: 安装依赖
pip install llama-index-vector-stores-oceanbase
pip install pyobvector
pip install llama-index
pip install openai
pip install pymysql
#Step 2: 创建数据表
import pymysql
# 连接 OceanBase
conn = pymysql.connect(
host='127.0.0.1',
port=2881,
user='root@test',
password='your_password',
database='test_db'
)
cursor = conn.cursor()
# 创建论文表
cursor.execute('''
CREATE TABLE IF NOT EXISTS papers (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
title VARCHAR(500) NOT NULL,
abstract TEXT,
authors JSON,
publication_date DATE,
category VARCHAR(100),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
)
''')
# 创建向量表
cursor.execute('''
CREATE TABLE IF NOT EXISTS paper_embeddings (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
paper_id BIGINT NOT NULL,
chunk_index INT DEFAULT 0,
chunk_text TEXT,
embedding VECTOR(1536)
)
''')
# 创建 HNSW 向量索引(OceanBase V4.3.3+ 语法)
cursor.execute('''
CREATE VECTOR INDEX IF NOT EXISTS idx_embedding_hnsw
ON paper_embeddings(embedding)
WITH (distance=l2, type=hnsw, lib=vsag)
''')
conn.commit()
print("Tables created successfully!")
#Step 3: 实现 RAG 问答系统
from llama_index.vector_stores.oceanbase import OceanBaseVectorStore
from llama_index.core import VectorStoreIndex, Document, Settings
from llama_index.embeddings.openai import OpenAIEmbedding
from llama_index.llms.openai import OpenAI
from pyobvector import ObVecClient
import os
# 配置 OpenAI
os.environ["OPENAI_API_KEY"] = "your-api-key"
# 配置 LlamaIndex
Settings.embed_model = OpenAIEmbedding(model="text-embedding-3-small")
Settings.llm = OpenAI(model="gpt-4o-mini")
# 创建 OceanBase 向量存储(通过 ObVecClient 连接)
client = ObVecClient(
host="127.0.0.1",
port=2881,
user="root@test",
password="your_password",
database="test_db"
)
vector_store = OceanBaseVectorStore(
client=client,
dim=1536,
table_name="paper_embeddings"
)
# 准备示例文档
documents = [
Document(
text="OceanBase 是蚂蚁集团自主研发的企业级分布式关系数据库,具备 HTAP 能力。",
metadata={"source": "oceanbase_intro", "category": "database"}
),
Document(
text="LlamaIndex 是一个用于构建 RAG 应用的框架,支持多种向量数据库集成。",
metadata={"source": "llamaindex_intro", "category": "ai_framework"}
),
Document(
text="向量搜索通过计算向量之间的相似度来找到语义相关的内容。",
metadata={"source": "vector_search_intro", "category": "technology"}
)
]
# 创建索引并添加文档
index = VectorStoreIndex.from_documents(
documents,
vector_store=vector_store
)
# 创建查询引擎
query_engine = index.as_query_engine(similarity_top_k=3)
# 执行 RAG 查询
response = query_engine.query("什么是 OceanBase? 它有什么特点?")
print(f"回答: {response}")
# 混合查询示例:结合向量搜索与 SQL 过滤
from llama_index.core.vector_stores import MetadataFilters, ExactMatchFilter
filters = MetadataFilters(
filters=[ExactMatchFilter(key="category", value="database")]
)
filtered_response = query_engine.query(
"介绍一下数据库相关技术",
filters=filters
)
print(f"过滤后回答: {filtered_response}")
#Step 4: 分析查询示例
import pymysql
conn = pymysql.connect(
host='127.0.0.1',
port=2881,
user='root@test',
password='your_password',
database='test_db'
)
cursor = conn.cursor()
# 论文分类统计 (AP 场景)
cursor.execute('''
SELECT
category,
COUNT(*) as paper_count,
AVG(LENGTH(abstract)) as avg_abstract_length
FROM papers
GROUP BY category
ORDER BY paper_count DESC
''')
for row in cursor.fetchall():
print(f"分类: {row[0]}, 论文数: {row[1]}, 平均摘要长度: {row[2]:.0f}")
# 向量相似度搜索 + 分析 (三位一体)
cursor.execute('''
SELECT
p.title,
p.category,
pe.embedding <-> %s AS distance
FROM papers p
JOIN paper_embeddings pe ON p.id = pe.paper_id
WHERE p.publication_date > '2024-01-01'
ORDER BY distance
LIMIT 10
''', (query_vector,))
print("\n最相关的论文:")
for row in cursor.fetchall():
print(f" - {row[0]} (分类: {row[1]}, 相似度距离: {row[2]:.4f})")
#10.7 性能优化建议
| 优化项 | 建议配置 | 说明 |
|---|---|---|
| 连接池 | 最小 10,最大 100 | 避免频繁建连 |
| 向量维度 | 根据模型选择 (1536/3072) | 平衡精度与性能 |
| HNSW 参数 | m=16, ef=128 | 根据数据规模调整 |
| 批量插入 | 每批 100-1000 条 | 减少事务开销 |
| 索引预热 | 启动时加载常用索引 | 减少冷启动延迟 |
#10.8 监控与运维
-- 查看向量索引定义(通过系统视图确认索引存在及配置)
SELECT index_name, index_type, status
FROM oceanbase.DBA_OB_INDEXES
WHERE table_name = 'paper_embeddings'
AND index_type = 'VECTOR';
-- 查看向量表副本分布(确认数据在集群中的位置)
SELECT table_name, svr_ip, role, replica_type
FROM oceanbase.DBA_OB_TABLE_LOCATIONS
WHERE TABLE_NAME = 'paper_embeddings';
-- 查看查询性能
SELECT
query_sql,
elapsed_time,
queue_time,
execute_time
FROM oceanbase.GV$OB_SQL_AUDIT
WHERE query_sql LIKE '%embedding%'
ORDER BY elapsed_time DESC
LIMIT 10;
-- 查看资源使用
SELECT
svr_ip,
cpu_capacity,
mem_capacity,
disk_capacity
FROM oceanbase.GV$OB_SERVERS;
#References
[1] OceanBase, "OceanBase 简介," OceanBase Documentation, 2025. [Online]. Available: https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000004475486
[2] OceanBase, OceanBase 数据库 V4.4.x: Introduction, 2025.
[3] OceanBase, "分布式架构," OceanBase Documentation, 2025. [Online]. Available: https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000004475689
[4] OceanBase Technical Blog, "LSM-Tree 存储引擎原理," 2024. [Online]. Available: https://open.oceanbase.com/blog/200126
[5] 墨天轮, "OceanBase 存储引擎深度解析," 2024. [Online]. Available: https://www.modb.pro/db/oceanbase
[6] OceanBase, "Paxos 一致性协议," OceanBase Documentation, 2025.
[7] OceanBase, OceanBase 数据库 V4.4.x: 实践教程, 2025.
[8] OceanBase, "HTAP 架构," OceanBase Documentation, 2025. [Online]. Available: https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000004475691
[9] OceanBase, OceanBase 数据库 V4.3.x: OceanBase AP, 2024.
[10] OceanBase, "向量搜索概述," OceanBase Documentation, 2024. [Online]. Available: https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000004475693
[11] OceanBase, OceanBase 向量搜索技术博客, 2024. [Online]. Available: https://oceanbase.github.io/docs/blogs/tech/vector-search
[12] Wikipedia, "Hierarchical Navigable Small World graphs," Wikipedia, 2024. [Online]. Available: https://en.wikipedia.org/wiki/HNSW
[13] Milvus, "IVF 索引原理," Milvus Documentation, 2024. [Online]. Available: https://milvus.io/docs/index.md
[14] OceanBase, "三位一体架构," OceanBase DevCon 2024, 2024.
[15] TPC, "TPC-C 官方记录 - OceanBase 707M tpmC," TPC Benchmark Results, 2020. [Online]. Available: https://www.tpc.org/tpcc/results/tpcc_results5.asp
[16] OceanBase, "A VLDB 2022 Paper: The Technologies behind OceanBase's 707 million tpmC in TPC-C Benchmark Test," OceanBase Blog, 2022. [Online]. Available: https://en.oceanbase.com/blog/2596571392
[17] Zilliz, "VectorDBBench - 向量数据库基准测试," GitHub Repository, 2025. [Online]. Available: https://github.com/zilliztech/VectorDBBench
[18] LlamaHub, "OceanBase Vector Store," 2025. [Online]. Available: https://docs.llamaindex.ai/en/stable/api_reference/storage/vector_store/oceanbase/
[19] LangChain, "OceanBase 集成," 2025. [Online]. Available: https://python.langchain.com/docs/integrations/vectorstores/oceanbase
[20] OceanBase, OceanBase 数据库: 部署数据库, 2025. [Online]. Available: https://en.oceanbase.com/docs/common-oceanbase-database-10000000000870521
[21] OceanBase, "OceanBase," GitHub Repository, 2026. [Online]. Available: https://github.com/oceanbase/oceanbase