海外访问:www.kdjingpai.com
Ctrl + D 收藏本站

OceanBase SeekDB 是 OceanBase 数据库核心组件中专为 AI 时代打造的向量检索引擎。它并非一个独立的、需要单独运维的数据库产品,而是将向量数据库的能力完全内嵌于成熟的分布式关系型数据库 OceanBase 之中。从第一性原则来看,SeekDB 的本质是让关系型数据库具备了“理解”非结构化数据(如文本、图像、音频生成的向量)的能力。它解决了传统 AI 应用架构中“关系型数据库存储业务数据”与“专用向量数据库存储特征数据”分离所带来的数据割裂、数据同步延迟和运维复杂等痛点。用户无需引入新的技术栈,仅需使用标准的 SQL 语言,即可在同一个数据库连接中同时完成对业务字段(标量)的精确过滤和对向量字段的语义相似度检索。SeekDB 基于 OceanBase 的分布式架构,继承了其高可用、强一致性和水平扩展能力,支持最高 16,000 维度的向量存储,提供 HNSW 和 IVF 等高性能索引算法,能够以极低的延迟在海量数据中完成 Top-K 查询,是构建 RAG(检索增强生成)、推荐系统和多模态搜索应用的理想数据底座。

功能列表

  • 原生向量数据类型支持:在数据库表结构中直接定义 VECTOR 类型字段,支持高达 16,000 维度的稠密向量存储,与 INTVARCHAR 等传统数据类型共存。
  • 高性能向量索引:内置 HNSW(分层导航小世界)和 IVF(倒排文件)等业界领先的索引算法,支持 L2(欧氏距离)、Inner Product(内积)和 Cosine(余弦相似度)等多种距离计算公式,确保检索的高召回率与低延迟。
  • SQL+AI 混合检索:支持在一条 SQL 语句中同时包含 WHERE 子句的标量过滤(例如:价格区间、商品类别)和 ORDER BY 的向量相似度排序,数据库内核自动优化执行计划,避免了应用层多次交互。
  • 分布式水平扩展:依托 OceanBase 的原生分布式架构,向量数据可以随分片自动分布到多台服务器上,通过增加节点即可线性提升存储容量和检索性能,轻松应对百亿级向量规模。
  • 完全兼容 MySQL 协议:无需学习专用的向量数据库 API,开发者可以使用任意支持 MySQL 协议的客户端(如 JDBC、PyMySQL)或 ORM 框架直接操作向量数据。
  • 无缝集成 AI 生态:深度适配 LangChain、LlamaIndex、DB-GPT 等主流 AI 开发框架,提供 Python SDK,让开发者能快速将 OceanBase 接入大模型应用的数据链路中。

使用帮助

OceanBase SeekDB 的使用体验设计得非常接近传统的 MySQL 数据库,核心差异在于对向量数据的定义和索引操作。以下将详细介绍从环境准备到完成一次混合检索的完整流程。

1. 环境准备与安装

SeekDB 的能力包含在 OceanBase 4.3.3 及以上版本中。对于开发者而言,最快上手的方式是使用 Docker 容器部署单机版 OceanBase。

步骤一:启动 OceanBase 容器
请确保你的机器安装了 Docker,并且分配了至少 8GB 的内存(向量计算对内存有一定要求)。在终端执行以下命令拉取并启动最新版本的镜像:

docker run -p 2881:2881 --name oceanbase-ce -e MINI_MODE=1 -d oceanbase/oceanbase-ce:latest

注:MINI_MODE=1 参数用于在资源受限的个人电脑上以最小模式启动。

步骤二:连接数据库
容器启动完成后(通常需要 1-2 分钟初始化),你可以使用任意 MySQL 客户端连接。这里以命令行 MySQL 客户端为例:

# 进入容器内部
docker exec -it oceanbase-ce bash
# 连接数据库(默认无密码,端口2881)
obclient -h127.0.0.1 -P2881 -uroot@test

注:生产环境中建议创建非 root 用户并设置强密码。

2. 向量表的操作流程

我们将模拟一个“图书推荐系统”的场景,创建一个包含图书基本信息(标题、价格)和图书简介向量特征的表。

步骤一:创建支持向量的表
在创建表时,使用 VECTOR(<维度>) 语法定义向量列。假设我们需要存储 3 维向量(实际场景通常为 768 或 1536 维):

CREATE TABLE books (
id INT PRIMARY KEY AUTO_INCREMENT,
title VARCHAR(100),
category VARCHAR(50),
price DECIMAL(10, 2),
embedding VECTOR(3)  -- 定义一个3维的向量列
);

步骤二:插入数据
插入向量数据时,使用字符串格式 [v1, v2, v3, ...] 表示向量。

INSERT INTO books (title, category, price, embedding) VALUES 
('Python深度学习', 'Tech', 59.90, '[0.1, 0.2, 0.8]'),
('如果是普通的书', 'Fiction', 29.90, '[0.8, 0.1, 0.1]'),
('数据库内部原理', 'Tech', 89.00, '[0.2, 0.2, 0.9]'),
('烹饪大全', 'Life', 45.00, '[0.1, 0.9, 0.1]');

3. 创建向量索引

