news 2026/9/5 7:02:36

什么是向量数据库?

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
什么是向量数据库?

前言:传统数据库在 AI 时代的“力不从心”

在关系型数据库(如 MySQL、PostgreSQL)或传统检索引擎(如 Elasticsearch)统治的时代,数据检索的核心逻辑建立在标量精确匹配(Exact Match)倒排索引(Inverted Index)之上:

  • 查询用户 ID 等于 10001 的记录(B+ Tree 索引点查,毫秒级);

  • 查询包含关键字“退款”且金额大于 500 的订单(范围索引 + 组合过滤);

  • 模糊匹配商品名称中包含“手机”的文本(分词 + 倒排索引)。

然而,随着大语言模型(LLM)、多模态大模型和 RAG(检索增强生成)技术的爆发,人类产生的数据超过 80% 转化为文本、图片、音视频、代码片段和用户行为等非结构化数据

计算机无法直接对一段自然语言或一张图片建立 B+ 树。深度学习技术通过 Embedding 模型将非结构化数据映射为高维连续空间中的特征向量(如 768 维、1536 维)。此时,业务查询的需求变成了:“从数据库的 5000 万个向量中,找出在空间距离上与当前提问最接近的前 10 个向量。”

如果使用传统数据库执行该查询,系统只能发起全表扫描,将每一行记录的高维数组取出并计算距离,算法复杂度为O(N * D)(N 为数据量,D 为向量维度)。在千万级数据量下,单次查询可能耗费数十秒乃至数分钟,直接导致系统崩溃。

向量数据库(Vector Database)正是为解决高维空间海量特征向量的高速持久化、索引与语义相似度召回而生的专用基础设施。

一、 核心概念解构:向量数据库究竟在存什么、查什么?

1.1 向量表征与语义空间

当一段文本输入到 Embedding 模型(如text-embedding-3-smallbge-m3)后,模型会输出一个固定维度的实数数组:

文本 A:"我非常喜欢这款轻薄便携的笔记本电脑" ➔ Embedding 向量 A: [0.024, -0.015, 0.341, ..., 0.089] (共 1536 个浮点数) 文本 B:"这台电脑很轻,出差携带非常方便" ➔ Embedding 向量 B: [0.021, -0.018, 0.338, ..., 0.091] (共 1536 个浮点数) 文本 C:"今天午餐吃的牛肉拉面味道很正宗" ➔ Embedding 向量 C: [-0.412, 0.521, -0.009, ..., -0.211] (共 1536 个浮点数)

在数学几何空间中,语义含义相似的文本,其向量在空间中的夹角越小、距离越近;语义无关的内容,距离越远。

高维语义空间映射示意: 维度 2 (便携性) ▲ │ ● 文本 A (轻薄笔记本) │ ● 文本 B (便携电脑) │ (空间距离极近) │ │ ● 文本 C (牛肉拉面) │ (空间距离极远) └───────────────────────────────► 维度 1 (科技属性)

1.2 空间相似度度量标准(Metrics)

向量数据库根据配置的距离度量标准判断向量之间的相似性。常见的度量指标包括以下四种:

1. 余弦相似度(Cosine Similarity)

度量两个高维向量之间夹角的余弦值,关注向量的方向指向而非长度大小,取值范围在[-1, 1]之间(1 表示方向完全相同):

Cosine_Similarity(A, B) = (A · B) / ( ||A|| × ||B|| )
2. 点积 / 内积(Dot Product / Inner Product)

如果向量已经过单位长度归一化(||A|| = 1||B|| = 1),点积等价于余弦相似度,计算时不包含开根号除法,硬件执行效率最高:

Dot_Product(A, B) = A · B = ∑ (A_i × B_i)
3. 欧几里得距离(Euclidean Distance / L2 Distance)

度量高维空间中两点之间的绝对几何直线距离,值越小表示两点越相近:

L2_Distance(A, B) = sqrt( ∑ (A_i - B_i)^2 )
4. 曼哈顿距离(Manhattan Distance / L1 Distance)

度量各个坐标轴绝对差值的总和:

L1_Distance(A, B) = ∑ |A_i - B_i|

