首批通过分布式安全可靠测评,为关键业务系统打造
存储向量数据
更新时间:2026-04-05 15:40:48
本文档介绍了如何在 OceanBase 中统一存储非结构化数据、半结构化数据和结构化数据。这不仅充分利用了 OceanBase 数据库的基础能力,还为混合搜索提供了强大支持。
存储原理
OceanBase 数据库能够存储不同模态的数据,支持混合搜索的原理是将不同模态的数据(如文本、图片、视频等)统一转换为向量,通过计算向量之间的距离来实现搜索。混合搜索分为两种方式:简单搜索基于单个向量的相似度搜索,复杂搜索则涉及向量与标量的混合搜索。
由于向量搜索本身具有近似性,实际应用中需结合多种手段提高精度,精确的搜索结果才能为业务带来更大价值。
配置向量索引内存
OceanBase 向量搜索通过设置 ob_vector_memory_limit_percentage 配置向量索引内存。
向量搜索功能默认启用。默认值为 0 表示自适应模式,即系统自动调整租户中的向量索引数据的内存占用比例,无需手动调整:
- 租户实际内存为 8GB 及以下时,该值自适应为
40。 - 租户实际内存为 8GB 以上时,该值自适应为
50。
创建向量列
下述示例体现了一张表同时存储了向量数据、空间数据和关系型数据。向量列的数据类型为 VECTOR,并且必须在创建时指定维度,维度最高支持 16000;空间列的数据类型为 GEOMETRY:
CREATE TABLE t (
-- 存储关系型数据(结构化数据)
id INT PRIMARY KEY,
-- 存储空间数据(半结构化数据)
g GEOMETRY,
-- 存储向量数据(非结构化数据)
vec VECTOR(3)
);
使用 INSERT 语句插入向量数据
一旦创建了包含 VECTOR 数据类型列的表,就可以直接使用 INSERT 语句将向量插入表中。在插入数据时,向量必须与表定义时指定的维度相匹配,否则会报错。这种设计确保了数据的一致性和查询的效率。向量的格式采用标准的浮点数数组表示,每个维度的值必须是有效的浮点数。这是一个简单的示例:
INSERT INTO t (id, g, vec) VALUES (
-- 插入结构化数据
1,
-- 插入半结构化数据
ST_GeomFromText('POINT(1 1)'),
-- 插入非结构化数据
'[0.1, 0.2, 0.3]'
);