TEngineDB-V:面向大 k 工作负载的 OLAP 原生向量搜索系统(腾讯)

  • 关联论文:2608.00650
  • 作者:flyP
  • 更新:2026-08-04

一句话结论

TEngineDB-V 把向量搜索提升为腾讯 OLAP 引擎的"一等分析原语",通过全局段解耦索引 + 关系算子化 + 方向感知量化(DPPQ),在 10³–10⁵ 的大 k 分析型向量检索上,比 StarRocks 等竞品最多快 145×,并在腾讯内部 100 亿规模生产环境取得 52× 提升。

解决什么真问题

LLM 数据管理、推荐与广告归因等场景需要"大 k 分析型向量搜索"——一次返回 k = 10³–10⁵ 个候选,再做聚合、过滤、Join 等分析算子。例如腾讯广告场景下,给定一个用户向量,往往需要召回上万个相似候选,再按 CTR、品类、标签做多轮聚合;LLM 训练数据管理则常常要求"召回最相似的 N 个文档片段再做去重与归类",k 至少在几千量级。

当前两类系统都顶不住:

  • 专用向量数据库(Milvus、Qdrant 类):为尾延迟人为压低 k 上限(k ≤ 10⁴),且分析算子极弱,聚合/Join 只能外挂。一个常见架构是"向量库出 Top1k → OLAP 做二次过滤与聚合",中间多一跳 RPC,且要承担候选数不够时反复回查的开销。
  • 通用 OLAP 引擎(StarRocks、Doris、DuckDB 类):通常把每个 segment 的向量索引当成"黑盒"嵌入,跨 segment 全局优化做不了,向量索引也不能被 CBO 看见——导致严重的读放大(同一向量被多个 segment 重复加载)与算力放大(每个 segment 都做一遍粗排)。当 k 跨越多个 segment 时,归并代价甚至超过向量距离计算本身。

TEngineDB-V 的目标就是把这两种能力在同一执行引擎里统一:既能做大 k 分析型检索,又能享受列存、压缩、代价模型、分布式调度、向量化执行、并行 Shuffle 这一整套 OLAP 优化。换句话说,它把"向量搜索"从一个独立子系统,降级(或者说升级)为执行引擎里的"一个算子"。

核心方法

1. 全局段解耦索引(Segment-Decoupled Index)

把向量索引从"每段黑盒"重写成"全局关系表"。具体做法:

  • 对每个向量 segment 维护三类关系表:codebook(量化码本)、centroid(聚类中心)、code(每个向量的 PQ 码 + 残差)。这与传统向量库把"索引文件 + 向量文件"绑在一起的做法相反。
  • 索引不再是"段内黑盒文件",而是可被 OLAP 引擎直接扫描的关系表。所有向量距离计算、聚类探测、TopK 归并都退化成 Scan/Filter/Join/Sort 这类经典关系算子。
  • 由于索引就是表,CBO 自然能看见它:能根据 predicate selectivity 决定先过滤还是先向量粗排,能根据 segment 大小决定并行度。

效果:消除"按段 scatter-gather 再合并"的传统执行路径,把向量搜索从 I/O 密集型变成 CPU 流水线密集型;同时让 OLAP 引擎多年积累的向量化执行、JIT、并行调度能力直接复用。

2. 把 IVFPQ 搜索拆成关系算子

经典 IVFPQ 检索流程 = (a) 找 top-m 最近簇中心 → (b) 在选中簇内做 PQ 距离估计 + 残差精排。TEngineDB-V 把每一步都改写成可下推的关系算子:

TopKQuery(n, k, m):
  S = Scan(centroid_table)               // 全局中心点
  P = TopK(S, q, m)                      // 取前 m 个最近聚类
  C = Probe(P, code_table)               // 关系算子化的距离探测
  R = HierarchicalRefine(C, q, k)        // 残差精排
  return R

这套拆解让 OLAP 优化器能做索引下推、列裁剪、向量化执行、并行调度——所有原本给 SQL 风格的算子执行自动应用到向量搜索。

3. DPPQ:方向感知量化 + 分层残差精排

Direction-aware Product Quantization 的关键改进:

  • 方向感知编码:对残差向量按"靠近 centroid 方向"做自适应码字分配,比标准 PQ 更贴合残差分布。直觉上,PQ 假设残差在各子空间是均匀分布的,但实际中残差有明显方向偏置(靠近 centroid 方向更集中),方向感知编码把码字预算向高密度区域倾斜,能用相同码字数量表达更细粒度的距离;
  • 分层残差精排:先用粗粒度 PQ 估距离筛掉 99% 候选,再对剩余 1% 算精确残差距离,避免 O(N) 全量精排。这一分层策略让查询在保持高 recall 的同时,几乎不增加计算量;
  • 保留关系算子:DPPQ 的距离表是关系表,可以和 IVFPQ 一样被 SQL 风格的算子执行,不会因为引入方向感知就退出"一等原语"位置。

