Milvus是一款专为向量数据设计的数据库,它具备高性能、高可用和易扩展的特点,主要用于处理由深度神经网络和其他机器学习模型生成的大规模嵌入向量[162][165]。以下是Milvus向量数据库的详细解释:
-
定义与用途:
Milvus是一个云原生向量数据库,专为海量向量数据的实时召回而设计。它基于FAISS、Annoy、HNSW等向量搜索库构建,主要解决稠密向量相似度检索的问题[163]。 -
核心优势:
- 高性能:Milvus采用独特的数据结构和算法,实现了高效的向量运算和查询。
- 高可用与高可靠:支持云上扩展,具备容灾能力,保证服务的高可用性。
- 混合查询:支持在向量相似度检索过程中进行标量字段过滤,实现混合查询。
- 易于开发者使用:支持多语言、多工具的生态系统,提供丰富的客户端支持[163]。
-
架构特点:
- Milvus采用共享存储架构,存储计算完全分离,计算节点支持横向扩展。
- 数据流与控制流分离,系统分为接入层、协调服务、执行节点和存储层四个层次,各层次相互独立,可独立扩展和容灾[163][164]。
-
功能特性:
- 支持数据分区分片,提高数据处理效率。
- 确保数据的持久存储和安全性。
- 支持实时或批量地摄取新增数据。
- 支持数据的历史版本管理,即time travel功能[163]。
-
生态支持:
Milvus与OpenAI、Langchain、Semantic Kernel、Llama-Index、AutoGPT、Towhee、Hugging face、Cohere等大模型生态深度集成[163]。 -
部署与运维:
- 建议使用Kubernetes部署Milvus,以获得最佳可用性和弹性。
- 提供一键部署功能,通过控制台快速创建向量数据库实例,简化安装、部署和运维操作[163]。
-
局限:
- 主要局限于向量数据处理,对于其他类型的数据处理和分析能力较弱。
- 生态系统相对薄弱,缺乏与其他数据库产品的兼容性和协同性[163]。
Milvus向量数据库专为向量查询与检索设计,能够为万亿级向量数据建立索引,适用于处理海量向量数据,并广泛应用于AI领域[163]。
Milvus向量数据库的操作可以通过Python SDK进行,以下是一些基本操作的步骤和方法[173]:
运行操作前的准备
-
导入 pymilvus:
from milvus import Milvus, IndexType, MetricType, Status
-
连接到 Milvus 服务器:
milvus = Milvus() milvus.connect(host='localhost', port='19530') # 或使用URI方式连接 milvus.connect(uri='tcp://localhost:19530')
创建表
-
准备表参数:
param = { 'table_name': 'test01', 'dimension': 256, 'index_file_size': 1024, 'metric_type': MetricType.L2 }
-
创建表:
milvus.create_table(param)
-
确认表信息:
status, table = milvus.describe_table('test01')
显示表
-
显示所有表:
status, tables = milvus.show_tables()
-
显示表的元数据:
status, table = milvus.describe_table('test01')
-
显示表的行数:
status, num = milvus.get_table_row_count('test01')
插入向量
-
生成向量(如果没有现成的向量):
import random vectors = [[random.random() for _ in range(256)] for _ in range(20)]
-
插入向量:
status, ids = milvus.add_vectors(table_name='test01', records=vectors)
-
提供自定义向量ID(可选):
vector_ids = [id for id in range(20)] status, ids = milvus.add_vectors(table_name='test01', records=vectors, ids=vector_ids)
创建索引
-
在插入向量后,建议创建索引以优化搜索性能。Milvus支持多种索引类型,如FLAT、IVF_FLAT、IVF_SQ8等。
milvus.create_index(table_name, index_type=IndexType.FLAT, params={"nlist": 1024})
查询向量
-
使用创建的索引进行向量搜索。
query_expression = "vector_field in float_vector" search_params = { "nprobe": 32, "limit": 10 } status, results = milvus.search_vectors(table_name, query_vectors, params=search_params)
删除表
-
如果需要删除表,可以使用以下命令:
milvus.drop_table('test01')
这些步骤提供了Milvus向量数据库的基本操作流程,包括创建表、插入数据、创建索引、查询以及删除表等。在实际操作中,可能还需要根据具体需求进行更详细的配置和优化。