Milvus是一款开源的云原生向量数据库,专为海量向量数据的存储、检索和管理而设计。它支持实时的向量相似度搜索,适用于各种AI和机器学习应用场景。以下是Milvus的一些基本概念:
非结构化数据
非结构化数据是指那些不遵循特定数据模型或格式、无法在传统关系型数据库中轻松存储的数据。这类数据包括文本、图像、音频和视频等,它们通常是自由形式的,包含丰富的信息,但也更加复杂。
在Milvus中,非结构化数据通过特征提取转换为向量形式,即每个数据点被转换为数值向量,这些向量能够在多维空间中表示原始数据的特征。例如,一张图片可以通过深度学习模型转换为一个特征向量,该向量捕捉了图片的关键特征,如颜色、形状和纹理。
Milvus作为一个向量数据库,专门用于存储和检索这些向量。它利用先进的索引策略,如倒排索引(Inverted Index)和HNSW(Hierarchical Navigable Small World),来快速检索相似的向量,从而找到与查询条件最匹配的非结构化数据。
简而言之,Milvus将非结构化数据的复杂性转化为向量空间中的简单性,使得这些数据可以通过向量相似度进行高效的搜索和分析。这对于实现基于内容的检索(CBIR)、推荐系统、自然语言处理等应用至关重要。
特征向量(Embedding Vector)
Milvus是一款开源的向量数据库,支持TB级向量的增删改操作和近实时查询,集成了多种向量索引库,提供了一整套简单直观的API。 特征向量是将非结构化数据转换成的连续向量,通常由浮点数或二进制数数组组成。这些向量可以用于计算数据之间的相似度。
- 向量定义:向量是具有一定大小和方向的量,可以理解为一串数字的集合,类似于一行多列的矩阵。例如:[2,0,1,9,0,6,3,0]。
- 特征向量:特征向量包含事物的重要特征,常见的特征向量如RGB色彩,其中每种颜色通过红、绿、蓝三种颜色的比例得到。
- 优势:特征向量能够高效准确地描述多媒体内容,对于机器学习和模式识别领域至关重要。
- 应用领域:广泛应用于图像识别、语音识别、垃圾邮件过滤等多个领域。
向量相似度检索
在Milvus中,向量相似度检索是一项核心功能,它允许用户在海量向量数据中快速找到与查询向量最相似的数据。以下是详细描述:
- 加载集合:在进行搜索之前,需要将包含向量数据的集合(Collection)加载到内存中。这是因为Milvus中的所有搜索和查询操作都在内存中执行。
- 准备搜索参数:根据搜索场景,定义搜索参数。例如,可以指定使用欧几里得距离(L2)来计算向量之间的距离,并从索引中检索最近的向量。
- 执行搜索:使用定义好的搜索参数,Milvus将计算查询向量与集合中向量之间的距离,并返回最相似的结果。搜索可以是简单的向量搜索,也可以是混合搜索,后者结合了标量字段过滤。
- 搜索结果:Milvus返回的搜索结果包括最相似的向量的ID和它们的相似度分数。用户可以根据这些信息进一步处理或分析数据。
Collection(集合)
在Milvus中,Collection(集合)是存储和管理向量数据的基本单位,类似于关系型数据库中的表(table)。以下是关于Milvus中Collection的详细描述:
Collection的结构:每个Collection由多个字段(Field)组成,这些字段可以包含向量字段(用于存储向量数据)和标量字段(如数字、文本等用于存储描述性数据或元数据)。
创建Collection:创建一个Collection时,需要定义其结构,包括字段的名称、类型和其他属性。例如,可以创建一个包含书籍ID、书名、单词数量和书籍简介向量的Collection。在创建新Collection时,Milvus会创建一个默认分区
_default
。Collection的操作:用户可以对Collection执行各种操作,如插入数据、建立索引、搜索和删除等。
分区和分片:为了提高数据管理的灵活性和搜索的效率,Collection可以被划分为多个分区(Partition)。此外,Collection还可以配置分片(Shard),以支持大规模分布式部署。
索引和搜索:为了加速向量数据的检索,Milvus允许用户在Collection上创建索引。创建索引后,可以使用向量相似度搜索功能来快速找到与查询向量最相似的数据。
扩展性:Milvus的设计支持高扩展性,可以容纳数千个Collection,满足大数据量和多租户场景下的需求。
示例代码:以下是一个使用Python SDK创建Collection的示例代码:
from pymilvus import CollectionSchema, FieldSchema, DataType
book_id = FieldSchema(
name="book_id",
dtype=DataType.INT64,
is_primary=True,
)
book_name = FieldSchema(
name="book_name",
dtype=DataType.VARCHAR,
max_length=200,
)
word_count = FieldSchema(
name="word_count",
dtype=DataType.INT64,
)
book_intro = FieldSchema(
name="book_intro",
dtype=DataType.FLOAT_VECTOR,
dim=2
)
schema = CollectionSchema(
fields=[book_id, book_name, word_count, book_intro],
description="Test book search"
)
collection_name = "book"
这个示例展示了如何定义一个Collection的模式,包括主键字段、标量字段和向量字段。在实际应用中,向量字段通常具有更高的维度。Milvus的Collection是处理和检索向量数据的强大工具,它为各种AI和ML应用提供了灵活、高效的数据管理和搜索能力。
Milvus的架构设计上,采用了存储与计算分离的模式,所有组件都是无状态的,以增强系统的弹性和灵活性。它包括接入层、协调服务、执行节点和存储层,每个层次都可以独立扩展和容灾。
Milvus的应用场景非常广泛,包括但不限于图像搜索、推荐系统、自然语言处理和生物信息学等领域。如果您想了解更多关于Milvus的信息,可以访问其官方文档或社区资源。