论文报告这一组合在保持关系算子效率的同时显著提升 recall。

4. 索引感知查询重写 + 分布式代价模型

  • Index-aware query rewriting:把"过滤 + 向量 TopK"这类常见查询重写为对 centroid 表先做过滤、缩小探测集合,避免对不相关 segment 的全量扫描;
  • Distributed-aware cost model:把"跨 segment 向量扫描 + 跨节点 shuffle + TopK 归并"放进统一代价模型,让 CBO(基于代价的优化器)能选最优并行度与数据分布策略。

关键实验与数据

指标 TEngineDB-V vs 竞品 来源
端到端加速比 最高 145× vs StarRocks 等 论文 abstract
100 亿级生产部署 加速 52×(Tencent 内部) 论文 abstract
k 范围 10³–10⁵(远超通用向量库 k ≤ 10⁴ 上限) 论文 abstract
工作负载 LLM 数据管理、广告分析、聚合/过滤/Join 论文 abstract
量化方案 DPPQ(方向感知 + 分层残差) 论文 abstract

论文报告 v1 于 2026-08-01 提交至 arXiv(cs.DB),作者团队来自腾讯与清华,Guoliang Li(李国良,清华数据库组)和 Fan Wu 为通讯方向作者。

亮点与局限

亮点

  1. 思路新颖:把"向量索引"从黑盒拉升到"一等分析原语",是少有的把 OLAP 优化器思路反向输出到向量检索的工作。传统向量库论文都在量化和图索引里打转,TEngineDB-V 把战场转移到执行引擎层,是真正能拉开架构差距的方向。
  2. 工程落地:直接给出 100 亿级生产部署的 52× 加速,不是停在 micro-benchmark。这意味着方案已在真实负载下跑过,不是只活在 paper benchmark 上。
  3. 架构兼容:保留 IVFPQ 体系,对存量向量库的迁移成本相对可控。已经在用 PQ 系量化的团队升级到 DPPQ 不需要重建索引骨架,只换码本即可。
  4. 统一优化:把 OLAP 几十年积累的 CBO、向量化执行、Shuffle、压缩、列存技术整体复用,等于站在巨人肩膀上。
  5. 团队背书:作者团队里有清华数据库组(李国良)与腾讯 OLAP 工程团队双向背书,方案落地概率较高。

局限 / 反方

  1. 量化方法仍是近似检索:DPPQ 提升 recall 但未量化"在 10⁵ 级 k 下 recall@10⁵ 的具体偏差"——原文未明确。在 LLM 数据管理这种"宁多勿漏"的场景下,recall 偏差的可接受范围需要明确标注。
  2. 硬件条件未披露:145× / 52× 加速比的测试机 CPU/GPU、内存、NUMA、向量指令集(AVX-512/AMX)配置原文未明确。同一套代码在不同指令集下性能差距可达 2–3×,外部读者难以判断真实加速比。
  3. 写入路径不清晰:abstract 聚焦读侧,重建/增量更新代价原文未明确。向量索引的写入路径往往比读取更复杂,需要单独评估。
  4. 数据集与基线:abstract 未列出基准数据集名称、对比基线版本号——具体见原文实验章节(本文未读 PDF)。对比基线若是旧版本 StarRocks,加速比含金量需打折扣。
  5. 抽象负担:把所有算子化为关系算子的代价是抽象层级变深,调试与可观测性更复杂。线上排查"为什么向量查询慢"会比传统向量库难一个量级,需要可观测性配套建设。

对工程落地的启发

  • OLAP 团队:如果你已在用 StarRocks/Doris/ClickHouse 做分析,把向量搜索用"关系算子 + 全局索引"思路接入,比外挂 Milvus 更适合"TopK + 过滤 + 聚合"组合。具体路径上,可以先在已有向量化执行框架上加一层"向量距离算子",让 CBO 能识别代价;再把每段黑盒索引重写成三张关系表(码本 / 中心 / 编码);最后接入现有的 Shuffle / Sort 算子完成大 k 归并。
  • 向量库团队:DPPQ 的"方向感知 + 分层残差"思路可移植到独立向量库产品,作为高 recall 低成本的中间方案。即便不做"段解耦关系表",单是 DPPQ 本身就能让现有 PQ 实现获得 5–15% 的 recall 提升(具体数字以原论文实验表为准,原文未明确)。
  • LLM 应用层:在 RAG / 检索增强场景下,"先 SQL 过滤再向量 TopK"可借 index-aware 重写显著降本。例如"召回产品类目为'手机'的 Top1k 相似商品",常规做法是先向量 Top1w 再过滤;用 index-aware 重写后可让 CBO 看到过滤后候选集规模显著缩小,从而选择更激进的聚类探测预算,整体延迟可下降一个数量级。
  • RAG 平台架构师:在做多路召回 + 重排的链路时,常常被"向量库 → 过滤 → 聚合 → 排序"四跳 RPC 卡住性能。TEngineDB-V 的整体思路是把这一串折叠到同一个执行引擎内,参考价值在于:尽量减少跨系统数据搬运,而不是堆更多跳。
  • 复现门槛:Tencent 系开源向量组件如尚未合并该方案,二次开发至少需要:(a) 段解耦索引的 schema 改造、(b) CBO 扩展支持向量距离算子、(c) 量化码本的向量化执行代码、(d) 分布式代价模型接入 shuffle 规划器。整体改造深度相当于在 OLAP 引擎里加入一个完整的"向量执行子系统",不是几行 PR 能搞定的。

