向量数据库-Milvus

本文涉及的产品
阿里云百炼推荐规格 ADB PostgreSQL,4核16GB 100GB 1个月
简介: Milvus 是一个开源的、高性能的向量数据库,专为海量向量数据的快速检索而设计。在人工智能、计算机视觉、推荐系统和其他需要处理大规模向量数据的领域有着广泛应用【7月更文挑战第3天】

向量数据库-Milvus

一、Milvus介绍

上一小节中,全面介绍了向量和向量数据库,今天详细介绍下其中比较出名的开源数据库Milvus。希望对你有帮助

md-2024-06-27-19-31-49.png

Milvus 是一个开源的、高性能的向量数据库,专为海量向量数据的快速检索而设计。在人工智能、计算机视觉、推荐系统和其他需要处理大规模向量数据的领域有着广泛应用。以下是从产品功能、技术特点和优势等方面对 Milvus 的详细介绍:

Milvus的产品功能

  1. 向量检索

    • 支持基于欧氏距离、内积和余弦相似度的近似最近邻(ANN)检索。
    • 支持高维向量数据的高效检索,适用于图像、视频、音频和自然语言处理等领域。
  2. 多模态数据管理

    • 除了支持向量数据,Milvus 还提供对结构化数据、非结构化数据的管理和检索能力。
  3. 分布式架构

    • 支持分布式存储和计算,能够处理 PB 级的数据,并且具备较高的扩展性。
  4. 数据持久化

    • 自动执行数据持久化操作,确保数据的持久保存和快速恢复。
  5. 实时插入和查询

    • 支持实时数据插入和快速查询,满足在线服务的需求。
  6. 多种索引类型

    • 提供多种索引类型(如 IVF、IVF_SQ8、HNSW、ANNOY 等),用户可以根据具体应用场景选择合适的索引算法。
  7. 丰富的 API 和客户端支持

    • 提供多种 API 和客户端库,支持 Python、Java、Go 等主流编程语言,方便用户进行二次开发。

Milvus的技术特点

  1. 高性能

    • 通过优化的数据结构和算法,Milvus 能够实现高效的向量数据检索,适应不同的使用场景需求。
  2. 分布式架构

    • 采用分布式架构,具备线性扩展能力,可以处理大规模数据并保持高吞吐量和低延迟。
  3. 灵活的索引机制

    • 支持多种索引类型,并允许用户根据数据特点和查询需求选择和调整索引,提供灵活的检索方案。
  4. 自动数据分片和负载均衡

    • 自动将数据分片存储到不同的节点上,并进行负载均衡,确保系统的高可用性和高性能。
  5. 高可用性和容错性

    • 通过多副本机制和数据持久化策略,保证数据的高可用性和容错性。
  6. 强大的查询优化

    • 内置查询优化器,能够智能优化查询路径,提升查询效率。

Milvus的优势

  1. 开源和社区支持

    • Milvus 是一个开源项目,有一个活跃的社区,提供丰富的文档和示例代码,方便用户快速上手和使用。
  2. 高扩展性

    • 采用分布式架构,具备很强的扩展性,能够轻松扩展至数百节点,处理 PB 级数据。
  3. 多场景适用性

    • 适用于多种应用场景,包括图像检索、视频检索、推荐系统、自然语言处理等领域。
  4. 易于集成

    • 提供丰富的 API 和多个编程语言的客户端库,便于集成到现有系统中。
  5. 高性能

    • 通过优化的向量检索算法和索引机制,能够在大规模数据下保持高性能的检索能力。
  6. 全面的数据支持

    • 不仅支持向量数据,还支持结构化和非结构化数据,能够满足多样化的数据管理需求。

Milvus 是一个功能强大、高性能的向量数据库,专为大规模向量数据的检索和管理而设计。其主要特点包括高性能、分布式架构、灵活的索引机制、高可用性和容错性等。凭借这些特点和优势,Milvus 在人工智能、计算机视觉、推荐系统等领域有着广泛的应用。作为一个开源项目,Milvus 拥有活跃的社区和丰富的文档支持,是开发者进行大规模向量数据处理和检索的理想选择。

二、docker 安装

Milvus的安装是通多docker镜像安装的,所以之前先安装docker

sudo yum remove docker \
              docker-client \
              docker-client-latest \
              docker-common \
              docker-latest \
              docker-latest-logrotate \
              docker-logrotate \
              docker-engine
