开源OLAP引擎调研学习
学习目标
研究一下引擎的向量、标量查询以及混合查询的方案。并搞清楚混合查询的原理。
| 引擎名 | 链接 |
|---|---|
| ClickHouse | 待补充 |
| Doris | 待补充 |
| Milvus | 待补充 |
| krypton | 待补充 |
| CloudSearch | 待补充 |
| LanceDB | 待补充 |
| VikingDB | 待补充 |
| Hbase | 待补充 |
向量查询,标量查询,混合查询
向量查询、标量查询、混合查询的核心区别在于 “查询对象的数据类型” 和 “匹配逻辑”—— 前两者针对单一数据类型(向量 / 标量),后者则结合两种类型实现更精准的检索。
标量查询: 传统 “精确 / 范围匹配”
标量(Scalar)是指单一数值或离散值(如整数、字符串、日期、布尔值等),标量查询是最传统、最基础的查询模式,核心是 “基于精确相等或范围条件筛选数据”,对应我们日常使用的 SQL 查询、键值检索等场景。
- 核心逻辑
- 数据形态:每条数据的查询维度是 “标量字段”(如 user_id=123、price>100、status=“active”)。
- 匹配规则:基于 “等式(=`)”“不等式(>、<、≠)”“范围(BETWEEN)”“模糊匹配(LIKE)” 等逻辑筛选,结果是 “满足条件的完整数据记录”。
- 计算复杂度:低,依赖索引(如 B+ 树、哈希索引)快速定位,无需复杂数学计算。
- 典型应用场景
- 关系型数据库查询(SQL):如 SELECT * FROM orders WHERE user_id=456 AND create_time BETWEEN ‘2024-01-01’ AND ‘2024-01-31’。
- 键值存储检索(如 Redis):如 GET user:123(精确匹配键)、ZRANGE scoreboard 0 10(范围匹配有序集合)。
- 传统搜索引擎的过滤条件:如在电商搜索中,“价格 < 500 元”“品牌 = 华为” 等筛选条件。
- 技术特点
- 精确性:结果要么 “满足条件”,要么 “不满足”,无 “相似度” 概念。
- 索引依赖:高效查询依赖标量索引(如 B+ 树适合范围查询,哈希索引适合精确查询)。
- 适用数据:结构化数据(如数据库表、JSON 中的键值对)。
向量查询(Vector Query):“相似度匹配” 检索
向量(Vector)是指由多个数值组成的有序数组(如 [0.12, 0.34, -0.56, 0.78]),通常用于表示 “非结构化数据的特征”(如文本、图片、音频、视频)。向量查询的核心是 “计算查询向量与数据库中所有向量的相似度,返回相似度最高的 Top-N 结果”,是 AI 检索(如语义搜索、图像检索)的核心技术。
- 核心逻辑
- 数据形态:每条数据被转化为 “向量特征”(如通过 BERT 模型将文本转化为 768 维向量,通过 ResNet 模型将图片转化为 2048 维向量),存储在 “向量数据库”(如 Pinecone、Milvus、FAISS)中。
- 匹配规则:不依赖 “相等 / 范围”,而是通过向量相似度算法计算 “查询向量” 与 “数据向量” 的距离 / 相似度,常用算法包括:
| 算法类型 | 计算逻辑 | 适用场景 |
|---|---|---|
| 欧几里得距离(L2) | 计算两向量在空间中的直线距离 | 低维向量(<100 维) |
| 余弦相似度(Cosine) | 计算两向量的夹角余弦值(-1~1) | 高维向量(如文本、图像) |
| 曼哈顿距离(L1) | 计算两向量各维度差值的绝对值之和 | 对异常值敏感的场景 |
- 计算复杂度:高(高维向量直接遍历计算复杂度为 O (n*d),n 为向量总数,d 为维度),需依赖 “向量索引”(如 IVF、HNSW、FAISS-IVF)优化为 O (log n) 复杂度。
- 典型应用场景
- 语义搜索:用户输入 “如何提升睡眠质量”,系统将查询转化为向量,匹配 “相似语义” 的文章(而非关键词完全匹配)。
- 图像检索:上传一张 “猫的图片”,返回数据库中所有 “相似猫图”(即使姿态、背景不同)。
- 推荐系统:根据用户历史行为向量(如点击、购买),匹配 “相似兴趣” 的商品 / 内容。
- AI 对话:将用户提问向量与知识库向量匹配,生成精准回答(如 RAG 检索增强生成)。
- 技术特点
- 模糊性(相似度优先):结果按 “与查询的相似度排序”,而非 “非黑即白的匹配”。
- 高维依赖性:主要处理高维向量(几十到几万维),需专门的向量数据库支持。
- 无结构化数据适配:核心解决 “文本、图像、音频” 等非结构化数据的检索问题(传统标量查询无法处理)。
混合查询(Hybrid Query):“标量过滤 + 向量相似度” 结合
混合查询是标量查询与向量查询的结合—— 先通过标量条件 “缩小数据范围”(过滤无关数据),再在筛选后的子集内进行 “向量相似度匹配”,最终返回 “满足标量条件且向量相似度最高” 的结果。其核心价值是 “兼顾精准过滤与语义相似度,提升检索效率与准确性”。
- 核心逻辑
- 两步检索流程:
- 标量过滤(粗筛):先通过标量条件(如 category=“电子产品”、price<2000、create_time>2024-01-01)筛选出 “候选数据集”(排除无关数据,减少后续向量计算量)。
- 向量匹配(精排):在候选数据集中,计算查询向量与每条数据向量的相似度,按相似度排序返回 Top-N 结果。
- 关键优势:解决了 “纯向量查询计算量大” 和 “纯标量查询无法处理语义匹配” 的痛点,平衡效率与精度。
- 典型应用场景
- 电商商品检索:用户查询 “2000 元以内的相似耳机”—— 先通过标量条件 category=“耳机” AND price<2000 筛选候选商品,再按 “与用户历史购买耳机的向量相似度” 排序。
- 文档管理系统:查询 “2024 年发布的、与‘AI 安全’相关的技术文档”—— 标量条件 year=2024 AND type=“技术文档” 过滤,再按文本向量相似度匹配 “AI 安全” 语义。
- 企业知识库检索:查询 “属于‘研发部门’的、与‘员工培训’相关的视频”—— 标量条件 dept=“研发” AND format=“video” 筛选,再按视频特征向量(如标题、字幕转化的向量)匹配语义。
- 技术特点
- 多引擎协同:需同时支持 “标量索引(B+ 树、哈希)” 和 “向量索引(HNSW、IVF)”,部分数据库通过 “混合索引引擎” 实现(如 Milvus、Weaviate、Elasticsearch 8.x+)。
- 灵活性:可灵活调整标量过滤的严格程度和向量相似度的权重,适配不同业务需求(如对精度要求高则缩小标量范围,对召回率要求高则放宽标量范围)。
- 性能优化:核心在于 “粗筛阶段尽可能减少候选集大小”,降低后续向量计算的开销(如标量过滤后候选集从 100 万条缩减到 1 万条,向量计算量减少 99%)。
对比
| 维度 | 标量查询(Scalar Query) | 向量查询(Vector Query) | 混合查询(Hybrid Query) |
|---|---|---|---|
| 查询对象 | 标量字段(数值、字符串、日期等) | 高维向量(文本、图像等特征) | 标量字段 + 高维向量 |
| 匹配逻辑 | 精确相等 / 范围筛选(是 / 否) | 相似度计算(按相似度排序) | 标量过滤(粗筛)+ 向量匹配(精排) |
| 计算复杂度 | 低 | (依赖 B+ 树 / 哈希索引) | 高(依赖向量索引优化) |
| 核心解决问题 | 结构化数据的精准筛选 | 非结构化数据的语义 / 特征匹配 | 结构化过滤 + 非结构化语义匹配 |
| 典型工具 | MySQL、PostgreSQL、Redis | Pinecone、FAISS、Milvus(纯向量) | Milvus、Weaviate、Elasticsearch 8.x |
- 标量查询是 “传统精准筛选”,适用于结构化数据的条件检索;
- 向量查询是 “AI 时代的语义匹配”,适用于非结构化数据的相似性检索;
- 混合查询是 “效率与精度的平衡”,通过 “标量粗筛 + 向量精排” 覆盖更复杂的业务场景(如电商、知识库、推荐系统)。