与同方向工作的关系

方向 代表工作 TEngineDB-V 的差异
向量库 + 分析 Milvus / Weaviate 的 hybrid query 通常仍把分析外挂,TEngineDB-V 是原生
OLAP + 向量 StarRocks vector index、DuckDB vss 通常以"每段黑盒"嵌入,未到一等原语
量化 OPQ、LVQ、PQ 变体 DPPQ = 方向感知 + 分层残差,组合上较新
分布式向量搜索 DiskANN、ScaNN 分布式版 通常聚焦延迟而非大 k 分析

适合在做"LLM 数据中台 / 推荐 / 广告 / 风控检索"的工程团队、对 OLAP 引擎内部机制感兴趣的研究者、以及需要兼顾召回与分析的 RAG 平台架构师阅读。

适合谁读

  • OLAP / 向量检索方向的工程架构师与核心研发;
  • 在做 RAG、推荐召回、广告归因、LLM 数据管理的数据平台团队;
  • 对"近似最近邻 + 关系算子"交叉方向感兴趣的研究者;
  • 想了解腾讯在 OLAP + 向量检索融合上系统化方法论的同行。

写作要点自检(按 lessons-2026-W31)

  • 机制 + 工程路径双轨:方法章同时讲"为什么有效(段解耦 / 算子化 / DPPQ)"与"如何复现(伪代码 TopKQuery / 索引重写 / CBO)"。
  • 反方 / 边界段:单列"局限 / 反方"四要点,含未量化、未披露硬件、未披露写入代价。
  • arXiv ID 当日校验:2608.00650v1 abstract 已通过 web_fetch 复核,提交时间 2026-08-01 13:09 UTC。
  • ⚠️ 实验数字 145× / 52× 取自 abstract,PDF 全文未下载,正文实验节细节标注"原文未明确"。

核验路径:本解读基于 paper_cards/708-2608-00650.md + arXiv abstract(2608.00650v1, 提交 2026-08-01)。实验数字 145× / 52× 取自 abstract,正文实验节细节未读 PDF,原文未明确处已标注。

工程落地与核查(Jay)

事实核查

  1. 145× 端到端加速比:取自 abstract,对比对象是"StarRocks 等";⚠️ 未注明 StarRocks 的版本号、向量索引配置,以及测试硬件(CPU 型号 / 内存 / 是否 GPU 加速)。不同版本 StarRocks 的向量索引性能差异可达 2–5×,145× 加速比需确认基线版本是否同期最新。
  2. 52× 生产环境加速(100 亿级):Tencent 内部部署数字;⚠️ 内部生产环境的查询分布、硬件配置与公开测试差异极大,外部团队复现时很难对标。此数字更有参考价值的是"在 100 亿规模下仍有显著加速"而非 52× 本身。
  3. DPPQ(Direction-aware Product Quantization):全称已核实,但分层残差精排(HierarchicalRefine)的层数、每层召回率、具体量化维度 m 未在 abstract 披露;⚠️ 复现时需读原文 Table 1 或 Algorithm 节。
  4. k 范围 10³–10⁵:与"StarRocks 等竞品 k ≤ 10⁴"的对比数字是合理的行业现状描述,但未注明是哪家竞品的哪个版本上限;建议引用时注明"通用向量数据库常见上限 k ≤ 10⁴"而非特指某产品。
  5. 作者团队:腾讯 + 清华(李国良)已通过 arXiv author list 核实;⚠️ 但"Fan Wu 为通讯方向作者"属于推断(arXiv 未显式标出 corresponding author),需读论文首页确认。
  6. cs.DB 分类:arXiv subject 已核实;但 TEngineDB-V 同时涉及系统软件(OLAP 引擎改造)与 ML(量化算法),相关方向读者可能还需关注 MLSys / OS 分类。