sudo yum remove docker*

sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

sudo yum-config-manager \
    --add-repo \
    https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

sudo sed -i 's/download.docker.com/mirrors.aliyun.com\/docker-ce/g' /etc/yum.repos.d/docker-ce.repo


yum list docker-ce --showduplicates | sort -r

# 注意docker-ce 和 containerd.io的版本
sudo yum install docker-ce-17.12.1.ce-1.el7.centos  containerd.io-_1.2.13-2 docker-buildx-plugin docker-compose-plugin

sudo systemctl start docker
sudo docker run hello-world

三、Milvus 安装

Milvus安装参考官方文档


mkdir milvus_compose
cd milvus_compose
wget https://github.com/milvus-io/milvus/releases/download/v2.2.8/milvus-standalone-docker-compose.yml -O docker-compose.yml
vim /etc/docker/daemon.json 
sudo systemctl daemon-reload
sudo systemctl restart docker
docker-compose up -d

# 安装 python接口库

pip install pymilvus

md-2024-06-27-17-59-42.png

需要注意Milvus和python的对应版本

md-2024-06-27-18-19-29.png

四、milvus基本操作

pymilvus 是 Milvus 的官方 Python SDK,用于与 Milvus 向量数据库进行交互。pymilvus 提供了丰富的 API 用于管理集合、索引、插入数据和执行查询等操作。以下是 pymilvus 的一些基本操作介绍,包括连接到 Milvus、创建集合、插入数据、构建索引和执行查询。

1. 安装 pymilvus

首先,你需要安装 pymilvus 库:

pip install pymilvus

2. 连接到 Milvus

使用 connections.connect 方法连接到 Milvus 实例:

from pymilvus import connections

# 连接到本地 Milvus 实例
connections.connect(alias="default", host="localhost", port="19530")

3. 创建集合

创建一个新的集合,包括定义集合的名称和字段(例如,向量字段和 id 字段):

from pymilvus import Collection, FieldSchema, CollectionSchema, DataType

# 定义字段
id_field = FieldSchema(name="id", dtype=DataType.INT64, is_primary=True)
vector_field = FieldSchema(name="vector", dtype=DataType.FLOAT_VECTOR, dim=128)

# 定义集合的 Schema
schema = CollectionSchema(fields=[id_field, vector_field], description="example collection")

# 创建集合
collection = Collection(name="example_collection", schema=schema)

4. 插入数据

向集合中插入数据:

import numpy as np

# 生成一些示例数据
ids = [i for i in range(10)]
vectors = np.random.random((10, 128)).tolist()

# 插入数据
collection.insert([ids, vectors])

5. 构建索引

为向量字段构建索引以加速查询:

# 定义索引参数
index_params = {
   
   
    "metric_type": "L2",
    "index_type": "IVF_FLAT",
    "params": {
   
   "nlist": 128}
}

# 创建索引
collection.create_index(field_name="vector", index_params=index_params)

6. 执行查询

执行向量检索查询:

# 加载集合到内存
collection.load()

# 生成查询向量
query_vectors = np.random.random((1, 128)).tolist()

# 定义搜索参数
search_params = {
   
   
    "metric_type": "L2",
    "params": {
   
   "nprobe": 10}
}

# 执行搜索
results = collection.search(
    data=query_vectors, 
    anns_field="vector", 
    param=search_params, 
    limit=3,
    expr=None
)

# 输出结果
for result in results:
    for hit in result:
        print(f"ID: {hit.id}, Distance: {hit.distance}")

7. 管理集合

查看集合信息:

# 获取集合信息
print(collection.num_entities)  # 显示集合中的实体数

删除集合:

# 删除集合
collection.drop()

8. 断开连接

完成所有操作后,可以断开与 Milvus 的连接:

connections.disconnect(alias="default")

总结

通过以上步骤,你可以使用 pymilvus 执行基本的 Milvus 操作,包括连接到 Milvus、创建集合、插入数据、构建索引和执行查询。这些操作构成了使用 Milvus 进行向量数据处理的基础。pymilvus 提供了丰富的 API,可以在实际应用中满足各种向量数据管理和检索的需求。