二、 算法内核:ANN(近似最近邻搜索)技术演进

传统搜索要求绝对精确匹配(KNN,k-Nearest Neighbors),但在高维空间中,维度灾难(Curse of Dimensionality)使得任何传统树状索引(如 KD-Tree、R-Tree)退化为线性全表扫描。

为了将查询耗时压缩到数毫秒,向量数据库全面采用了ANN(Approximate Nearest Neighbor,近似最近邻搜索)算法:在允许极小精度损失(例如 95%~99% 召回率)的前提下,将搜索时间复杂度从O(N)降低至O(log N)

┌────────────────────────────────────────────────────────────────────────┐ │ 主流 ANN 算法族系演进图 │ ├──────────────────┬─────────────────────────────┬───────────────────────┤ │ 算法类型 │ 代表算法 │ 核心优缺点 │ ├──────────────────┼─────────────────────────────┼───────────────────────┤ │ 1. 暴力穷举 │ Flat (Brute-Force) │ 100% 召回率,速度极慢 │ ├──────────────────┼─────────────────────────────┼───────────────────────┤ │ 2. 空间划分/倒排 │ IVF-Flat / IVF-SQ8 │ 内存适中,建索引快 │ ├──────────────────┼─────────────────────────────┼───────────────────────┤ │ 3. 基于图拓扑 │ HNSW / NSW │ 检索极快,召回率极高,│ │ │ │ 内存消耗大,建索引慢 │ ├──────────────────┼─────────────────────────────┼───────────────────────┤ │ 4. 向量量化压缩 │ PQ / SCaNN │ 内存占用极低,精度略损│ └──────────────────┴─────────────────────────────┴───────────────────────┘

2.1 Flat(暴力全量计算)

  • 原理:不建立任何索引结构,Query 进来后逐个向量进行点乘计算并排序。

  • 适用场景:10 万以内规模的小型数据集,或作为离线评估其他算法召回率的基准(Ground Truth)。

2.2 IVF(Inverted File Index,倒排文件索引)

  • 原理:通过 K-Means 聚类算法,将高维空间中的所有向量聚合成若干个 Voronoi 单元格(Centroids 质心)。

  • 检索流程

    1. 查询时,先计算 Query 向量与所有聚类中心的距离;

    2. 挑选出距离最近的nprobe个中心单元;

    3. 仅在这几个单元格内部的候选向量中进行精确比对。

  • 特点:通过跳过大量无关空间单元,检索速度提升几十倍,但如果跨边界向量未被聚类覆盖,可能丢失部分边界召回。

IVF 空间划分示意: ┌─────────────────┬─────────────────┐ │ 单元格 1 │ 单元格 2 │ │ ● │ ▲ │ │ (中心点 A) │ (中心点 B) │ │ ● ● ● │ ▲ ▲ ▲ │ ├─────────────────┼─────────────────┤ │ 单元格 3 │ 单元格 4 │ │ ★ │ ◆ │ │ ★ ★ │ ◆ ◆ ◆ │ └─────────────────┴─────────────────┘ Query 先匹配离谁最近,再仅扫描对应单元格内部的点

2.3 HNSW(Hierarchical Navigable Small World,分层可导航小世界图)

HNSW 是目前工业界使用最广泛、吞吐量和召回率平衡最好的图索引算法。

  • 灵感来源:跳表(Skip-List)的多层稀疏网络设计 + 六度空间小世界理论。

  • 算法结构

    • 底层(Layer 0):包含全量数据点,每个点与距离最近的若干个邻居建立边,构成一张密集图。

    • 高层(Layer 1 ~ Layer N):向上按指数概率逐渐抽稀节点,层数越高,节点越稀疏,节点之间的跨度越大。

  • 检索流程

    1. 从最高层的入口节点(Entry Point)进入,执行贪心搜索(Greedy Search),快速在大尺度上“跳跃”逼近目标区域;

    2. 找到本层局部最优解后,向下穿透到更细密的一层;

    3. 逐层下沉至 Layer 0,在极小的局部候选邻居中锁定 Top-K 结果。

  • 代价:构建索引时需要为大量节点维护双向连接指针,内存占用通常是原始向量数据的 1.5 到 2 倍

