一、向量数据处理概述
1.1 什么是向量数据
先问个问题:你在搜索引擎里输入「秋天的第一杯奶茶」,系统怎么知道你要找什么?
传统做法靠关键词匹配,但效果嘛……你懂的。向量数据的思路完全不同——它把一切信息都映射成数学向量。说白了,就是一组浮点数。
举个例子,一张猫的图片,经过模型处理后变成 [0.23, 0.87, -0.15, ...] 这样的数组。这个数组就是「向量」。猫和狗的区别,体现在向量空间里的距离远近上。
我刚开始接触这个领域时,也觉得抽象。直到有一次做图像检索项目,发现用向量距离排序,召回率比关键词搜索高了将近 30%。嗯,从那以后我就认了这条路。
向量数据有几个关键特征:
- 高维性:常见维度从 128 到 1024 不等,甚至更高
- 非结构化:没有固定的 schema,不像关系表那样规整
- 语义密集:向量本身携带语义信息,距离近就是语义相似
- 计算密集:相似度计算涉及大量浮点运算
核心认知:向量数据不是「新数据」,而是「新视角」。它把非结构化数据(文本、图像、音频)变成了可计算的结构化形式。
1.2 向量数据库的兴起
传统数据库处理向量数据,效率低得让人抓狂。为什么?
你想想看,B+ 树索引对精确匹配很友好,但你要找「最相似的 10 个向量」,它完全帮不上忙。全表扫描?100 万条 512 维向量,算一次 KNN 就要几秒钟——这在生产环境根本没法用。
向量数据库就是为解决这个问题而生的。它的核心能力是近似最近邻搜索(ANN),用空间换时间,把搜索延迟降到毫秒级。
我记得 2019 年做第一个向量检索项目时,还在用 Faiss 自己搭服务。那时候踩了不少坑——索引参数调不好,召回率忽高忽低;内存不够,索引加载就 OOM。后来向量数据库成熟了,这些基础设施问题才被封装好。
目前主流的向量数据库包括:
| 产品 | 核心算法 | 适用场景 |
|---|---|---|
| Milvus | IVF_FLAT, HNSW | 大规模生产环境,云原生部署 |
| Qdrant | HNSW | Rust 实现,高性能低延迟 |
| Weaviate | HNSW | 与 NLP 模型深度集成 |
| Pinecone | 专有算法 | 全托管,免运维 |
选型建议:我个人习惯先看数据规模。百万级以下,Qdrant 或 Weaviate 足够;千万级以上,Milvus 的分布式能力更靠谱。
1.3 流批一体架构简介
传统的数据处理,批处理和流处理是两套系统。批处理用 Spark,流处理用 Flink/Kafka Streams。数据要过两遍,逻辑写两遍,维护成本翻倍。
流批一体架构,说白了就是一套代码,两种模式。同一份数据处理逻辑,既能跑批(处理历史数据),也能跑流(处理实时数据)。
为什么会需要这个?
我做过一个电商推荐系统,用户行为数据既有历史日志(批),又有实时点击(流)。如果用两套系统,特征工程要写两遍,模型预测结果还不一致——批处理说「用户喜欢 A」,流处理说「用户喜欢 B」,你信谁?
流批一体架构的核心组件:
- 统一计算引擎:如 Flink、Spark Structured Streaming
- 统一存储层:如 Kafka + 对象存储(S3/MinIO)
- 统一元数据:如 Hive Metastore / Iceberg
- 统一数据模型:批和流使用相同的 schema 和业务逻辑
避坑提醒:我曾经在一个项目里强行把批处理逻辑搬到流上,结果状态管理爆炸了。流批一体不是「复制粘贴」,而是要从架构层面统一抽象。
下面这张图展示了流批一体架构下向量数据处理的核心流程:
1.4 课程目标与适用人群
这门课不是讲理论,而是讲怎么落地。
课程目标很明确:
- 掌握向量数据的核心概念和建模方法
- 理解主流向量数据库的架构和选型逻辑
- 学会在流批一体架构下设计向量数据处理管道
- 能独立搭建生产级的向量检索系统
适用人群:
| 角色 | 你会收获什么 |
|---|---|
| 大数据工程师 | 把向量能力融入现有数据管道 |
| AI 应用开发者 | 理解向量检索的工程化落地 |
| 架构师 | 流批一体 + 向量的架构设计方法 |
| 数据平台运维 | 向量数据库的部署、调优和监控 |
前置要求:你需要熟悉至少一种编程语言(Python/Java/Scala),了解基本的数据处理概念(批处理、流处理)。不需要向量数据库经验——我会从零开始讲。