概述
关于Milvus的介绍,可搜索网络资料。Milvus的使用还在摸索中;打算写一篇,时间待定。
关于Attu的资料:
- 官网
- GitHub
- 文档
对于Milvus的数据可视化,有如下两个备选项:
- Milvus_cli:命令行工具
- Attu:Zilliz为Milvus专门开发的图形界面客户端
相较于Milvus_cli简单直接的命令行,Attu的特性:
- 提供Win,Mac,Linux可执行安装包;
- 易用的图形化界面;
- Milvus主要功能全覆盖;
- 插件方便拓展自定义功能;
- 系统拓扑图信息完备,易于使用;
- 帮助运维人员理解系统架构,方便系统调试。
下载
从官方GitHub下载页面根据系统版本,选择最新版,如Windows系统的exe或Mac系统的dmg安装文件,双击安装即可,非常简单。
界面简介
和其他任何一款数据库连接工具类似,非常简单,不再赘述。如果配置过认证,则需要输入token、用户名、密码。
连接成功后的界面:
从上图可看到:
- 顶部展示连接信息;
- 当前是主页;
- 太阳图标表明当前是白亮(light)模式,点击图标可切换到暗黑(night)模式;
- 图标右侧也展示连接信息,以及系统运行状态;
- 点击右侧的退出图标,可切换到不同的Milvus连接(或集群);
- 左侧边栏包括四个模块:主页、数据库、用户和角色、系统视图;
- 默认创建default数据库,可新增数据库;
- 展示数据库名称,及其下面有多少个集合,创建时间等信息;
- 系统信息:展示连接到的Milvus Server版本号,部署模式,运行时间,用户和角色;
- 左下角展示Attu的版本号:v2.5.2。
注:v2.5.2版本的Attu,暂时没找到(也可能是我不知道)管理多个不同的Milvus集群连接的入口,只能通过退出登录的方式切换连接。
创建数据库
非常简单,点击上图的创建数据库,输入名称即可。
值得注意的是数据库属性,如下图,点击编辑可修改,也可重置修改后的属性:
包括:
database.replica.number
:副本数;database.resource_groups
:资源组;database.diskQuota.mb
:磁盘限额,单位MB;database.max.collections
:最大集合个数;database.force.deny.writing
:强制禁止写入。
创建集合
点击创建collection,其中主键字段有两个类型:
向量字段:
标量字段:
点击分词器右侧的设置按钮:
选择一致性:
信息量非常大:
- 主键字段支持重命名,一般建议使用id;
- 主键字段只能为INT64或VARCHAR;
- 可勾选自动ID,默认勾选;
- 一个集合可以有多个向量字段;
- 向量类型包括:Binary、Float、Float16、BFloat16、Sparse、BM25(VarChar)
- 向量维度可调整,参考下面章节;
- 一个集合必须要有一个主键字段和至少一个向量字段,可以没有标量字段;
- 集合可以新增多个标量字段;
- 标量字段类型包括:Int8、Int16、Int32、Int64、Float、Double、Boolean、VarChar、JSON、Array;
- 标量字段可为空,不为空时需要设置默认值;
- Array类型的标量字段,数组里的类型支持:Int8、Int16、Int32、Int64、Float、Double、Boolean、VarChar;
- 标量字段为VarChar时,可设置分词器(包括Standard、English、Chinese),开启匹配;
- 一致性:参考下面章节
- 动态schema:Milvus将根据分区键字段中的值在分区中存储entities,只支持一个Int64或VarChar字段;
- 加载集合:
向量维度
设置向量维度的注意事项
- 向量维度必须一致:在同一个集合中,所有向量的维度必须相同。在创建集合时指定的,无法在集合创建后更改。
- 向量维度影响存储和计算:高维向量会占用更多的存储空间,并且在计算相似度时所需的计算资源也会更多;低维向量则相反。
- 选择合适的向量维度:
- 向量维度的选择应基于具体应用需求。通常,高维向量能更好地表示复杂的数据结构,但也会增加计算复杂度。
- 对于某些特定的应用场景,如图像检索、NLP等,通常有推荐的向量维度。例如,使用预训练的深度学习模型生成的特征向量通常有固定的维度,一般都是2的n次幂,如128、256、512等。
向量维度对相似度计算的影响
- 向量维度直接影响相似度度量的计算。常用的相似度度量方法有欧氏距离、余弦相似度等。这些度量方法在高维空间中的计算复杂度会增加。
- 高维向量可能会导致
维度灾难
问题,影响相似度计算的准确性和效率。使用降维技术或适当的索引算法可缓解这一问题。
向量维度对向量搜索的影响
- 高维向量搜索的计算复杂度较高,可能会导致搜索性能下降。选择合适的索引算法(如IVF、HNSW等)可提高搜索性能。
- Milvus提供多种索引类型,适用于不同的向量维度和数据规模。根据具体需求选择合适的索引类型和参数。
一致性
Milvus支持四个一致性级别:
- Strong:强一致性,最高,最严格,确保用户可读取最新版本的数据。会增加延迟
- Bounded:有界,默认级别;Milvus里该级别也叫staleness,有界陈旧性,允许在一定时间内存在数据不一致;一般情况下,在该时间段之外的时间内,数据总是全局一致的。适用于需要控制搜索延迟并且可以接受零星数据不可见性的场景。例如,在视频推荐引擎等推荐系统中,数据不可见性有时对总的召回率影响较小,但可显着提升推荐系统的性能。
- Session:会话一致性,保证在同一会话中,所有数据写入在读取时可以立即感知到。即,当你通过一个客户端写入数据时,新插入的数据可立即被搜索到。
- Eventually:最终一致性。读取和写入的顺序没有保证,并且在不进行进一步的写操作的情况下,复制品最终会收敛到相同的状态。复制品使用最新更新的值来处理读请求。可极大地缩短搜索延迟。
Schema
如下图
创建集合时,如果没有勾选加载,或加载后点击释放,则不再可用于搜索:
创建索引
创建集合时,默认自动创建索引,且类型为AUTOINDEX,可修改索引:
- 先删除
- 再创建
主键ID字段,是标量字段;
在标量字段上创建索引:
如上图,标量索引包括:
- Trie
- HASH
- BTREE
- SLOT_SORT
- BITMAP
- INVERTED
在向量字段上创建索引:
如上图,向量索引包括:
- 内存索引
- HNSW
- IVF_FLAT
- IVF_PQ
- IVF_SQ8
- FLAT
- SCANN
- 磁盘索引
- DISKANN
- GPU索引
- GPU_CAGRA
- GPU_IVF_FLAT
- GPU_IVF_PQ
- GPU_BRUTE_FORCE
关于索引类型,这些概念实际上是Milvus里的知识点。敬请期待鄙人写出Milvus博客。
数据导入
向量检索
未加载的集合,无法执行向量搜索。
过滤表达式
如上图:
- 可以添加多个添加,并设置与(AND)、或(OR);
- 表达式可以复制出来;
- metadata是一个JSON字段,会自动让用户选择一个key字段;
- Logic可选项如下:
还可以将整个查询表达式导出为客户端查询code:
目前仅支持Python和Node JS,此功能还是Beta版(查询条件不完善):
Segment
数据段
压缩,Compact
落盘,Flush
集合属性
集合创建成功后,会看到一个属性列表:
包括:
collection.ttl.seconds
:过期时间,单位秒;collection.autocompaction.enabled
:是否开启自动压缩;collection.insertRate.max.mb
:最大插入速率;collection.insertRate.min.mb
:最小插入速率;collection.upsertRate.max.mb
:最大更新或插入速率;collection.upsertRate.min.mb
:最小更新或插入速率;collection.deleteRate.max.mb
:最大删除速率;collection.deleteRate.min.mb
:最小删除速率;collection.bulkLoadRate.max.mb
:最大批量加载速率;collection.bulkLoadRate.min.mb
:最小批量加载速率;collection.queryRate.max.qps
:最大查询速率;collection.queryRate.min.qps
:最小查询速率;collection.searchRate.max.vps
:最大搜索速率;collection.searchRate.min.vps
:最小搜索速率;collection.diskProtection.diskQuota.mb
:触发磁盘保护限额,单位MB;collection.replica.number
:副本数。
用户与角色
新增角色时,选择权限。
新增用户时,选择角色。
Milvus中的授权对象主要包含全局、集合和用户。授权时如果权限选择*
,则意味着该角色拥有授权对象的所有API调用权限。每个对象对应的权限和接口API如下表所示。接口API和权限一般是同名,若不为同名,则会单独列出。
全局权限列表:
- CreateCollection
- DropCollection
- DescribeCollection
- ShowCollections
- RenameCollection
- FlushAll
- CreateOwnership:接口为CreateUser CreateRole
- DropOwnership:接口为DeleteCredential DropRole
- SelectOwnership:接口为SelectRole/SelectGrant
- ManageOwnership:接口为OperateUserRole OperatePrivilege
- CreateResourceGroup
- DropResourceGroup
- DescribeResourceGroup
- ListResourceGroups
- TransferNode
- TransferReplica
- CreateDatabase
- DropDatabase
- ListDatabases
- CreateAlias
- DropAlias
- DescribeAlias
- ListAliases
集合权限列表:
- CreateIndex
- DropIndex
- IndexDetail:接口为DescribeIndex/GetIndexState/GetIndexBuildProgress
- Load:接口为LoadCollection/GetLoadingProgress/GetLoadState
- GetLoadingProgress
- GetLoadState
- Release:接口为ReleaseCollection
- Insert
- Delete
- Upsert
- Search
- Flush:接口为Flush/GetFlushState
- GetFlushState
- Query
- GetStatistics:接口为GetCollectionStatistics
- Compaction:接口为Compact
- Import:接口为BulkInsert/Import
- LoadBalance
- CreatePartition
- DropPartition
- ShowPartitions
- HasPartition
用户权限列表:
- UpdateUser:接口为UpdateCredential
- SelectUser
系统视图
提供一张完整的Milvus系统拓扑图,点击拓扑图中的每个节点,可了解到节点自身的状态变化(每10秒动态刷新)
点击Nodes子节点,可进入节点列表视图,查看子节点列表及状态。通过排序,可以迅速定位到高CPU或高内存占用节点,方便排查问题。
进阶
高可用
自建集群
云产品
使用云产品,如阿里云。
监控告警
可供参考的监控指标示例
规则名称 | 监控项 | 指标采样周期 | 报警规则 |
---|---|---|---|
milvus_ProcessResidentMemoryUtilization | 内存使用率 | 60秒 | 连续5个周期平均值 >= 80%,则发出告警 |
milvus_ProcessCPUUtilization | CPU使用率 | 60秒 | 连续5个周期平均值 >= 90%,则发出告警 |
实现思路
Prometheus采集Milvus服务器(或pod)指标数据
参考
- Milvus图形化管理工具Attu来袭
- Milvus一致性