HNSW 多层跳跃图解: Layer 2 (超稀疏图): [Entry] ────────────────────────► [Node A] │ │ ▼ (下沉) ▼ (下沉) Layer 1 (稀疏图): [Entry] ────► [Node X] ──────────► [Node A] ──► [Node B] │ │ │ │ ▼ (下沉) ▼ (下沉) ▼ (下沉) ▼ (下沉) Layer 0 (密集全量图): [点密集网状互联,包含所有向量数据,做最终精确局部收敛搜索]

2.4 PQ(Product Quantization,乘积量化)

在拥有上亿规模向量的场景中,如果全部将 1536 维的 Float32 向量(单条占用 6KB 内存)常驻内存,数千万条数据即可耗尽几百 GB 显存/内存。

  • 原理:将高维向量(例如 1024 维)横向切分为多个低维子向量(例如 8 个 128 维的子空间),在每个子空间中分别训练聚类中心字典(如 256 个质心),最终用 1 个 Byte(8-bit)存储质心索引编号。

  • 收益:原本 1024 个 Float32(4096 字节)被压缩为 8 个 Byte,内存压缩比高达 500:1,可以在消费级硬件上常驻数亿向量进行粗筛。

三、 选型争论:专用向量数据库 vs 传统数据库外挂向量扩展?

在技术选型讨论中,工程师经常争论:“我们已经有 PostgreSQL / Elasticsearch 了,装个插件就能支持向量,为什么还要费劲部署专门的向量数据库?”

这是一个典型的“专精(Specialized)与通用(Generalized)”路线之争。

┌────────────────────────────────────────────────────────────────────────┐ │ 专用向量数据库 vs 关系型外挂插件架构对比 │ ├──────────────────┬─────────────────────────────┬───────────────────────┤ │ 对比维度 │ 专用向量库 (如 Milvus/Qdrant)│ 传统库扩展 (如 pgvector)│ ├──────────────────┼─────────────────────────────┼───────────────────────┤ │ 1. 核心设计取向 │ 极致高维 ANN 计算与高并发 │ 事务 ACID、标量关联优先│ ├──────────────────┼─────────────────────────────┼───────────────────────┤ │ 2. 混合过滤性能 │ 单阶段原生图遍历带过滤 │ 依赖优化器执行计划评估 │ ├──────────────────┼─────────────────────────────┼───────────────────────┤ │ 3. 写入与索引吞吐│ 异步批量构建,写入吞吐极大 │ 触发 WAL 日志,构建耗时│ ├──────────────────┼─────────────────────────────┼───────────────────────┤ │ 4. 架构复杂性 │ 引入新组件、新维护栈与学习成本│ 零架构改造,技术栈复用 │ ├──────────────────┼─────────────────────────────┼───────────────────────┤ │ 5. 数据一致性 │ 最终一致性为主 (高可用设计) │ 强一致性 (传统事务 ACID)│ └──────────────────┴─────────────────────────────┴───────────────────────┘

3.1 混合过滤(Hybrid Filtering)的核心挑战

在真实业务场景中,我们很少只发起裸向量查询,几乎一定会附带业务标量条件:

“查询与这段描述最相似、且用户所属部门在华东、创建时间在 2026 年之后、状态为已发布的文档。”

传统数据库处理这类查询,往往需要在两套不同逻辑之间调度,容易遭遇性能塌陷:

【过滤策略的演化路线】 1. 后过滤 (Post-filtering): 先做向量 ANN 检索出 Top-1000 ➔ 再根据标量条件过滤 缺陷:若符合条件的记录本身极少,Top-1000 过滤后可能只剩 0 个结果,召回率归零! 2. 先过滤 (Pre-filtering): 先根据标量条件过滤出所有满足条件的 ID ➔ 在这些 ID 对应的向量中执行穷举距离比对 缺陷:若满足条件的记录有数百万条,ANN 索引无法生效,退化为暴力线性计算! 3. 单阶段迭代过滤 (Single-stage Iterative Filtering, 现代专用向量库方案): 在 HNSW 图遍历跳转的同时,实时读取标量位图 (Bitmap / Payload Index)。 如果候选节点的标量不符合条件,该点不加入结果集,但继续沿其图边缘探寻下一个邻居。