相关实践学习
阿里云百炼xAnalyticDB PostgreSQL构建AIGC应用
通过该实验体验在阿里云百炼中构建企业专属知识库构建及应用全流程。同时体验使用ADB-PG向量检索引擎提供专属安全存储,保障企业数据隐私安全。
AnalyticDB PostgreSQL 企业智能数据中台:一站式管理数据服务资产
企业在数据仓库之上可构建丰富的数据服务用以支持数据应用及业务场景;ADB PG推出全新企业智能数据平台,用以帮助用户一站式的管理企业数据服务资产,包括创建, 管理,探索, 监控等; 助力企业在现有平台之上快速构建起数据服务资产体系
目录
相关文章
|
4月前
|
存储 Java 数据库
向量数据库Milvus
在实习期间构建了基于Milvus的向量数据库,用于存储和检索大模型问答对信息。遇到的问题包括:vectorFloat类型在JDK<16时不可用;数据结构和索引选择至关重要。流程包括创建数据库、配置Field、匹配与处理数据、计算Embedding并插入数据。Milvus构建涉及HNSW索引,调整索引参数以优化少量数据的查询速度。向量检索技术包括MMR检索,用于提高内容的多样性和相关性,以及单向量和批量向量搜索,用于高效地检索最相似的向量。搜索参数如`metric_type`、`nprobe`等可调优查询性能。
118 3
|
6月前
|
存储 机器学习/深度学习 API
开源向量数据库比较:Chroma, Milvus, Faiss,Weaviate
该文探讨了向量数据库在语义搜索和RAG中的核心作用,并介绍了四个开源向量数据库:Chroma、Milvus、Faiss和Weaviate。这些数据库用于存储高维向量,支持基于相似性的快速搜索,改变了传统的精确匹配方法。文章详细比较了它们的特性,如Chroma的易用性,Milvus的存储效率,Faiss的GPU加速,和Weaviate的图数据模型。选择合适的数据库取决于具体需求,如数据类型、性能和使用场景。
1393 0
|
6月前
|
算法 数据库 Docker
大模型必备向量数据库-Milvus的安装过程
大模型必备向量数据库-Milvus的安装过程
538 0
|
存储 机器学习/深度学习 人工智能
基于 阿里云 ACK 搭建开源向量数据库 Milvus
生成式 AI(Generative AI)引爆了向量数据库(Vector Database)市场,基于大模型的各种应用场景会需要使用到向量数据库。 其中,Milvus 是一个高度灵活、可靠且速度极快的云原生开源向量数据库。它为 embedding 相似性搜索和 AI 应用程序提供支持,并努力使每个组织都可以访问向量数据库。 Milvus 可以存储、索引和管理由深度神经网络和其他机器学习(ML)模型生成的十亿级别以上的 embedding 向量。 本文介绍在阿里云ACK上部署Milvus并且通过attu访问的步骤。
3368 0
|
存储 人工智能 自然语言处理
云原生向量数据库Milvus(一)-简述、系统架构及应用场景(上)
Milvus 是一款云原生向量数据库,它具备高可用、高性能、易拓展的特点,用于海量向量数据的实时召回。
|
存储 SQL Kubernetes
云原生向量数据库Milvus(一)-简述、系统架构及应用场景(下)
Milvus 是一款云原生向量数据库,它具备高可用、高性能、易拓展的特点,用于海量向量数据的实时召回。
|
SQL 存储 弹性计算
云原生向量数据库Milvus(二)-数据与索引的处理流程、索引类型及Schema(上)
本文将介绍 Milvus 系统中数据写入、索引构建、数据查询的具体处理流程,同时,还会介绍Milvus支持的索引类型;另外,还将讲述如何定义字段和集合Schema。
|
自然语言处理 Cloud Native 数据挖掘
云原生向量数据库Milvus(二)-数据与索引的处理流程、索引类型及Schema(下)
本文将介绍 Milvus 系统中数据写入、索引构建、数据查询的具体处理流程,同时,还会介绍Milvus支持的索引类型;另外,还将讲述如何定义字段和集合Schema。
|
6月前
|
Shell Android开发
Android系统 adb shell push/pull 禁止特定文件
Android系统 adb shell push/pull 禁止特定文件
544 1
|
6月前
|
Android开发 Python
Python封装ADB获取Android设备wifi地址的方法
Python封装ADB获取Android设备wifi地址的方法
150 0