milvus文档

向量数据库

milvus架构

代理

proxy对外的代理(入口)

协调器

总控制 root coord
query coord 查询协调器
data coord 插入协调器
index coord 索引协调器
2.3把 datacoord和indexcoord 合并
任务包括集群拓扑管理、负载平衡、时间戳生成、数据声明和数据管理

Coordinator HA高可用
1打开配置项 queryCoord.enableActiveStandby=true
2部署时启动两个 QueryCoord 节点,两者会按照启动先后顺序成为主备节点,当主节点不可用时,备用节点会成为新的 coordinator,这大大增强了系统的可用性。

执行节点

query node 查询执行
data node 插入执行
index node 索引执行
高可用易拓展

各个节点都是独立的解耦非常好,比如如果查询够不上了就多个部署个查询节点

第三方对接

etcd(存储元信息(比如集合名称)和服务发现)
kafka/pulsar 数据日志部分,(类似于管道)通过订阅来走数据插入的。(保证流通) 2.3 正在基于NATS做自己的消息队列(正在实验阶段)
minio/s3 对象存储(数据落地的地方)
注意这仨都很重要 建议单独做集群或者备份处理

跟关系型数据库的比对

Milvus向量数据库 关系型数据库
Collection 表
Entity 行
Field 表字段

集合Collection

集合(类似关系型数据库的表)
1)创建必须包含一个主键(INT64或String类型,自动生成的目前不是唯一的,最好自己指定)和矢量字段
2)创建可以指定分片(Shards)数量(默认是2),为了多节点并行插入
3)可以动态设置数据过期时间,我的理解是数据删除的时候不是真的删了,等到刷新时间才删除。(目前只有python支持)默认是0
4)可以查看是否存在集合,查看集合详细信息,查看所有集合
5)可以删除集合,集合里的数据也都不可逆的删除
6)取别名,删除别名
7)可以将集合加载到缓存,加快查询速度和吞吐量都增加了(内存注意占90%以下)
8)加载到缓存的,查询后,可以释放掉。空出资源。

分区Partition

分区: Milvus 支持将收集数据划分为物理存储上的多个部分。这个过程称为分区,每个分区可以包含多个段。
可以做到:
1:指定集合,创建分区 ,如果不指定 默认_default分区
2:1)集合里是否有指定分区。2)可以查询某个集合里所有的分区
3:可以删掉某个分区。删除分区后会不可逆的删除分区的数据。
4:可以将某个分区加载到缓存里。相比集合加载到分区,减少内存的使用。(加载多副本可以让空闲的查询节点利用上。目前加载成多副本,只有python支持)
5:加载到缓存的,查询后,可以释放掉。空出资源。

注意: 分区的意义在于通过划定分区减少数据读取,而分片的意义在于多台机器上并行写入操作。

Segment

分段:通过合并数据自动创建的数据文件。一个 collection 可以包含多个 segment。一个 segment 可以包含多个 entity。在搜索中,
Milvus 会搜索每个 segment,并返回合并后的结果。

Sharding

分片:Shard 是指将数据写入操作分散到不同节点上,使 Milvus 能充分利用集群的并行计算能力进行写入。默认情况下,单个 Collection 包含 2 个分片(Shard)。目前 Milvus 采用基于主键哈希的分片方式,未来将支持随机分片、自定义分片等更加灵活的分片方式。

数据管理

目前已经有了VARCHAR标量数据。(里面可以存储图片名称之类的)可以查询和索引
插入
插入的时候可以指定Partition分区,插入到指定分区。
插入的时候组织的是一列一列的数据不是一行一行的。
批量插入
json格式:{
rows”:[
{“book_id”: 101, “word_count”: 13, “book_intro”: [1.1, 1.2]},
{“book_id”: 102, “word_count”: 25, “book_intro”: [2.1, 2.2]},
{“book_id”: 103, “word_count”: 7, “book_intro”: [3.1, 3.2]},
{“book_id”: 104, “word_count”: 12, “book_intro”: [4.1, 4.2]},
{“book_id”: 105, “word_count”: 34, “book_intro”: [5.1, 5.2]}
]
}
1)rows的名字不能改
2)book_intro是有要求的 请看官网
1)json文件批量插入,减少了Milvus客户端、代理、Pulsar和数据节点之间的网络传输
2)如果是新版本 要把文件存储到milvus.yml里面配置的minio.bucketName
3)只支持一个文件
4)由于批量插入是异步的,可以查看批量插入的状态
5)可以查看所有插入任务的列表
6)MilvusDM:批量插入的工具
删除
通过主键删除,删除后如果consistency level(数据一致性)比Strong低是可以被立即被查询和恢复的,但超出指定时间外就不可以了。
删除频繁会影响性能的。
删除只能用主键当条件并用in(主键 in [0,1] 删除主键是0和1的数据 ),不能用其他字段。
压缩数据
默认是压缩的,可以配置,当配置不压缩,也可以手动压缩
Milvus在common.retensionDuration中指定的范围内保留数据操作日志不被压缩。可以保留时间内查询的准确性。(不压缩查的准,压缩数据小,所以按实际情况指定时间范围内不压缩,范围外压缩)
压缩是异步的很耗时
可以查看压缩状态

