Milvus 是一个专注于向量数据库(Vector Database)的开源系统,它的设计目的是高效存储、管理和检索高维向量数据(如图像、文本、音频的特征向量)。它支持大规模向量的相似性搜索,并广泛应用于推荐系统、图像检索、自然语言处理等领域。
Milvus 的逻辑命名空间,类似于传统数据库系统中的数据库,用于隔离和组织数据集合(Collection)。
作用:提供数据的逻辑隔离,支持多租户,不同的数据库之间可以独立操作互不干扰。
用途:在同一个 Milvus 实例中存储不同业务线的数据,例如用户行为数据和商品特征数据。
存储高维向量和相关元数据的基本单位,类似于传统数据库中的“表”。每个 Collection 由 Schema 定义其结构。
作用:用于存储实际的数据,支持对数据的增、删、改、查等操作。
用途:在向量检索任务中,每个 Collection 通常表示一个特定的数据集,如用户向量、商品向量。
定义一个 Collection 的字段及其数据类型的规则和描述。
作用:规定集合中数据的字段类型、主键、向量维度等,确保插入数据符合规范,并优化存储和检索性能。
用途:用于定义向量字段(如 128 维浮点向量)和其他辅助字段(如整型主键或时间戳)。
Collection 中的一个数据列,类似于表的列。
作用:定义字段名称、类型和特性(如是否为主键,是否自动生成主键)
支持的类型包括:标量字段:INT64、FLOAT、DOUBLE、VARCHAR 等;向量字段:FLOAT_VECTOR、BINARY_VECTOR。
用途:主键字段用于唯一标识数据记录。向量字段用于存储特征向量,用于相似性搜索。
Collection 的子集,用于数据的逻辑组织和分组。
作用:通过分区将数据按某些规则(如时间、类别)进行分组管理,提高查询性能和数据管理的灵活性。
用途:在电商应用中,可以按商品类别为一个集合创建多个分区,如“电子产品”、“服装”等。
为向量字段创建的索引结构,用于加速向量相似性检索。
作用:优化向量的相似性搜索速度,在海量数据中实现毫秒级查询响应。
支持的索引类型:VF(倒排文件)、HNSW(分层图结构)、ANNOY(近似最近邻搜索)
用途:为存储在 Collection 中的高维向量数据提供快速的相似性搜索。
衡量向量之间相似度的方法。
作用:决定向量之间相似性的计算方式。
用途:选择适合具体应用的相似性度量方法,例如图像检索使用欧氏距离,推荐系统使用内积。
支持的度量方式:欧氏距离(Euclidean Distance)、内积(Dot Product)、余弦相似度(Cosine Similarity)、汉明距离(Hamming Distance)
决定了 Milvus 在构建索引之前将数据分块的大小。
作用:控制索引的粒度、平衡内存使用与检索性能。
用途:针对大数据集,合理配置索引文件大小,避免内存不足。
在 Milvus 中对向量数据进行检索和过滤的操作。
作用:支持通过特定向量字段进行相似性搜索、允许基于标量字段添加过滤条件。
用途:结合向量字段和标量字段实现复杂的查询需求,如“查找与目标向量最相似的 10 个商品,但价格小于 100 的商品”。
基于向量字段的相似性搜索操作。
作用:根据提供的查询向量查找最相似的向量数据,支持返回 K 个最相似的结果。
用途:用于推荐系统、图像搜索、视频检索等场景。
向 Collection 中添加数据的操作。
作用:将向量及相关元数据存储到 Collection 中。
用途:将用户行为特征、商品特征等数据存储到指定的 Collection。
从 Collection 中删除指定数据的操作。
作用:支持基于主键或其他条件删除数据。
用途:清理旧数据或删除错误数据。
内存中的数据同步到持久化存储中的操作。
作用:确保数据持久化,防止内存丢失。
用途:在插入大量数据后进行 Flush 操作,保证数据安全。
合并多余的段,减少存储空间和提高查询性能的操作。
作用:清理无效数据(如删除标记的数据)。
用途:在频繁数据操作后运行 Compaction,优化存储和查询性能。
Collection 的物理存储单元,用于存储实际的数据块。
作用:每个 Collection 中的数据分为若干个 Segment。Segment 是数据管理和查询优化的基础单元。
用途:在插入数据时,自动创建新的 Segment 并管理其生命周期。
在指定时间点查看 Collection 数据的功能。
作用:支持按时间点进行数据的回溯查询。
用途:用于历史数据的分析和版本控制。
Database (数据库) ├── Collection (集合) │ ├── Schema (模式) │ │ ├── Field (字段) │ ├── Partition (分区) │ ├── Segment (段) │ │ ├── Index (索引) │ │ └── 数据记录 └── Time Travel (时间穿越查询)
我认为在概念层面向量数据库和关系数据库本身没有什么可比性,但是作为传统程序使用关系数据库的概念来理解Milvus可能更好理解。
在 Milvus 中,Schema、Database 和 Collection 是层次化的数据组织和定义概念,它们各自的职责和作用如下:
| 概念 | 上级关系 | 下级关系 | 作用 |
|---|---|---|---|
| Database | 顶层容器 | Collection | 提供逻辑命名空间,隔离不同业务线的数据。 |
| Collection | Database | Schema、Partition | 数据存储的核心单元,支持高维向量和标量字段的操作。 |
| Schema | Collection | Field | 定义 Collection 的字段结构,规定存储数据的规则。 |
| Field | Schema | 数据记录 | 定义字段名称、类型、主键属性和向量维度等。 |
| Partition | Collection | Segment | 按逻辑分组数据,提高查询效率和数据管理灵活性。 |
| Segment | Partition | Index | 数据的物理存储块,是数据插入和查询的基本单位。 |
| Index | Segment | - | 提高向量检索效率,支持多种索引算法(如 IVF、HNSW)。 |
| Query/Search | Collection、Partition | - | 支持向量检索和标量字段过滤,是 Milvus 的主要功能之一。 |
| Time Travel | Collection | Segment 快照 | 支持基于时间点的历史数据查询。 |
本文作者:wucc
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-SA 许可协议。转载请注明出处!