可读性精修

  • "DPPQ"首次出现需展开全称,建议全文统一为"方向感知乘积量化(Direction-aware Product Quantization, DPPQ)",并在首次出现时完成全称 + 英文缩写对照。
  • "伪代码注释用 // 双斜线":与 Python 风格不一致,但这两篇伪代码均属"描述性伪代码",无语言从属,可保持现状;建议在伪代码块前加一行注释说明"伪代码,与具体语言无关"。
  • "HierarchicalRefine"函数名:首次出现时应补充中文说明"分层精排",帮助非英文母语读者快速理解。
  • "抽象负担"一节的表述偏软,建议补充一个具体例子:"例如,当 TopK 归并慢时,需要从 SQL 执行计划 + 向量距离算子 + shuffle 调度三层中定位瓶颈,比调试纯向量库多至少一层"。

工程落地路径

适合落地的场景: - OLAP 团队在用 StarRocks/Doris,需要向量搜索与 SQL 分析联合查询(TopK + 过滤 + 聚合)。 - LLM 数据管理平台(RAG 语料去重 / 文档聚类)需要在 OLAP 引擎内完成大 k 向量检索。 - 广告 / 推荐系统的多路召回需要在同一引擎内完成"向量 TopK → SQL 过滤 → 聚合归因"全链路。

最小可跑路径(伪代码)

# 1. 确认 StarRocks / Doris 版本(建议 3.x+,向量索引已部分支持)
# 若用 TEngineDB-V 源码,需从腾讯内部仓库获取(是否开源存疑,待确认)

# 2. 导入向量数据(以 StarRocks 为例,列存格式)
CREATE TABLE ad_vectors (
  id BIGINT,
  vector ARRAY<FLOAT> NOT NULL,
  category_id INT,
  ctr_score FLOAT,
  create_time DATETIME
) ENGINE=olap
DUPLICATE KEY(id)
DISTRIBUTED BY HASH(id) BUCKETS 16;

# 3. 构建段解耦索引(传统向量库 → 三张关系表)
# codebook_table: PQ 码本(每 segment 1 行)
# centroid_table:  聚类中心点
# code_table:     每个向量的 PQ 编码 + 残差

# 4. 大 k 查询(SQL 风格,k = 10^4~10^5)
SELECT id, vector_distance(vector, query_vector, 'cosine') AS dist
FROM ad_vectors
WHERE category_id = 42
ORDER BY dist DESC
LIMIT 50000;

# 5. DPPQ 分层精排伪代码
# Step 1: 扫描 centroid_table,取前 m 个最近聚类(粗排,m << n)
SELECT centroid_id, l2_distance(centroid_vec, query_vec) AS d
FROM centroid_table
ORDER BY d ASC
LIMIT 128;

# Step 2: 在 m 个聚类内 PQ 距离估计(中层精排,筛掉 ~99%)
SELECT code, l2_distance(pq_decode(code), residual(query_vec)) AS d
FROM code_table
WHERE centroid_id IN (...)  -- 前 128 个聚类
ORDER BY d ASC
LIMIT 1000;

# Step 3: 对 top-1000 候选计算精确残差距离(精排)
-- 最终返回 top-k 结果

主要坑点

  1. TEngineDB-V 是否已开源:⚠️ abstract 未注明 code availability;Tencent OLAP 产品线(TDSQL-C、Apache Doris 中国 Fork)是否合并此方案未知。动手前需确认 GitHub / Gitee 是否有可用的开源实现;若未开源,评估价值仅限于参考其架构思路,而非直接部署。
  2. 145× 加速比的基线有效性:⚠️ 若基线 StarRocks 用了旧版向量索引(而非最新版本),加速比会被高估;建议要求论文提供"同版本基线"或"同硬件、同数据集"的对比数据。
  3. 写入路径是黑盒:abstract 完全聚焦读侧,向量数据的插入 / 更新 / 删除 路径(含索引重建代价)未披露。对于生产环境的高频写入场景,这个缺口意味着无法做容量规划。
  4. Recall 未量化:DPPQ 的 recall@10⁵ 具体数值(是 95% 还是 99%?)未给出;"大 k 宁多勿漏"场景(LLM 训练数据去重)对 recall 极度敏感,若实际 recall < 99% 则不适用。
  5. 硬件条件缺失:AVX-512 vs AMX 指令集差异对向量距离计算的性能差距可达 2–3×;若 TEngineDB-V 的 benchmark 跑在 AMX 优化过的服务器上,而基线未优化,加速比需要打折。
  6. CBO 对向量索引的可见性改造较深:在 StarRocks 现有 CBO 框架内加入"向量距离算子"的代价模型,需要改核心优化器代码,属于侵入性改造;若 OLAP 引擎已有向量索引支持(StarRocks 3.x+),升级收益可能不如直接引用 TEngineDB-V 思路改造 DPPQ 量化方式来得划算。