cover-img
avatar

托码特人

分享科技与人文

一个关注互联网的技术博客

初识向量数据库

对于数据库本身,做技术的朋友一定不会陌生。从后端到前端再到移动端,端端业务都离不开。小到SQLite,大到MySQLMongoDB,任何与查询相关的事情基本上都需要接入这种玩意…

然而向量数据库(又称矢量数据库),却不是人人都接触过,光看这名字,就充满高级与神秘感!

接下来,本文将从三个方面,来向读者介绍什么是向量数据库,以及它适用的业务场景和当前业界的主流方案。

基本概念

什么是向量数据库

标准解释:以数学形式存储的数据集合。翻译成人话,就是把人类看得懂的信息转换成机器容易理解的数据,并能有效建立关联关系,比如文字/音频/图片等转换成类似[[1],[22],[333]]这种高维度数据,主要应用于语义化相似度检索

举个例子,在传统的数据库检索中,一般都是根据关键词做模糊匹配。比如简单粗暴的LIKE语句,然而这些本质上都是基于文本在做匹配查找,一旦关键词不对,结果就查不出来了。

诞生背景

  • 传统数据库面向语义化查询明显存在短板,除非人为用代码去解决。但如果业务逻辑复杂或者面向文档类查询,基本上就没招了;
  • 人工智能的发展需要,现阶段大模型都有一定 TOKEN 的限制,能够高效理解上下文、读懂用户意图决定了 AI 的基本素质;

如果没有向量数据库,单独查询机器学习模型速度会很慢,而且每次消耗大量 TOKEN 也得不偿失。通过向量化数据,可以有效整合并精准上下文信息关联,省时省钱、还提高了模型调用的精度。

与一般数据库的区别

这里列举一些主要的差异,体现在数据类型、查询方式、应用场景等方面:

数据类型

  • 传统数据库:主要处理结构化的数据,如数字、字符串、日期等。数据通常以表格的形式组织,每一列对应一种数据类型。通常采用关系模型或键值、文档、图形等 NoSQL 模型,RDBMS 通常对应二维表结构,NoSQL 对应树状结构。
  • 向量数据库:专门处理高维向量数据,如来自深度学习模型的输出向量。这些向量可以代表文本、图像、音频等各种类型的数据。通常不关心数据的具体含义,而是侧重于向量本身及其相似度。

存储和索引

  • 传统数据库:使用 B 树、哈希索引等数据结构来优化查询效率。
  • 向量数据库:使用特殊的数据结构(如 HNSW、PQ 等)来加速向量相似度查询。

查询方式

  • 传统数据库:使用 SQL 查询语言或特定的查询 API 来检索数据,支持复杂的条件筛选、聚合操作等。
  • 向量数据库:主要通过计算向量之间的相似度来检索数据,通常使用距离度量(如欧几里得距离、余弦相似度等)来查找最近邻或相似向量。

应用场景

  • 传统数据库:广泛应用于事务处理、报表分析、数据仓库等领域。
  • 向量数据库:适用于推荐系统、图像和视频检索、语义搜索、自然语言处理等需要处理非结构化数据的应用场景。

当然,截止目前,有的传统数据库也是可以通过扩展的方式支持向量查询的功能。这里就不再具体展开讲,有兴趣移步到文章末尾:参考资料的第一篇

业务场景

对于向量数据库,目前业界主要应用在以下场景:

  • 相似度和语义搜索
    • 电商领域:比如经典功能之一的:猜你喜欢
    • 影音娱乐:推荐歌曲/电影等
    • 聊天机器人
  • 机器学习和深度学习:将信息的相关性连接起来,构建完成复杂认知任务的学习和模型训练
  • 大语言模型(LLM)和生成式 AI:依赖向量数据库对文本/语音等进行上下文分析,通过将单词、句子和观点相互关联,LLM 可以理解人类的自然语言,甚至可以生成文本

主流方案

  • Milvus:Zilliz 开发的开源向量数据库,支持分布式部署和多种索引结构。支持Go,Python,Java,文档和社区完善;
  • Faiss:Faiss 是 Facebook AI Research 开发的一个高效相似性搜索库,支持 CPU 和 GPU 加速。主要面向C++开发者,数据规模大、需要高性能要求的首选;
  • Annoy:Spotify 开发的用于近似最近邻搜索的库,适用于大规模、只读数据集。简单易用,适合快读原型开发,编程语言支持PythonC++
  • Qdrant:一个高性能、可扩展的向量搜索引擎,支持多种索引结构,如 Flat、HNSW 和 PQ (Product Quantization),中大型业务和云原生应用;
  • Weaviate:一个开源的向量数据库,支持图数据库的特性,可以存储和查询带有关系的向量数据。提供 RESTful API 和多种语言的客户端 SDK,适合构建语义化理解系统的团队;

简易排名

  1. Milvus:提供了多种语言的 SDK,文档丰富,社区活跃。
  2. Faiss:虽然主要支持 C++和 Python,但在性能方面非常优秀,有广泛的社区支持。
  3. Qdrant:通过 RESTful API 支持多种语言,易于集成,社区活跃度良好。
  4. Weaviate:同样通过 RESTful API 支持多种语言,社区支持也不错。
  5. Annoy:支持较少的语言,但简单易用,适合快速原型开发。

最后,让机器来做个选择

向量数据库最佳落地方案

参考资料

赞赏

声明: 本文内容由托码斯创作整理,由于知识水平和时效性问题,行文可能存在差错,欢迎留言交流。读者若需转载,请保留出处,谢谢!