现代专用向量数据库(如 Qdrant、Milvus)在底层将标量索引与向量图结构融为一体,能确保在满足复杂组合过滤的同时,严格维持预设的 Top-K 召回率与毫秒级延迟。

四、 五大主流向量数据库横向对比选型

我们针对业界使用最广泛的 5 款代表性向量存储方案:MilvusQdrantChromapgvector (PostgreSQL)以及Pinecone进行深度剖析与横向比对。

4.1 候选对象全景画像

1. Milvus 2.x —— 分布式云原生重量级霸主
  • 技术底座:Go (协调控制面) + C++ (Knowhere 核心计算内核)。

  • 架构特点:彻底的存算分离与微服务架构。依赖 etcd 进行元数据同步,Pulsar/Kafka 承载流式 WAL 写入日志,MinIO/S3 承担持久化对象存储,查询节点(QueryNode)具备水平弹性扩缩容能力。

  • 优点:能够承载数十亿级超大规模向量,分布式架构极其成熟,支持极为丰富的索引类型(HNSW、IVF、SCaNN、GPU 索引等)。

  • 痛点:部署架构非常重(生产高可用集群至少依赖 5~8 个独立服务),单机轻量启动复杂,日常运维门槛高。

2. Qdrant —— 现代云原生高性能的 Rust 精品
  • 技术底座:纯 Rust 编写。

  • 架构特点:极致利用系统级硬件与内存控制。提供原生丰富的 Payload 过滤语法,支持向量与元数据的单阶段无损过滤。

  • 优点:性能强劲、内存足迹小、单机吞吐表现极佳,单二进制文件即可启动,同时也原生支持基于 Raft 协议的分布式分片集群。支持将向量存储在内存或直接 mmap 到磁盘,降低大规模场景的物理内存消耗。

  • 痛点:相对 Milvus 诞生时间较晚,生态周边的开箱即用大型管理套件相对较少。

3. Chroma —— 本地开发与 PoC 原型利器
  • 技术底座:Python / TypeScript 顶层封装,底层基于 ClickHouse/SQLite + DuckDB + hnswlib。

  • 架构特点:专为 LLM 应用开发者设计的无门槛轻量级嵌入式库。

  • 优点:安装只需pip install chromadb,两行代码即可在 Python 内存或本地文件持久化,与 LangChain、LlamaIndex 原生整合度最高。

  • 痛点:不是为多租户、高并发分布式企业生产设计的,数据量一旦突破数百万,写入吞吐和并发检索延迟会出现明显抖动。

4. PostgreSQL + pgvector —— 业务集成度最高、零心智负担的保守派之选
  • 技术底座:C 语言扩展(PostgreSQL Extension)。

  • 架构特点:将向量作为 Postgres 的原生数据类型(vector),利用 Postgres 已有的 WAL、事务隔离、连接池、备份恢复与标量索引。

  • 优点:零架构变迁成本。单表直接把业务属性(id,price,user_id,created_at)与特征向量存放在同一张物理表中,直接通过一个 SQL 语句完成事务性更新与复杂 Join。

  • 痛点:在高维 HNSW 索引构建期间消耗巨大的 CPU 与维护内存;大批量向量并发写入时不如专门的向量数据库平滑;单节点承载千万级以上规模向量时硬件成本高。

5. Pinecone —— 全托管云原生 SaaS 行业标杆
  • 技术底座:闭源,全托管托管在 AWS / GCP / Azure。

  • 架构特点:Serverless 弹性计费,用户完全不需要关注副本、分片、节点挂载等任何运维细节。

  • 优点:真正的“开箱即用”,秒级起服务,99.9% 行业顶尖的托管 SLA,支持元数据过滤与混合搜索。

  • 痛点:闭源且必须将数据托管至外网公有云,在注重数据隐私合规的金融、政企与内网环境中无法使用;费用按使用量累加,长期高负载成本显著高于自建。

4.2 综合选型评估矩阵表