索引 index

向量索引,查询索引相似的,如果不建立索引,就是暴力查询。
默认情况下 数据少于1024不能被建立索引。想要更改milvus.yaml里rootCoord.minSegmentSizeToEnableIndex的配置
如果是标量索引不用索引构建参数,默认类型是字典树
建立索引需要指定算法
索引可建立,可删除,一个向量字段只能有一个向量。
IndexType:索引类型
for floating point vectors:
HNSW:(2.3说RHNSW也删掉了不知道是不是一个)
不差钱,性能高,精准度高,内存高。
适用:同时要求性能和精准度,如果大数据量需要不差钱。
FLAT:
不压缩向量(唯一可以保证精确搜索结果的索引),性能稍低,精准度最高,内存占用仅次于HNSW。
适用:要求精准度,对性能要求低,且数据集相对较小。(不建议大数据量,因为当查询一个 它会把所有数据拿出来一个一个对比。)(百万规模)可以用作别的结果对错的标杆。
IVF_FLAT :
和FLAT的区别,类似调表的索引,设置nlist将向量数据划分多少组,然后比较目标输入向量与每个聚类中心之间的距离, 查询的时候设置nprobe 比如设置3 就找离搜索向量最的近3个组里的数据挨个去对比。
特点 相对来说节省资源,对精准度有一定损失 但不大
推荐参数设置
nlist:4 × sqrt(n) n是一段数据有多少个实体,datacoord.segment.maxSize( 默认512 MB )除以每个实体的大小就可以获得多少个实体。
nprobe:根据实际情况做调节。
IVF_SQ8:
有数据压缩(内存节省70–75%),资源受限的时候可以用IVF_SQ8代替IVF_FLAT,精度减少了
IVF_PQ:
把高维数据变成多个低维数据,进一步节省资源可以用IVF_PQ,精度更小
ANNOY:(低纬度向量)树形索引…官网上有介绍但没说啥适用范围啥的。网上视频介绍都把它放过了没介绍它。就先这样。以后遇到了在补充(2.3版本已经删掉了)
DISKANN:
磁盘索引,内存消耗最小的。需要很高性能的SSD。需要自己编译
也不是完全不用内存。是你全部用内存的1/6算。
要求 :
Ubuntu 18.04.6以上版本
float向量,至少32维以上
L2或者IP来测量向量之间的距离
下面是两个GPU索引
GPU_IVF_FLAT* (GPU_IVF_FLAT)
GPU_IVF_PQ*> (GPU_IVF_PQ)
上面索引资源节省从上到下是一步一步 越来越节省的。
For binary vectors:
BIN_FLAT
BIN_IVF_FLAT
(这俩跟上面FLAT,IVF_FLAT )类似只不过是二进制的。

距离计算公式

浮点型向量主要使用以下距离计算公式:
欧氏距离 (L2): 主要运用于计算机视觉领域。
内积 (IP): 主要运用于自然语言处理(NLP)领域。
余弦(COSINE),如果做了标准化 ip很cosine是一样的。如果没做用cosine处理nlp领域

二值型向量主要使用以下距离计算公式:
汉明距离 (Hamming): 主要运用于自然语言处理(NLP)领域。
杰卡德距离 (Jaccard): 主要运用于化学分子式检索领域。
谷本距离 (Tanimoto): 主要运用于化学分子式检索领域。
超结构 (Superstructure): 主要运用于检索化学分子式的相似超结构。
子结构 (Substructure): 主要运用于检索化学分子式的相似子结构。

查询

search :先要加载集合到缓存–>然后在查询–>最后清理掉集合缓存。比较好理解 用法参考官网。
查询的结果是最相似的,应该是相似度由高到低有顺序的。
Hybrid Search:标量矢量混合搜寻。跟search一样只是多出了个表达式比如 字段值>100当条件。
query:标量查询条件可以查出向量的意思 感觉没啥用。
时间点的查询:可以查询历史默认432,000s内的可以查询。其他的被压缩了。common.retensionDuration可以配置这个保留时间。

管理指南

由于我只会docker,所以都是基于docker的管理处理
1下载milvus.yaml里面都是各个节点的配置,根据情况修改
2下载milvus-cluster-docker-compose.yml
3把compose文件里每个节点都添加volumes,然后把milvus.yaml映射到下载的milvus.yaml
4然后启动docker-compose,这样就启动了
milvus.yaml的详解我会在部署测试的时候把每个参数写上说明。后续把文件贴上来用作更新

部署到云

AWS,GCP,Azure。官网提供的,目前用不上,暂时先放着。如有有对应,补充。

