Milvus简介和环境搭建

Milvus是一款由Go和C++语言开发的高性能开源向量数据库,广泛应用于图像搜索、自然语言处理、推荐系统等人工智能相关领域。Milvus功能强大且支持GPU加速,它能够实现高吞吐量和低延迟的实时数据处理,此外Milvus天生支持分布式集群部署,能够通过水平扩展承载PB级的数据,这些优势让Milvus成为了许多流行的AI应用底层基础设施。

官方文档:https://milvus.io/

Github:https://github.com/milvus-io/milvus

Milvus中的基本概念

在具体使用Milvus前,我们需要先了解一些基本概念。使用Milvus数据库的过程中需要进行各种操作,这些操作其实都是围绕这些基本概念进行的。

数据库 Database:Database是Milvus中组织和管理Collection的基本单元,在一个Milvus实例中我们可以创建多个Database,用于支持不同的应用程序。Milvus实例启动后,通常会有一个叫default的默认数据库,我们也可以创建额外的数据库管理数据。

集合 Collection:Milvus中Collection可以理解为存储和管理数据的“容器”,类似于传统关系型数据库中的表。Collection是基于Schema创建的,此外其中还包括Collection名、分片数量等信息。

模式 Schema:这里所说的Schema和传统关系型数据库(如MySQL、Oracle、PostgreSQL)中的概念不同,Milvus中的Schema是指Collection的数据字段定义,如果Collection可以理解为表,那么Schema就是表结构定义。Milvus中创建Collection前我们需要先定义Schema。

字段 Field:Schema定义由一组Field组成,这些字段包含三类:主字段、向量字段和标量字段。主字段可以简单理解为关系型数据库中的主键,Milvus中主字段通常是INT64或VARCHAR类型,支持自增主键;向量字段顾名思义存储向量,向量可以通过向量相似度在向量数据库中进行检索;标量字段就是“普通”字段,这些字段通常用于额外的比较、筛选等用途。

索引 Index:Milvus中的索引概念和关系型数据库类似,是建立在数据之上的用于加速检索的数据结构。不过Milvus索引设计上主要用于加速向量检索和标量字段筛选,而非通用的数据查询,这是其与传统关系型数据库的区别。

使用Docker搭建单机Milvus数据库

在本地开发环境中,我们可以使用Docker快速启动Milvus及其依赖,搭建一个用于学习的Standalone模式的Milvus。Milvus依赖Etcd存储元数据信息,首先我们执行以下命令使用Docker启动Etcd。

docker run -p 2379:2379 -p 2380:2380 --name etcd -d -e "ETCDCTL_API=3" -e "ALLOW_NONE_AUTHENTICATION=yes" -e "ETCD_ADVERTISE_CLIENT_URLS=http://0.0.0.0:2379" -e "ETCD_LISTEN_CLIENT_URLS=http://0.0.0.0:2379" -e "ETCD_INITIAL_ADVERTISE_PEER_URLS=http://0.0.0.0:2380" -e "ETCD_LISTEN_PEER_URLS=http://0.0.0.0:2380" -e "ETCD_INITIAL_CLUSTER=default=http://0.0.0.0:2380" quay.io/coreos/etcd:v3.5.0

Milvus通常还配合对象存储服务MinIO使用,数据最终会通过S3协议存储到MinIO中。执行以下命令使用Docker启动MinIO,启动成功后我们可以在管理界面上的Access Keys菜单中创建Access KeySecret Key供Milvus使用。有关MinIO的使用这里不会展开介绍,具体可以参考MinIO相关章节。

docker run -p 9000:9000 -p 9001:9001 --name minio -d -e "MINIO_ROOT_USER=root" -e "MINIO_ROOT_PASSWORD=abcd1234" minio/minio server /data --console-address ":9001"

最后我们执行以下命令启动Milvus。

docker run -p 19530:19530 -p 9091:9091 --name milvus -d -e "ETCD_ENDPOINTS=host.docker.internal:2379" -e "MINIO_ADDRESS=host.docker.internal:9000" -e "MINIO_ACCESS_KEY_ID=WU8GHeL89momzE91C9Kt" -e "MINIO_SECRET_ACCESS_KEY=Bc4Nxo7b2WYV7qGCA3mOFlpFKH1lOyZVDfCltmAr" -e "MINIO_BUCKET_NAME=default" milvusdb/milvus:v2.5.12 milvus run standalone

我们这里暴露了两个端口,19530是大多数SDK连接Milvus服务时使用的gRPC端口,9091则是Restful操作端口以及常用于指标收集、运行状况探测等用途。此外我们还配置了几个环境变量:

  • ETCD_ENDPOINTS:Etcd服务的地址,由于我们这里是Docker搭建的学习环境,因此指定host.docker.internal:2379
  • MINIO_ADDRESS:MinIO服务的地址,同上面我们使用host.docker.internal:9000
  • MINIO_ACCESS_KEY_IDMINIO_SECRET_ACCESS_KEY:MinIO中配置的Access KeySecret Key
  • MINIO_BUCKET_NAME:MinIO中的存储桶名

更多配置项我们可以参考官方文档。

最后,我们还可以搭建Attu,它是Milvus的可视化Web客户端工具,使用Attu能够很方便的供我们查看Milvus中存储的各种信息。

docker run -p 3000:3000 --name attu -d zilliz/attu:v2.5

Attu启动成功后,我们可以使用浏览器访问,首页通常需要我们输入Milvus的地址,这里我们输入host.docker.internal:19530即可。

作者:Gacfox
版权声明:本网站为非盈利性质,文章如非特殊说明均为原创,版权遵循知识共享协议CC BY-NC-ND 4.0进行授权,转载必须署名,禁止用于商业目的或演绎修改后转载。
Copyright © 2017-2024 Gacfox All Rights Reserved.
Build with NextJS | Sitemap