向量引擎在数据库里的角色与价值:从存储、检索到企业级 RAG 的基石
在今天的企业应用里,文本、图片、日志、音视频等非结构化数据正在以指数级增长。把这类内容转成高维向量 embedding,并在数据库里高效检索相似内容,正是所谓的数据库向量引擎要解决的核心问题。它把传统关系型或多模型数据库的事务、权限、治理能力,与向量相似度检索结合在一起,让知识问答、推荐、相似项匹配、异常检测、RAG 等场景真正落地到生产系统。为了避免抽象空谈,先把一个合格的向量引擎拆成几块:向量
在今天的企业应用里,文本、图片、日志、音视频等非结构化数据正在以指数级增长。把这类内容转成高维向量 embedding,并在数据库里高效检索相似内容,正是所谓的数据库向量引擎要解决的核心问题。它把传统关系型或多模型数据库的事务、权限、治理能力,与向量相似度检索结合在一起,让知识问答、推荐、相似项匹配、异常检测、RAG 等场景真正落地到生产系统。
为了避免抽象空谈,先把一个合格的向量引擎拆成几块:向量数据类型与算子、近似最近邻索引、查询与过滤能力、与事务与安全治理的融合。不同数据库在这些方面的实现不尽相同,但逻辑拼图是一致的。
向量引擎在数据层面的变化,最直观的是新增了向量数据类型与相关 SQL 能力。比如 Oracle Database 23ai 原生提供了 VECTOR 列类型,支持把 embedding 与业务数据同表存储,并通过索引做精确或近似的相似度检索;文档里还给出最基本的 CREATE TABLE docs (... doc_vector VECTOR) 用法,这意味着你可以像管理数值与文本一样管理向量,并保留数据库原生的事务与权限模型。(Oracle Docs)
再看通用生态里的事实标准。PostgreSQL 借助 pgvector 扩展为列提供 vector 类型,并内置距离运算符与排序语法:<-> 表示 L2 距离,<=> 表示余弦距离,<#> 表示内积,既可做精确扫描,也可以加索引用近似方法提速。pgvector 支持两类 ANN 索引:HNSW 与 IVFFlat,并提供可调参数如 hnsw.ef_search、ivfflat.probes 与迭代扫描选项来权衡召回与延迟,这些都是工业界常用的控制旋钮。(GitHub, PostgreSQL)
同属搜索阵营的 Elasticsearch 在底层 Lucene 中采用 HNSW 做 kNN,并提供 dense_vector 字段与量化存储来节省内存占用与提升吞吐,例如 int8_hnsw、bbq_hnsw 等配置;官方文档明确说明了近似检索的速度与精度权衡与量化的重排策略。(Elastic)
云数仓也把向量引擎纳入核心能力。BigQuery 给出了 VECTOR_SEARCH 函数与 CREATE VECTOR INDEX 语法,并直接点出其索引实现可利用 IVF 与 Google ScaNN 的思想,索引加速时会牺牲部分召回,而不建索引时则采用暴力精确计算。(Google Cloud)
多模型数据库正在把向量与结构化查询真正地粘合在一起。SAP HANA Cloud 的 Vector Engine 宣称用 SQL 完成向量的增删改查,并面向 RAG 提供端到端示例与实践文章,这意味着你可以把 WHERE 的业务过滤与向量相似度排序自然组合,而无需把数据从主库搬到单独的向量库。(SAP Help Portal, SAP Community, SAP)
Redis 在高并发内存场景也将向量索引用作一等公民,支持 FLAT 精确检索与 HNSW、SVS-VAMANA 等近似索引,并且把向量检索与数字、文本、地理等过滤联合执行,从而在多租户与复杂筛选条件下依旧保持较低延迟。(Redis)
向量引擎要解决的关键问题
数据类型与距离度量
从数学层面,向量引擎需要支持多种距离度量以适配不同 embedding 模型与任务:欧氏距离 L2、余弦距离、内积等。以 pgvector 为例,直接通过操作符完成度量并可在 ORDER BY 排序时触发索引;这种把距离操作内联到 SQL 的方式,能与查询计划器无缝衔接。(GitHub)
索引与近似搜索
在亿级向量规模下,暴力精确搜索的代价不可接受,ANN 索引成为核心。HNSW 基于多层小世界图,查得快、构建慢、占内存;IVFFlat 先聚类再在候选簇内暴力搜索,构建快、内存小但召回略低;BigQuery 文档中提及 IVF 与 ScaNN 的组合思路正是工业界在召回与延迟之间的经典取舍。(GitHub, Google Cloud)
过滤与混合检索
企业搜索很少是纯相似度问题,往往伴随多维过滤与权限隔离。pgvector 给出把 WHERE 过滤与向量排序结合、并为过滤条件较稀疏时推荐建常规索引的做法;Redis 文档系统化阐述了在向量检索中应用布尔、数值、地理、全文等过滤与两种混合执行策略 BATCHES 与 ADHOC_BF,便于在低延迟下控制结果质量。(GitHub) (Redis)
压缩与量化
当向量规模达到数十亿时,存储与内存是主要瓶颈。Elastic 给出了 int8、int4、bbq 等量化策略与重排建议,核心思想是在索引阶段降低精度、查询阶段过采样并用原始浮点向量重排,最终兼顾速度与质量。(Elastic)
与事务与治理的融合
把向量列放在主库的直接收益是复用已有的 ACID、备份、审计与权限体系。Oracle 的 VECTOR 列就是这一路线的代表,它允许在同一事务里更新业务数据与嵌入,避免了跨系统一致性与落地延迟问题;HANA Cloud 的向量引擎同样强调用标准 SQL 管理向量并参与企业数据治理。(Oracle Docs, SAP Help Portal)
它为什么重要
让 RAG 与业务数据真正长在一起
向量引擎不是孤立的检索插件,而是把语义检索嵌入到你已经信任的数据库里。这样做的价值在于减少数据搬运、降低一致性与权限管理的复杂度,并能在一条查询里把 tenant_id、valid_from、category 等业务过滤与相似度排序同时满足,避免返回越权或过时的知识片段。HANA Cloud 与 BigQuery 的文档与实践文章都在演示这条路径。(SAP Help Portal, SAP Community, Google Cloud)
把延迟与成本压到工程可接受范围
ANN 索引与量化技术把 p95 延迟从秒级降到毫秒级,并让单机内存可以容纳更多向量;Elastic 对 dense_vector 的量化与自动重排就是面向成本与质量的工程解法。(Elastic)
把非结构化智能引入传统报表与应用
当向量列与普通列共存,很多过去难以实现的场景自然打开:客服系统能基于意图相似度把历史工单加入检索;供应链能用文本 embedding 做异常模式匹配;风控能在高维向量空间里做邻域密度检测,而这些都可以在熟悉的 SQL 里表达与治理。BigQuery 的 VECTOR_SEARCH 示例把这一切变得可复制。(Google Cloud)
可迁移、可替换、可演进
选择在主数据库里启用向量能力,意味着你的数据模型不会被绑定到某个特定的外部向量库协议。以 pgvector 为例,距离度量、索引类型、可调参数都通过标准 DDL 与 SET 选项暴露,迁移与升级成本可控。(GitHub)
运行实例与代码示范
下面给出两个可直接落地的小例子:一个是 PostgreSQL + pgvector 的端到端 SQL;另一个是用 Python 解释 L2 与余弦的差异并演示一个极简的向量检索。
在 PostgreSQL 中开启向量列与 HNSW 索引
-- 1) 安装扩展
CREATE EXTENSION IF NOT EXISTS vector;
-- 2) 建表:把 embedding 与业务字段同表管理
CREATE TABLE docs (
id BIGSERIAL PRIMARY KEY,
tenant_id INT NOT NULL,
category INT NOT NULL,
content TEXT,
embedding vector(384) -- 以 384 维为例
);
-- 3) 写入几条演示数据
INSERT INTO docs (tenant_id, category, content, embedding) VALUES
(100, 10, 'hello world', '[0.1, 0.2, 0.3, ...]'),
(100, 10, 'payment failed', '[0.11, 0.19, 0.31, ...]'),
(100, 20, 'refund policy', '[0.7, -0.1, 0.05, ...]'),
(200, 10, 'shipping delay', '[0.12, 0.21, 0.28, ...]');
-- 4) 创建 HNSW 近似索引,度量用余弦
CREATE INDEX ON docs USING hnsw (embedding vector_cosine_ops);
-- 5) 结合业务过滤做混合检索
-- 注意:把 WHERE 过滤写清楚,避免跨租户与跨类别污染
SET LOCAL hnsw.ef_search = 100; -- 提高召回
SELECT id, content
FROM docs
WHERE tenant_id = 100 AND category = 10
ORDER BY embedding <=> '[0.105, 0.205, 0.295, ...]' -- 余弦距离
LIMIT 5;
这段 SQL 所依赖的所有能力,都可以在 pgvector 官方文档里找到:vector 列类型、<-> 与 <=> 操作符、HNSW 索引建法、hnsw.ef_search 运行时调优,以及在带 WHERE 条件时的过滤与索引交互。(GitHub)
用 Python 演示 L2 与余弦,并写一个极简检索器
# 可直接运行:pip install numpy
import numpy as np
def l2_distance(a: np.ndarray, b: np.ndarray) -> float:
a = a.astype(np.float32)
b = b.astype(np.float32)
return float(np.linalg.norm(a - b))
def cosine_distance(a: np.ndarray, b: np.ndarray) -> float:
a = a.astype(np.float32); b = b.astype(np.float32)
na = np.linalg.norm(a); nb = np.linalg.norm(b)
if na == 0.0 or nb == 0.0:
return 1.0
return float(1.0 - np.dot(a, b) / (na * nb))
def topk(query, corpus, k=3, metric='cosine'):
dist = []
for idx, vec in enumerate(corpus):
d = cosine_distance(query, vec) if metric == 'cosine' else l2_distance(query, vec)
dist.append((idx, d))
dist.sort(key=lambda x: x[1])
return dist[:k]
# 构造一个小语料库
rng = np.random.default_rng(42)
corpus = rng.normal(size=(5, 4)).astype(np.float32)
query = corpus[0] + rng.normal(scale=0.01, size=(4,)).astype(np.float32)
print('L2 top3:', topk(query, corpus, 3, 'l2'))
print('Cosine top3:', topk(query, corpus, 3, 'cosine'))
这段代码直观展示了 L2 与余弦在排序上的差别:当向量长度差异较大时,余弦更偏向方向相似;当幅度也有意义时,L2 更敏感。
设计与调优要点
维度与度量匹配
文本类 embedding 常见维度为 384、768、1024、1536、3072;余弦与内积是更优先的选择,而需要考虑幅值意义时再选 L2。不同系统对维度上限与数据类型有各自约束,例如 pgvector 对 vector 列有维度上限,对 halfvec 与 sparsevec 提供不同上限;Elastic 的 dense_vector 提供 element_type 与 similarity 配置。(GitHub, Elastic)
索引类型与参数
HNSW 的 m、ef_construction 与查询时的 ef_search 直接影响召回与内存;IVFFlat 的 lists 与 probes 则对应训练簇数与查询探测数。pgvector 文档给出了经验起点,例如 lists ≈ rows/1000 与 probes ≈ sqrt(lists)。(GitHub)
过滤与多租户
对租户与权限维度较稀疏的过滤,优先为过滤列建常规 B-tree 或 GIN 索引并交由查询计划器裁剪候选集;否则使用向量索引后置过滤,并提升 ef_search 或开启迭代扫描以保证命中数。Redis 的混合策略说明了在不同密度分布下选择 BATCHES 或 ADHOC_BF 的取舍。(GitHub, Redis)
量化与重排
在 Elastic 场景下,先用 int8 或 bbq 降低内存,再在查询端过采样并用原始浮点向量重排,能在不显著牺牲质量的前提下显著提升可扩展性。(Elastic)
体系对比与生态图谱
为了更立体地理解,可以把代表性系统按路线归类:
- 原生关系型路线:Oracle 23ai 提供
VECTOR列与向量索引;PostgreSQL 借助 pgvector 提供vector列与 HNSW 与 IVFFlat,参数控制粒度细。(Oracle Docs, GitHub) - 搜索引擎路线:Elasticsearch 在 Lucene 中用 HNSW 并支持量化索引与重排,适合需要全文与向量混合检索的场景。(Elastic)
- 云数仓路线:BigQuery 用
VECTOR_SEARCH与向量索引承载大规模检索,并明确 IVF 与 ScaNN 的方法论。(Google Cloud) - 内存数据库路线:Redis 在高并发低延迟场景提供
FLAT与HNSW与SVS-VAMANA,并给出混合过滤执行策略。(Redis) - 企业多模型路线:SAP HANA Cloud Vector Engine 将向量与列存、时序、图等多模型能力并置,方便把 RAG 与事务系统打通。(SAP Help Portal)
把它用在真实系统里的思路
当你在做一个企业级 RAG 或相似搜索系统,落地步骤大致如下:
- 确定 embedding 策略:模型、维度、存储精度与更新频率,是否需要按语言或领域分桶。BigQuery 与 Oracle 文档都给出了在线或离线生成 embedding 的路径。(Google Cloud, Oracle Docs)
- 建模与治理:把
embedding列与tenant_id、valid_from、doc_type等权限与时效字段同表管理,复用数据库的审计与行级安全。 - 索引与过滤协同:为高基数过滤列加常规索引,向量列按数据规模选择 HNSW 或 IVF;对复杂过滤,结合系统提供的混合执行策略或启用迭代扫描。(GitHub, Redis)
- 质量与成本:通过离线评测确定
k、ef_search、probes与量化策略;Elastic 的量化与重排机制为大规模场景提供可操作的降本路线。(Elastic) - 端到端闭环:把检索结果回灌用于线上提示词构造或重排序,持续监控延迟、召回、时效性与越权率。
结尾的判断
数据库的向量引擎不只是一个新列类型或一套索引,它把检索这件事真正嵌入了企业数据的脉络里:同一份权限、同一套事务保障、同一条审计链路。在这个前提下,你才敢把相似度与语义理解引入关键业务流,而不是在多个系统之间来回搬运与折中。从 Oracle 的 VECTOR 列到 pgvector 的 HNSW 与 IVFFlat,再到 Elastic 的量化与 BigQuery 的 IVF 与 ScaNN,以及 Redis 的混合策略与 HANA Cloud 的一站式 RAG,技术路线虽然不同,但都在指向同一个方向:让语义检索成为数据库的内生能力,而不是外挂。
参考与延伸阅读
- pgvector 能力、操作符与 HNSW 与 IVFFlat 调优与过滤建议。(GitHub, PostgreSQL)
- Oracle Database 23ai
VECTOR列与相似度搜索概念。(Oracle Docs) - Elasticsearch
dense_vector、HNSW 与量化与重排。(Elastic) - BigQuery
VECTOR_SEARCH与 IVF 与 ScaNN。(Google Cloud) - Redis 向量索引、混合过滤与 SVS-VAMANA。(Redis)
- SAP HANA Cloud Vector Engine 简介与 RAG 实践。(SAP Help Portal, SAP Community)
如果你打算把以上思路运用到生产,请告诉我你的数据规模、延迟预算与过滤维度,我可以基于这些约束给出一份可执行的索引与查询配置草案。
火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。
更多推荐
所有评论(0)