添加和缩放节点

注意能够动态的 是无状态节点:数据节点,查询节点,索引节点,代理。协调器是主备

监视器和报警

Prometheus和Grafana

RBAC权限

目前只有java和python支持
角色分配可用集合或者分区–>给用户属于某个角色(这样用户就拥有权限了)
这些操作都是可以删除和解绑的(不可逆)。

安全

说白了就是如何用户验证
1启动用户验证milvus.yaml里common.security.authorizationEnabled 设置为 true
2当链接集合的时候需要配置用户名密码(关于长度之类的有要求,详细看文档)。
默认情况下,根用户(用户名:root,密码:Milvus)与每个Milvus实例一起创建。建议您在首次启动Milvus时密码。根用户可用于创建新用户以进行身份验证访问。
Encryption in Transit传输层加密 TLS (Transport Layer Security)
1创建证书
2在milvus.yaml里配置
1)tlsEnabled为true,
2)tls:
serverPemPath: configs/cert/server.pem
serverKeyPath: configs/cert/server.key
caPemPath: configs/cert/ca.pem
(设置生成的证书)=
3)链接的时候带上相应的证书
分单项认证和双向认证,所要的证书不同。

管理工具

Milvus_CLI:交互式命令行,基于python
MilvusDM :数据迁移,只支持1.x(可以不考虑)
Attu:服务可视化,Zilliz.一个开源项目. 文档最多比较官方
Milvus sizing tool:容量评估

注意

建议部署用Kubernetes(k8s)
Milvus 2.2.0以上搜索速度有显著提高。
你下载的版本和代码里引入的版本必须一致
关于不停机滚动升级:只有通过 helm 部署的 Milvus 集群支持滚动升级,Operator 部署暂不支持。
插入不占用cpu,但耗资源。比如有kafka,流传输什么的。
Milvus float只保留7位小数。多了会删掉。
ttl时间:可以把过期数据做一个自动删除
2.3
开始支持arm64版服务器
支持英伟达GPU,正在做升腾GPU适配。
GPU查询速度快3到10倍

不要使用时间旅行功能,
停止了CentOS 支持

支持了CDC
通常用于主动/备用数据同步、增量数据备份和数据迁移等场景。 https://github.com/zilliztech/milvus-cdc.

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
功能设计 ​ 系统功能模块较为简单,主要功能就是**新增人脸**和**人脸搜索**两个功能,其中新增人脸使用页面上传和压缩包批量上传两个方式,压缩包上传时文件名称为用户名,下面主要说明人脸搜索的功能流程 ##### Milvues ​ 在介绍前需要说明一下Mulvus ​ Milvus 向量数据库能够帮助用户轻松应对海量非结构化数据(图片 / 视频 / 语音 / 文本)检索。单节点 Milvus 可以在秒内完成十亿级的向量搜索 ​ 因此虹软的SDK只能提取向量及对比的功能,在大规模人脸识别中,需要搜索引擎对于人脸数据进行初步筛选到一个较小的范围后在利用虹软的SDK进行测试,值得一提的是,博主多次测试后Milvues返回的匹配率足以满足人脸匹配的要求,Milvus的安装部署和使用文档参考 https://milvus.io/cn/docs/v2.0.x ​ **特别说明的是**虹软提取的数组是一个经过归一后的1032长度的byte数组,我们需要对数组进行转换,去除前8位的版本号,并将1024长度的byte转为256长度的float向量,这部分可以利用Arrays提供的方法进行转换,代码中也有相应的工具类 ##### 人脸上传(单张) ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。
要搭建Milvus集群,可以使用Helm工具来快速部署。首先,根据Milvus文档,安装并使用Helm Milvus chart来创建集群。这个chart提供了一些默认的配置,但你可以根据你的需求进行调整。 在安装之前,确保你已经安装了Helm工具,并且已经添加了Milvus chart的仓库。接下来,使用Helm命令来安装Milvus集群,具体命令如下: helm install <release_name> milvus/milvus 请将<release_name>替换为你想要为这个集群指定的名称。安装完成后,你可以使用kubectl命令来查看集群的状态和各个组件的信息。 如果你想要对集群进行更多的配置,你可以参考Milvus文档中关于Helm Milvus chart的更多配置选项。这些配置选项可以帮助你自定义集群的规模、存储、安全性等方面的设置。 总结起来,想要搭建Milvus集群,你可以使用Helm Milvus chart来快速部署。通过调整配置选项,你可以自定义集群的各个方面。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [ModaHub魔搭社区:基于阿里云 ACK 搭建开源向量数据库 Milvus](https://blog.csdn.net/qinglingye/article/details/131576631)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [Milvus实战 | 基于Mishards的分布式集群方案](https://download.csdn.net/download/weixin_38611812/14036547)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [Helm部署Milvus集群](https://blog.csdn.net/weixin_48190891/article/details/123795134)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值