为了加速检索,必须在向量列上创建索引。SeekDB 支持创建 IVFFLAT 或 HNSW 索引。

参数说明:

  • distance: 距离度量方式,可选 l2 (欧氏距离), inner_product (内积), cosine (余弦)。
  • type: 索引算法类型,推荐 hnsw
  • lib: 向量库实现,默认为 vsag
-- 创建一个基于 HNSW 算法的索引,使用 L2 距离
CREATE INDEX idx_book_embedding ON books(embedding) 
USING VECTOR 
WITH (distance=l2, type=hnsw, lib=vsag);

注意:向量索引的构建可能需要消耗一定的内存资源,构建速度取决于数据量大小。

4. 执行混合检索(Hybrid Search)

这是 SeekDB 最强大的功能点。假设我们要寻找“内容与计算机技术相关(向量接近 [0.15, 0.2, 0.85]),且价格低于 100 元”的图书。

SQL 语句编写:
使用 l2_distance 函数计算距离,结合 WHERE 子句过滤价格。

SELECT title, price, l2_distance(embedding, '[0.15, 0.2, 0.85]') as distance
FROM books
WHERE price < 100 AND category = 'Tech'  -- 标量过滤条件
ORDER BY distance ASC                    -- 按相似度排序(距离越小越相似)
LIMIT 5;

执行结果解读:
数据库引擎会先通过标量索引快速筛选出 price < 100 和 category = 'Tech' 的候选集,或者是利用向量索引找到近似结果后再过滤(具体取决于优化器的代价估算)。用户无需手动编写复杂的“先过滤后排序”逻辑。

5. 在 Python 中使用

在实际开发 AI 应用时,通常使用 Python。以下是结合 PyMySQL 的完整示例代码:

import pymysql
import json
# 1. 建立连接
conn = pymysql.connect(
host='127.0.0.1', 
port=2881, 
user='root@test', 
password='', 
database='test',
autocommit=True
)
cursor = conn.cursor()
# 2. 准备查询向量(模拟来自 Embedding 模型的结果)
query_vector = [0.15, 0.2, 0.85]
query_vector_str = json.dumps(query_vector)
# 3. 执行混合检索 SQL
sql = """
SELECT title, l2_distance(embedding, %s) as dist
FROM books
WHERE category = 'Tech'
ORDER BY dist ASC
LIMIT 3
"""
cursor.execute(sql, (query_vector_str,))
results = cursor.fetchall()
# 4. 输出结果
print("推荐图书:")
for row in results:
print(f"书名: {row[0]}, 距离: {row[1]}")
cursor.close()
conn.close()

通过上述流程,你已经成功在 OceanBase 中实现了一个基于向量的语义搜索功能,整个过程无需任何外部向量数据库参与。

应用场景

  1. 企业私有知识库问答(RAG)
    企业将内部文档(PDF、Wiki、代码库)切片并转化为向量存储在 OceanBase 中。当员工提问时,系统将问题向量化,在数据库中通过向量检索召回最相关的文档片段,结合 LLM 生成精准答案。优势在于数据不出库,权限管理直接复用数据库的 ACL 机制,保障了企业数据安全。
  2. 多模态以图搜图
    在电商平台场景中,将商品的图片特征提取为向量存入数据库。用户上传一张图片,系统通过 SeekDB 快速检索出视觉特征相似的商品。结合 SQL 的标量能力,还可以轻松叠加“只看有货”、“价格在 50-100 元之间”等业务筛选条件,提供精准的导购体验。
  3. 个性化推荐系统
    利用用户的浏览历史和行为数据生成用户画像向量,与内容库(文章、视频)的向量进行匹配。SeekDB 可以在毫秒级时间内从百万级内容中筛选出与用户兴趣向量距离最近的条目,实现实时的“猜你喜欢”功能,提升用户留存率。

QA

  1. 为什么选择使用 OceanBase SeekDB 而不是专门的向量数据库(如 Milvus, Pinecone)?
    专门的向量数据库通常需要独立部署,这意味着你需要维护两套数据系统(关系型 DB + 向量 DB),不仅增加了运维成本,还面临数据同步的一致性难题。SeekDB 实现了“一体化”,在同一个数据库内核中处理事务、分析和向量检索,大幅简化了 AI 应用的技术架构,且直接继承了 OceanBase 的金融级高可用能力。
  2. SeekDB 支持哪些索引类型?性能如何?
    目前主要支持 HNSW(适合对性能要求高、内存充足的场景)和 IVF(适合数据量极大、对内存敏感的场景)系列索引。在标准的 ANN Benchmarks 测试中,OceanBase 的向量检索引擎在千万级数据规模下的 QPS 和召回率表现优异,能够满足绝大多数在线推理业务的实时性需求(通常在 10ms-50ms 级别)。
  3. 现有的表可以增加向量列吗?
    可以。你可以像操作普通列一样,使用 ALTER TABLE 语句为现有的业务表添加 VECTOR 类型的列,并在该列上创建索引。这使得对旧系统的 AI 智能化改造变得非常平滑,无需迁移数据。
0已收藏
0已赞

相关推荐

找不到AI工具?在这试试!

输入关键词,即可 无障碍访问 必应 搜索,快速找到本站所有 AI 工具。

回顶部

zh_CN简体中文