🚀 免费试用 Zilliz Cloud,完全托管的 Milvus,体验 10 倍的性能提升!立即试用>

milvus-logo
LFAI
  • Home
  • Blog
  • Milvus 专为大规模(万亿次)向量相似性搜索而设计

Milvus 专为大规模(万亿次)向量相似性搜索而设计

  • Engineering
January 13, 2021
milvus

每天,由于公司无法理清自己的数据,浪费了无法估量的关键业务洞察力。据估计,文本、图像、视频和音频等非结构化数据占所有数据的 80%,但其中仅有 1% 得到了分析。幸运的是,人工智能(AI)、开源软件和摩尔定律使机器规模的分析比以往任何时候都更容易实现。利用向量相似性搜索,可以从海量非结构化数据集中提取价值。这项技术包括将非结构化数据转换为特征向量,这是一种机器友好的数字数据格式,可以进行实时处理和分析。

向量相似性搜索的应用领域涵盖电子商务、安全、新药开发等。这些解决方案依赖于包含数百万、数十亿甚至数万亿向量的动态数据集,其实用性往往取决于是否能返回近乎即时的结果。Milvus是一个开源的向量数据管理解决方案,从底层开始构建,用于高效管理和搜索大型向量数据集。本文将介绍 Milvus 的向量数据管理方法,以及该平台如何针对向量相似性搜索进行优化。

跳转到

LSM 树使大规模动态数据管理保持高效

为了提供高效的动态数据管理,Milvus 采用了日志结构合并树(LSM 树)数据结构。LSM 树非常适合访问插入和删除次数较多的数据。有关 LSM 树有助于确保高性能动态数据管理的具体属性的详细信息,请参阅其发明者发布的原始研究报告。LSM 树是BigTableCassandraRocksDB 等许多流行数据库使用的底层数据结构。

向量在 Milvus 中作为实体存在,并存储在段中。每个段包含从 1 到 ~8 百万个实体。每个实体都有唯一 ID 和向量输入字段,后者代表 1 到 32768 个维度。

Blog_Milvus Was Built for Massive-Scale (Think Trillion) Vector Similarity Search_2.png 博客_Milvus 专为大规模(万亿次)向量相似性搜索而建_2.png

优化数据管理,实现快速访问和有限碎片化

收到插入请求时,Milvus 会将新数据写入超前写日志(WAL)。请求成功记录到日志文件后,数据被写入可变缓冲区。最后,三个触发器之一会导致缓冲区不可变并刷新到磁盘:

  1. 定时间隔:数据会以定义的时间间隔(默认为 1 秒)定期刷新到磁盘。
  2. 缓冲区大小:累积数据达到可变缓冲区的上限(128 MB)。
  3. 手动触发:当客户端调用 flush 函数时,数据会被手动刷新到磁盘。

Blog_Milvus Was Built for Massive-Scale (Think Trillion) Vector Similarity Search_3.png 博客_Milvus 为大规模(万亿次)向量相似性搜索而生_3.png

用户可以一次添加数十或数百万个向量,在插入新向量时会生成不同大小的数据文件。这就造成了碎片化,会使数据管理复杂化,并减慢向量相似性搜索的速度。为防止数据过度碎片化,Milvus 会不断合并数据段,直到合并后的文件大小达到用户可配置的上限(如 1GB)。例如,在上限为 1 GB 的情况下,插入 1 亿个 512 维向量将只产生 ~200 个数据文件。

在增量计算场景中,向量的插入和搜索是同步进行的,Milvus 在将新插入的向量数据与其他数据合并之前,会立即将其用于搜索。数据合并后,原始数据文件将被移除,新创建的合并文件将被用于搜索。

Blog_Milvus Was Built for Massive-Scale (Think Trillion) Vector Similarity Search_4.png 博客_Milvus 专为大规模(万亿次)向量相似性搜索而建_4.png

Blog_Milvus Was Built for Massive-Scale (Think Trillion) Vector Similarity Search_5.png 博客_Milvus 是为大规模(Think Trillion)向量相似性搜索而建_5.png

通过索引向量数据加速相似性搜索

默认情况下,Milvus 在查询向量数据时依靠暴力搜索。这种方法也称为穷举搜索,每次运行查询时都会检查所有向量数据。对于包含数百万或数十亿多维向量的数据集来说,这一过程过于缓慢,在大多数相似性搜索场景中都无法派上用场。为了帮助加快查询时间,可使用算法建立向量索引。对索引数据进行聚类,使相似向量靠得更近,从而使相似性搜索引擎只需查询全部数据中的一部分,在牺牲准确性的同时大幅缩短查询时间。

Milvus 支持的大多数向量索引类型都使用近似近邻(ANN)搜索算法。ANN 索引种类繁多,每种索引都需要在性能、准确性和存储要求之间做出权衡。Milvus 支持基于量化、图和树的索引,所有这些索引都服务于不同的应用场景。有关构建索引及其支持的特定向量索引类型的更多信息,请参阅 Milvus 的技术文档

索引构建会产生大量元数据。例如,对保存在 200 个数据文件中的 1 亿个 512 维向量建立索引,就会产生额外的 200 个索引文件。为了有效检查文件状态、删除或插入新文件,需要一个高效的元数据管理系统。Milvus 使用在线事务处理(OLTP),这是一种非常适合更新和/或删除数据库中少量数据的数据处理技术。Milvus 使用 SQLite 或 MySQL 管理元数据。

进一步了解 Milvus

Milvus 是一个开源向量数据管理平台,目前正在 Linux 基金会的伞式组织LF AI & Data 进行孵化。Milvus 于 2019 年由发起该项目的数据科学软件公司Zilliz 开源。有关 Milvus 的更多信息,可以在其网站上找到。如果您对向量相似性搜索感兴趣,或者对使用人工智能发掘非结构化数据的潜力感兴趣,请加入我们在 GitHub 上的开源社区

    Try Managed Milvus for Free

    Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.

    Get Started

    Like the article? Spread the word

    扩展阅读