评测维度MilvusQdrantChromapgvector (Postgres)Pinecone
开源协议Apache 2.0Apache 2.0Apache 2.0PostgreSQL 协议闭源 (SaaS)
开发语言Go + C++RustPython / C++C未知 (云原生)
部署架构存算分离微服务集群单二进制 / 原生 Raft 分布式进程内嵌入 / 极简客户端依赖 Postgres 主从/集群完全免运维托管
支持数据量级亿级至百亿级数千万至数亿级百万级以下千万级以下亿级以上
单机资源消耗较高 (依赖多)极低 (Rust 极致控制)低 (适合笔记本跑)中等 (共用 PG 资源)无本地开销
索引类型支持HNSW, IVF, PQ, SCaNN, GPUHNSW (内存/mmap)HNSW (hnswlib)HNSW, IVFFlat托管优化索引
标量过滤能力强大 (表达式解析)极强 (Payload 深度优化)基础元数据过滤最强 (原生全功能 SQL)强大 (JSON 过滤)
ACID 事务支持否 (最终一致性)否 (最终一致性)是 (完整数据库事务)
运维门槛高 (需掌握 etcd/MinIO/K8s)低至中等极低 (零运维)极低 (沿用已有 DBA)零运维
适用场景超大规模企业级中心向量平台高性能业务落地、混合过滤优先个人项目、Demo、PoC 原型既有系统渐进升级、中小规模无运维预算团队、海外 SaaS

五、 企业落地选型决策树

在真实的软件工程架构设计中,没有“最好”的技术,只有“最匹配”的决策。根据团队技术栈、运维成本与业务指标,可按照如下决策树进行选型:

[是否有海外合规/免运维公有云需求?] │ ┌─────────────────────┴─────────────────────┐ 是 否 │ │ [选 Pinecone] [是否仅为个人测试/快速PoC?] │ ┌─────────────────────┴─────────────────────┐ 是 否 │ │ [选 Chroma] [当前存量系统是否重度依赖] [PostgreSQL且向量<1000万?] │ ┌─────────────────────┴─────────────────────┐ 是 否 │ │ [选 pgvector] [数据规模与运维能力考量] │ ┌─────────────────────────────┴─────────────────────────────┐ │ │ [数据量 > 5000 万,或需多租户] [追求极致性能、纯粹单二进制] [具备专业 K8s/大数据运维团队] [中等规模(千万级)、强调复杂过滤] │ │ [选 Milvus] [选 Qdrant]

生产级关键考量:内存容量规划计算

在选型中,很多团队会低估 HNSW 索引对物理内存(RAM)的消耗。以下是计算向量数据库物理内存开销的通用经验公式:

基本存储大小 = 数据量 (N) × 向量维度 (D) × 4 字节 (Float32) 索引额外开销 = 基本存储大小 × 索引倍率系数 (HNSW 约为 1.2 ~ 2.0) 运行安全冗余 = (基本存储大小 + 索引额外开销) × 1.3 (用于缓冲与过滤计算) 【案例测算】 数据量:10,000,000 (1000 万条) 模型维度:1536 维 (OpenAI text-embedding-3-small 格式) 1. 纯向量体积 = 10,000,000 × 1536 × 4 字节 ≈ 61.44 GB 2. HNSW 索引体积 ≈ 61.44 GB × 1.5 ≈ 92.16 GB 3. 实际需要预留的最低物理内存 = (61.44 + 92.16) × 1.3 ≈ 199.68 GB (约需配置 256 GB RAM 节点)

结论:如果硬件预算无法支撑将全部向量与图索引放入内存,应优先选择支持磁盘 mmap / 向量量化压缩(PQ/SQ8)的数据库(如 Qdrant 或配置了 PQ 索引的 Milvus)。

六、 双主流方案实战演练:Python 代码对比

下面针对工程中最常见的两种落地路线(pgvectorQdrant),给出完整的初始化、写入与混合过滤检索实现。

6.1 方案 A:基于 PostgreSQL + pgvector 实现

1. 环境准备

确保数据库已安装pgvector扩展并开启:

