23ai新特性之VECTOR 数据类型

在传统数据库中,向量数据只能通过 VARBINARY、VARCHAR2 等类型 “勉强存储”—— 不仅无法直接支持向量计算,还需开发者自行处理向量维度、精度、序列化 / 反序列化等细节,极易出错且性能低下。
Oracle 23ai 新增的VECTOR 数据类型,是专门为高维向量设计的原生数据类型,核心特性如下:

多精度支持,灵活适配不同场景

支持 8-bit(INT8)、16-bit(INT16)、32-bit(FLOAT32)、64-bit(FLOAT64) 四种精度的向量存储。例如:
文本嵌入向量(如 OpenAI 的 text-embedding-ada-002 生成 1536 维向量),可使用 FLOAT32 精度,平衡存储成本与计算精度;
图像 / 音频特征向量对精度要求极高的场景,可使用 FLOAT64 精度;
资源受限的边缘设备场景,可使用 INT8/INT16 精度,大幅降低存储与计算开销。

维度强制约束,保障数据一致性

定义 VECTOR 列时可指定固定维度(如VECTOR(1536)),数据库会强制校验插入数据的维度,避免因维度错误导致的检索失败。同时,支持动态维度(VECTOR),适配未知维度的向量场景,灵活性拉满。

内置向量计算函数,简化开发

原生提供数十种向量计算函数,无需开发者手动实现复杂算法:
相似度计算:VECTOR_DISTANCE(支持欧氏距离、余弦距离、曼哈顿距离)、VECTOR_SIMILARITY;
向量操作:VECTOR_ADD、VECTOR_MULTIPLY、VECTOR_NORMALIZE(向量归一化,提升检索准确率);
嵌入生成:VECTOR_EMBEDDING(直接在数据库内调用内置模型或外部 AI 模型生成向量,无需外部 ETL)。
示例:创建商品表,同时存储商品关系数据与文本嵌入向量

CREATE TABLE products (
    product_id NUMBER PRIMARY KEY,
    product_name VARCHAR2(100),
    price NUMBER(10,2),
    description_emb VECTOR(1536) -- 1536维文本嵌入向量,FLOAT32精度
);

Related Posts