本主题解释了Milvus向量数据库中的一些核心概念。
位集(Bitset)
在 Milvus 中,位集是由 0 和 1 构成的位数数组,相对于整数、浮点数或字符,它们可以被用于紧凑、高效地表示某些数据。默认情况下,位数为 0,只有满足某些要求时才会设置为 1。
通道(Channel)
在 Milvus 中,有两个不同的通道。它们分别是 PChannel 和 VChannel。每个 PChannel 对应日志存储的主题,而每个 VChannel 对应集合中的一个分片。
集合
在Milvus中,集合相当于关系型数据库管理系统(RDBMS)中的表。在Milvus中,集合用于存储和管理实体。
依赖项(Dependency)
依赖项是其他程序在工作时所依赖的程序。Milvus 的依赖项包括 etcd (存储元数据)、MinIO 或 S3(对象存储)和 Pulsar(管理快照日志)。
实体(Entity)
实体是代表现实世界对象的一组字段。在 Milvus 中,每个实体都由唯一的主键表示。
您可以自定义主键。如果您没有手动配置,则 Milvus 会自动为实体分配主键。如果选择配置自定义主键,请注意 Milvus 暂不支持主键去重。因此,同一集合中可以存在重复的主键。
字段(Field)
字段是组成实体的单元。字段可以是结构化数据(例如数字、字符串)或向量。
从 Milvus 2.0 开始,标量字段过滤功能已经可用了!
日志中间件(Log broker)
日志中间件是一种支持回放的发布-订阅系统。它负责流式数据持久化、可靠异步查询的执行、事件通知和查询结果的返回。它还确保了当工作节点从系统故障中恢复时,增量数据的完整性。
日志序列(Log sequence)
日志序列记录了在 Milvus 中更改集合状态的所有操作。 日志快照
日志快照是Milvus向量数据库中记录和处理数据更新和更改的二进制日志的较小的单元,数据从段中持久化到多个binlog中。Milvus中有三种类型的binlog:InsertBinlog、DeleteBinlog和DDLBinlog。
日志订阅者(Log subscriber)
日志订阅者订阅日志序列以更新本地数据,并提供只读副本的服务。
消息存储(Message storage)
消息存储是 Milvus 的日志存储引擎。
Milvus 集群(Milvus cluster)
在 Milvus 的集群部署中,一组节点提供服务,以实现高可用性和易扩展性。
Milvus 独立部署(Milvus standalone)
在 Milvus 的独立部署中,所有操作包括数据插入、索引构建和向量相似度搜索都在一个进程中完成。
归一化(Normalization)
归一化是指将嵌入(向量)转换为其范数等于1的过程。如果使用内积(IP)来计算嵌入相似度,则所有嵌入必须被标准化。标准化后,内积等于余弦相似度。
分区(Partition)
分区是集合的一个划分。Milvus 支持将集合数据划分为多个物理存储部分。这个过程被称为分区,并且每个分区可以包含多个段。
PChannel
PChannel 代表物理通道。每个 PChannel 对应日志存储的主题。Milvus 集群启动时,会默认分配一组 256 个 PChannel 来记录数据插入、删除和更新的日志。
Schema
Schema 是定义数据类型和数据属性的元信息。每个集合都有自己的集合 schema,定义集合的字段、启用自动 ID(主键)分配,并包括集合描述。集合 schema 中还包括定义字段名称、数据类型和其他属性的字段模式。
段(Segment)
段是由 Milvus 自动创建的用于容纳插入数据的数据文件。一个集合可以有多个段,一个段可以有多个实体。在向量相似度搜索期间,Milvus 扫描每个段并返回搜索结果。一个段可以是正在增长的,直到它被封存为止。一个封存的段不再接收任何新数据,并将被刷新到对象存储中,剩余的新数据将被插入到新创建的增长段中。增长段将被封存,因为它所包含的实体数达到了预定义的阈值,或者“增长”状态的持续时间超过了指定的限制。
分片(Sharding)
分片是将写入操作分配到不同节点上,以充分利用 Milvus 集群的并行计算能力来写入数据。默认情况下,单个集合包含两个分片。Milvus 采用基于主键哈希的分片方法。Milvus 的开发路线图包括支持更灵活的分片方法,例如随机和自定义分片。
分区工作是通过指定分区名称来减少读负载,而分片则将写负载分散在多个服务器之间。
非结构化数据(Unstructured data)
非结构化数据,包括图像、视频、音频和自然语言,是不遵循预定义模型或组织方式的信息。这种数据类型占了世界数据的约80%,可以使用各种人工智能(AI)和机器学习(ML)模型将其转换为向量。
VChannel
VChannel 代表逻辑通道。每个 VChannel 代表集合中的一个分片。每个集合都将被分配一组 VChannels,用于记录数据插入、删除和更新。
VChannels 在逻辑上是分离的,但在物理上共享资源。
嵌入向量(Embedding vector)
嵌入向量是对非结构化数据(如电子邮件、IoT 传感器数据、Instagram 照片、蛋白质结构等)的特征抽象。从数学上讲,嵌入向量是一组浮点数或二进制数的数组。现代嵌入技术用于将非结构化数据转换为嵌入向量。
Vector index
向量索引是从原始数据派生出的重新组织的数据结构,可以大大加速向量相似度搜索的过程。Milvus支持多种向量索引类型。
向量相似度搜索
向量相似度搜索(Vector similarity search)是比较一个向量与数据库中的向量,以找到与目标搜索向量最相似的向量的过程。用于计算向量之间的相似度(similarity)的算法通常采用近似最近邻(ANN)搜索。