CREATE EXTENSION IF NOT EXISTS vector;
2. Python 实战代码
import psycopg2 from psycopg2.extras import execute_values import numpy as np def run_pgvector_demo(): conn = psycopg2.connect("dbname=enterprise_db user=postgres password=secret host=localhost port=5432") cur = conn.cursor() # 1. 创建包含业务标量与高维向量的混合表 cur.execute(""" CREATE TABLE IF NOT EXISTS knowledge_chunks ( id BIGSERIAL PRIMARY KEY, department VARCHAR(50), status VARCHAR(20), content TEXT, embedding vector(1536) ); """) # 2. 建立 HNSW 向量索引 (余弦距离使用 vector_cosine_ops) cur.execute(""" CREATE INDEX IF NOT EXISTS idx_chunks_hnsw ON knowledge_chunks USING hnsw (embedding vector_cosine_ops) WITH (m = 16, ef_construction = 64); """) conn.commit() # 3. 模拟插入数据 mock_vector = np.random.rand(1536).tolist() cur.execute(""" INSERT INTO knowledge_chunks (department, status, content, embedding) VALUES (%s, %s, %s, %s) """, ("Finance", "Published", "2026年度企业第一季度财务合规指引...", mock_vector)) conn.commit() # 4. 执行带标量过滤的高维向量相似度检索 (<=> 表示余弦距离运算符) query_vector = np.random.rand(1536).tolist() sql_search = """ SELECT id, department, status, content, 1 - (embedding <=> %s::vector) AS cosine_similarity FROM knowledge_chunks WHERE department = %s AND status = %s ORDER BY embedding <=> %s::vector LIMIT 5; """ cur.execute(sql_search, (query_vector, "Finance", "Published", query_vector)) results = cur.fetchall() print("=== pgvector 检索结果 ===") for row in results: print(f"ID: {row[0]}, 部门: {row[1]}, 相似度: {round(row[4], 4)}, 摘要: {row[3][:30]}...") cur.close() conn.close() if __name__ == "__main__": run_pgvector_demo()

6.2 方案 B:基于 Qdrant 实现

1. 环境准备

运行独立的 Qdrant 容器:

docker run -p 6333:6333 -p 6334:6334 -v $(pwd)/qdrant_storage:/qdrant/storage:z qdrant/qdrant pip install qdrant-client
2. Python 实战代码
from qdrant_client import QdrantClient from qdrant_client.models import ( Distance, VectorParams, PointStruct, Filter, FieldCondition, MatchValue ) import numpy as np def run_qdrant_demo(): # 初始化客户端 client = QdrantClient(host="localhost", port=6333) COLLECTION_NAME = "enterprise_rag_docs" # 1. 创建 Collection 并指定向量维度与距离算法 if not client.collection_exists(COLLECTION_NAME): client.create_collection( collection_name=COLLECTION_NAME, vectors_config=VectorParams(size=1536, distance=Distance.COSINE), ) # 为高频过滤字段建立 Payload 标量索引,加速过滤效率 client.create_payload_index( collection_name=COLLECTION_NAME, field_name="department", field_schema="keyword" ) # 2. 构造并写入带有丰富业务元数据(Payload)的向量点 mock_vector = np.random.rand(1536).tolist() client.upsert( collection_name=COLLECTION_NAME, points=[ PointStruct( id=1, vector=mock_vector, payload={ "department": "Finance", "status": "Published", "content": "2026年度企业第一季度财务合规指引..." } ) ] ) # 3. 单阶段高效混合过滤检索 query_vector = np.random.rand(1536).tolist() search_filter = Filter( must=[ FieldCondition(key="department", match=MatchValue(value="Finance")), FieldCondition(key="status", match=MatchValue(value="Published")) ] ) search_result = client.search( collection_name=COLLECTION_NAME, query_vector=query_vector, query_filter=search_filter, limit=5 ) print("=== Qdrant 检索结果 ===") for hit in search_result: print(f"ID: {hit.id}, 匹配得分: {round(hit.score, 4)}, Payload: {hit.payload}") if __name__ == "__main__": run_qdrant_demo()

七、 生产落地避坑指南

在大规模向量数据库生产实践中,以下工程陷阱必须引起高度警惕:

