Milvus:百亿级向量数据库的探索
目录CONTENTS什么是向量数据库从向量检索到Milvus不仅仅是ANN搜索ZillizCloud及更多?
什么是向量数据库向量检索是非结构化数据处理的范式,解决传统数据库无法做到基于语义查询,跨模态查询的问题向量数据库是一种专为存储和查询高维度向量数据而优化的数据库系统。
向量数据的场景
Retrieval Augmented Generation(RAG)通过语义检索提高生成式模型的可用性提高准确性和相关性提供私有/特定领域的知识提升知识的实时性消除幻觉
Milvus: 全球第一款向量数据库
目录CONTENTS什么是向量数据库从向量检索到Milvus不仅仅是ANN搜索ZillizCloud及更多?
向量数据库的基石:向量索引IVF,SCANN,…基于桶的ANN算法HNSW,DiskANN,…基于图的ANN算法利用预先插入的数据获取数据分布利用Graph,聚类,Hash等方式快速筛选并接近目标位置利用SQ,PQ量化和SIMD降低单次距离的成本ANNS:ApproximateNearestNeighborSearch
功能上:增删改查复杂查询:多向量、标向量混合等查询一致性多租户监控RBAC可用性上:规模、性能的可扩展性故障恢复能力数据的备份,迁移与导入微服务环境下的快速部署为什么需要向量数据库Milvus的目的:更多,更快
更多:分布式架构支持百亿数据设计理念:存算分离提供更好的可扩展性,资源管理能力和隔离性微服务化+K8s自动化部署,扩展消息队列作为数据骨架:日志即数据解耦不同组件,并且提供简单快捷的故障恢复机制
更多:分布式架构支持百亿数据存算分离:可扩展性:储存和计算节点可以按需独立扩展资源利用:根据不同类型节点定制化的资源让系统能力更强隔离性:某个组件的升级、故障或者热点任务不会影响其他组件池化:IndexNode、和DataNode可以池化以提高资源利用率
更多:分布式架构支持百亿数据流批一体:批量导入:数据跳过复杂的流式系统,直接插入到对象储存向量ETL:数据可以在Spark中进行预处理(数据清洗、向量提取等)再批量导入到Milvus全局优化:数据可以从Milvus全量导出到Spark进行基于全局数据分布的优化再导回Milvus提供更高效的服务
更快:多种索引算法助推性能起飞可插拔向量索引引擎,集成多种业界常用索引,支持不同的场景。支持x86、ARM各种架构,并针对新老机型进行了SIMD调优。和英伟达合作,支持使用GPU获得超高性能对复杂搜索场景进行算法调优,比如过滤搜索
更快:GPU支持获得性能巅峰BatchSize=1BatchSize=100BatchSize=10CPU:m6id.2xlargeT4:g4dn.2xlargeA10G:g5.2xlargeTop100Recall:98%Dataset::/zilliztech/VectorDBBench
更快:不只是简单得快Shard加速数据插入SegmentMilvus的基本数据单元GrowingSegment直接从消息队列里拿取数据以提供快速检索,使用构建较快的索引SealedSegment使用Immutable的索引以保证查询速度除了新增数据的查询,还有大K,删除,过滤,异常分布,等
目录CONTENTS什么是向量数据库从向量检索到Milvus不仅仅是ANN搜索ZillizCloud及更多?
Range Search:更丰富的搜索语义现实场景中很多查询没有相近的匹配项,而有的查询却有很多。用户希望找到足够相近的,而不是足够多的结果避免搜索出毫不相关的结果快速找到未知大小的结果
Sparse:更强大的搜索质量向量检索不是传统关键词检索的替代,而是补充传统关键词检索擅长域外信息、专有词汇的检索而向量检索更擅长关注语义信息
Hybrid SearchDense+Dense组合语义:比如分别用两人的照片搜合照提升精度:比如同一个人的不同视角Scalar+Dense更灵活的检索:比如不同距离的帖子,语义相似度占比不同更全面的检索:比如通过证件号+人脸匹配信息
Groupby:向量化数据库语义的开始查询:结果:如果我们想检索到三种不同的小狗怎么办SELECTtop1(image)GROUPBYnameLIMIT3name:SnoopyTop1GoofyTop2PlutoTop3如果我们没有name列怎么办?SELECTtop1(image)GROUPBYimageLIMIT3接下来还可以支持aggr