1. 警惕模型更换引发的“全量历史重算”灾难(Embedding Lock-in)

  • 陷阱:在系统上线半年后,算法团队将 Embedding 模型从text-embedding-v1升级为text-embedding-3,维度从 768 变为 1536。

  • 后果:不同模型投射的几何空间完全不一致,新模型的 Query 无法在旧模型的向量库中进行有效检索。

  • 对策必须永远保留非结构化源文档的正文,绝不能只存向量。更换模型意味着必须启动全量离线重新向量化(Re-embedding)脚本,并在库中采用“蓝绿集合切换(Blue-Green Collections)”平滑上线。

2. 构建阶段的写入性能陷阱

  • 陷阱:在向数据库一次性写入 1000 万条历史数据时,很多团队先创建了 HNSW 索引,然后再逐条或批量INSERT

  • 后果:每写入一个新点,数据库都要在线遍历图并为多个邻居计算重构指针,单线程写入速度会从每秒数千条断崖式跌落到每秒数十条。

  • 对策先写入全量冷数据,再批量触发并行构建索引(Bulk-Build Index)。大部分成熟数据库在此模式下会利用多核 CPU 进行并行加速。

3. 忽略标量过滤字段的基数(Cardinality)

  • 陷阱:如果不针对过滤条件做字段索引,单阶段遍历会受到很大影响。

  • 对策:在类似 Qdrant 或 Milvus 的系统中,针对department_idis_deleted等经常出现在WHERE / must过滤条件中的字段,必须显式建立 Payload Index / Scalar Index,避免过滤逻辑退化为全量扫表。

结语:向量数据库的未来演进趋势

向量数据库并非孤立的存检组件,随着大模型技术的深化演进,它正在经历三个重大的范式变革:

  1. 多模态原生检索(Native Multimodal):不仅仅处理文本向量,同时承载图像、音频、视频时空片段的联合嵌入检索,具备跨模态统一表征能力;

  2. 多路混合检索深度内置(Native Hybrid Search):向量数据库不再单纯提供 Dense 密集检索,而是深度集成BM25 / Sparse 稀疏检索,并在引擎内部原生实现倒数排名融合(RRF)与重排序(Reranking);

  3. GraphRAG 与图向量融合(Graph-Vector Convergence):单纯的距离检索缺乏逻辑推理能力,下一代系统正把知识图谱(实体与关系拓扑)与向量空间深度结合,实现全局宏观关联与微观局部细节的双重精准捕获。

客观审视自身的数据体量、团队的运维预算与业务真实延迟要求,理智避开“盲目追求专用集群”或“无脑硬扛单机插件”的极端,才能搭建出低成本、高可用且经得起业务规模考验的现代化 AI 数据基础设施。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/5 6:58:55

产能扩张 + 出海布局,新能源企业如何挑一款适配产线的HR系统

一、新能源行业的人力资源管理难在哪新能源制造的人力资源管理&#xff0c;与办公室型组织有本质差异。其核心不是"人事档案电子化"&#xff0c;而是把产线的人力投入准确、合规、可追溯地转换成人力成本数据。难点集中在五点&#xff1a; 多班倒与技能约束。两班…

作者头像 李华
网站建设 2026/9/5 6:57:19

实时数仓工具链选型:从采集到 OLAP,哪些环节可以一体化?

实时数仓的建设&#xff0c;很少是一开始就规划得清清楚楚的。多数企业的现实是&#xff1a;业务对实时性的要求越来越高&#xff0c;于是从某个具体场景切入&#xff0c;先做实时数据采集&#xff0c;再做实时计算&#xff0c;最后接上 OLAP 引擎做实时分析。等链路跑起来才发…

作者头像 李华
网站建设 2026/9/5 6:49:21

1.langchain上下文与记忆之概述

前八章我们让 Agent 学会了思考(模型)、行动(工具)、约束(中间件)。但还有一个致命缺陷:它没有过去。这一章我们给它补上"记忆",让它从"每次都初次见面"升级为"越用越懂你"。 一句话区分:Static Runtime Context 是"这次调用你是谁…

作者头像 李华
网站建设 2026/9/5 6:47:00

免费离线OCR工具部署与实战:从截图表格到PDF的本地文字识别

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华