向量數據庫Milvus03-高級功能與性能調優

Milvus高級功能與性能調優


目錄

  1. 高級特性詳解
  2. 性能調優技巧
  3. 生產環境部署最佳實踐
  4. 總結與展望

1. 高級特性詳解

1.1 多索引兼容

Milvus 支持多種索引類型(如 HNSW、IVF_PQ、IVF_FLAT)的混合使用,以適應不同場景的需求。

  • HNSW(Hierarchical Navigable Small World Graph)

    • 適用場景:高并發、低延遲的實時搜索(如推薦系統)。
    • 優勢:無需倒排索引,支持動態更新。
    • 調優建議
      index_params = {"index_type": "HNSW","params": {"M": 48, "efConstruction": 200},"metric_type": "L2"
      }
      collection.create_index("embedding", index_params)
      
  • IVF_PQ(Inverted File with Product Quantization)

    • 適用場景:大規模數據壓縮存儲(如搜索引擎)。
    • 優勢:內存占用低,適合 GPU 加速。
    • 調優建議
      index_params = {"index_type": "IVF_PQ","params": {"nlist": 100, "m": 16},"metric_type": "L2"
      }
      collection.create_index("embedding", index_params)
      
  • 混合索引策略

    • 對于混合查詢(如語義搜索 + 標量過濾),可結合 HNSW 與 IVF_PQ 的優勢。
    • 示例
      # 先構建 HNSW 索引加速搜索,再通過 IVF_PQ 壓縮存儲
      collection.create_index("embedding", index_params_hnsw)
      collection.create_index("embedding", index_params_ivf_pq)
      

1.2 語義搜索與推薦系統

Milvus 2.5 引入了 全文檢索(FTS)混合檢索(Hybrid Search) 功能,支持結合向量相似性與文本匹配的聯合搜索。

  • 混合檢索場景

    • RAG(Retrieval-Augmented Generation):結合向量召回與 BM25 排序。
    • 示例
      from pymilvus import AnnSearchRequest, HybridSearchRequest# 定義向量搜索請求
      vector_request = AnnSearchRequest(data=[query_vector],anns_field="embedding",param={"nprobe": 10},limit=100
      )# 定義文本搜索請求(BM25)
      text_request = AnnSearchRequest(data=["AI", "machine learning"],anns_field="text",param={"k1": 1.2, "b": 0.75},limit=100
      )# 混合檢索并融合結果
      hybrid_request = HybridSearchRequest(vector_request, text_request)
      results = collection.hybrid_search(hybrid_request, limit=10)
      
  • 性能優化

    • 使用 RRF(Reciprocal Rank Fusion)算法融合多路結果。
    • 通過 output_fields 控制返回字段,減少冗余數據加載。

1.3 分布式擴展

Milvus 2.6 引入 Tiered Storage(冷熱分層)Streaming Service(實時數據流處理),支持 PB 級數據管理。

  • 冷熱分層策略

    • 熱數據:存儲在高速 SSD 中(如 NVMe)。
    • 冷數據:遷移到低成本對象存儲(如 MinIO、S3)。
    • 配置示例
      storage:warm_storage: "ssd:/data/warm"cold_storage: "s3://bucket/cold"
      
  • 水平擴展

    • QueryNode:動態負載均衡,自動分配查詢任務。
    • DataNode:支持多副本寫入,提升吞吐量。

2. 性能調優技巧

2.1 索引選擇策略

  • 小規模數據(<100K):使用 FLAT 或 HNSW,保證精度。

  • 中大規模數據(100K~1M):使用 IVF_PQ 或 IVF_SQ,平衡速度與內存。

  • 超大規模數據(>1M):啟用 Tiered Storage + RaBitQ 量化壓縮。

  • 關鍵參數調優

    參數作用推薦值
    nlistIVF_PQ 的聚類中心數數據量的 √n(如 1M → 1024)
    nprobe搜索的簇數nlist 的 1%~10%
    MHNSW 的連接數48~64(高維向量建議更高)
    efConstructionHNSW 構建時的探索深度200~300

2.2 查詢優化

  • 避免頻繁小文件導入

    • 小批量數據(如 <100 條)頻繁寫入會增加 Compaction 負擔。
    • 解決方案:批量插入(每批 1000~5000 條)。
  • 謹慎使用標量過濾

    • 前過濾(Pre-filtering):生成 Bitset 后過濾向量,適用于 IVF_PQ。
    • 后過濾(Post-filtering):先召回 TopK 向量,再通過其他數據庫過濾。
    • HNSW 的特殊性:標量過濾可能導致性能下降,建議通過分區(Partition)優化。
  • 分區策略

    • 按時間分區:例如按日/月劃分數據。
    • 按類別分區:例如按用戶 ID 或標簽分類。
    • 代碼示例
      # 創建分區
      collection.create_partition("partition_202505")# 插入數據到指定分區
      collection.insert(data, partition_name="partition_202505")
      

2.3 GPU 加速實踐

Milvus 2.6 支持 RaBitQ 1-bit 量化,結合 GPU 顯著提升 QPS。

  • 啟用 GPU 資源

    # 配置 GPU 加速
    config = {"gpu_search_threshold": 1000,"enable_gpu": True
    }
    connections.connect(**config)
    
  • 量化壓縮效果

    • 內存壓縮比:1/32(RaBitQ 1-bit) + 1/4(SQ8 Refine) → 總壓縮比 1/3。
    • QPS 提升:3~5 倍(VectorDBBench 測試)。

3. 生產環境部署最佳實踐

3.1 容器化部署(Kubernetes)

  • Helm Chart 部署

    helm install my-release milvus/milvus \--set mode=cluster \--set etcd.replicaCount=3 \--set storage.class=ssd \--set tieredStorage.enabled=true
    
  • 存儲優化

    • Etcd:獨立部署 SSD,預留 4GB 內存。
    • MinIO:配置糾刪碼(Erasure Code)冗余,磁盤空間預留 6 倍原始數據。

3.2 高可用性配置

  • 多副本

    • QueryNode:至少 3 個副本,自動負載均衡。
    • DataNode:支持多副本寫入,避免單點故障。
  • 故障恢復

    • 定期備份:通過 milvus-backup 工具導出數據。
    • 自動恢復:配置 etcd 快照和 Compaction 策略。

4. 總結與展望

總結

本次博客深入探討了 Milvus 的高級功能與性能調優技巧,包括:

  1. 多索引兼容:HNSW、IVF_PQ 的混合使用策略。
  2. 混合檢索:結合向量相似性與文本匹配的聯合搜索。
  3. 分布式擴展:冷熱分層存儲與水平擴展實踐。
  4. 性能優化:索引參數調優、分區策略與 GPU 加速。

展望

隨著 Milvus 2.6 的發布,未來將聚焦以下方向:

  1. AI 原生能力:深度集成大模型推理與訓練。
  2. 云原生增強:支持 Serverless 架構與自動擴縮容。
  3. 生態整合:與 LangChain、Elasticsearch 等工具鏈無縫對接。

參考資料

  • Milvus 官方文檔:https://milvus.io/docs/zh/
  • CSDN 技術社區:https://blog.csdn.net/
  • GitHub 倉庫:https://github.com/milvus-io/milvus

版權聲明:本文為原創文章,轉載請注明出處。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/82331.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/82331.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/82331.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

5月24日day35打卡

模型可視化與推理 知識點回顧&#xff1a; 三種不同的模型可視化方法&#xff1a;推薦torchinfo打印summary權重分布可視化進度條功能&#xff1a;手動和自動寫法&#xff0c;讓打印結果更加美觀推理的寫法&#xff1a;評估模式 作業&#xff1a;調整模型定義時的超參數&#x…

野火魯班貓(arrch64架構debian)從零實現用MobileFaceNet算法進行實時人臉識別(三)用yolov5-face算法實現人臉檢測

環境直接使用第一篇中安裝好的環境即可 先clone yolov5-face項目 git clone https://github.com/deepcam-cn/yolov5-face.git 并下載預訓練權重文件yolov5n-face.pt 網盤鏈接: https://pan.baidu.com/s/1xsYns6cyB84aPDgXB7sNDQ 提取碼: lw9j &#xff08;野火官方提供&am…

R語言科研編程-柱狀圖

R語言簡介 R語言是一種開源的統計計算和圖形繪制編程語言&#xff0c;廣泛應用于數據分析、機器學習、數據可視化等領域。它由Ross Ihaka和Robert Gentleman于1993年開發&#xff0c;具有豐富的統計函數庫和圖形功能&#xff0c;尤其適合數據科學研究和可視化任務。 使用R語言…

Android-Handler學習總結

??面試官?&#xff1a;你好&#xff01;我看你簡歷里提到熟悉 Android 的 Handler 機制&#xff0c;能簡單說一下它的作用嗎&#xff1f; ?候選人?&#xff1a; Handler 是 Android 中用來做線程間通信的工具。比如Android 應用的 UI 線程&#xff08;也叫主線程…

【iOS】分類、擴展、關聯對象

分類、擴展、關聯對象 前言分類擴展擴展和分類的區別關聯對象key的幾種用法流程 總結 前言 最近的學習中筆者發現自己對于分類、擴展相關知識并不是很熟悉&#xff0c;剛好看源碼類的加載過程中發現有類擴展與關聯對象詳解。本篇我們來探索一下這部分相關知識&#xff0c;首先…

30.第二階段x64游戲實戰-認識網絡數據包發送流程

免責聲明&#xff1a;內容僅供學習參考&#xff0c;請合法利用知識&#xff0c;禁止進行違法犯罪活動&#xff01; 內容參考于&#xff1a;圖靈Python學院 上一個內容&#xff1a;29.第二階段x64游戲實戰-技能冷卻 發送數據包的方式&#xff08;函數&#xff09;操作系統提供…

【每日一題】【前綴和優化】【前/后綴最值】牛客練習賽139 B/C題 大衛的密碼 (Hard Version) C++

牛客練習賽139 B題 大衛的密碼 (Easy Version) 牛客練習賽139 C題 大衛的密碼 (Hard Version) 大衛的密碼 題目背景 牛客練習賽139 題目描述 給定一個 n m n\times m nm的網格圖&#xff0c;我們使用 ( i , j ) (i,j) (i,j)表示網格中從上往下數第 i i i行和從左往右數第…

文件夾圖像批處理教程

前言 因為經常對圖像要做數據清洗&#xff0c;又很費時間去重新寫一個&#xff0c;我一直在想能不能寫一個通用的腳本或者制作一個可視化的界面對文件夾圖像做批量的修改圖像大小、重命名、劃分數據訓練和驗證集等等。這里我先介紹一下我因為寫過的一些腳本&#xff0c;然后我…

【Unity實戰筆記】第二十四 · 使用 SMB+Animator 實現基礎戰斗系統

轉載請注明出處&#xff1a;&#x1f517;https://blog.csdn.net/weixin_44013533/article/details/146409453 作者&#xff1a;CSDN|Ringleader| 1 結構 1.1 狀態機 1.2 SMB 2 代碼實現 2.1 核心控制 Player_Base_SMB 繼承 StateMachineBehaviour &#xff0c;控制變量初始…

Python虛擬環境再PyCharm中自由切換使用方法

Python開發中的環境隔離是必不可少的步驟,通過使用虛擬環境可以有效地管理不同項目間的依賴,避免包沖突和環境污染。虛擬環境是Python官方提供的一種獨立運行環境,每個項目可以擁有自己單獨的環境,不同項目之間的環境互不影響。在日常開發中,結合PyCharm這樣強大的IDE進行…

大模型智能體入門掃盲——基于camel的概述

前言 本篇博客想帶讀者進行一個智能體入門掃盲&#xff0c;了解基礎知識&#xff0c;為什么用camel呢&#xff0c;因為小洛發現它們文檔對這種智能體的基本組件介紹得很全面深入。 基礎概念 agent 一個典型的agent智能體包含三個核心部分&#xff1a; 感知模塊&#xff1…

目標檢測 RT-DETR(2023)詳細解讀

文章目錄 主干網絡&#xff1a;Encoder&#xff1a;不確定性最小Query選擇Decoder網絡&#xff1a; 將DETR擴展到實時場景&#xff0c;提高了模型的檢測速度。網絡架構分為三部分組成&#xff1a;主干網絡、混合編碼器、帶有輔助預測頭的變換器編碼器。具體來說&#xff0c;先利…

DeepSeek 賦能數字農業:從智慧種植到產業升級的全鏈條革新

目錄 一、數字農業的現狀與挑戰二、DeepSeek 技術解析2.1 DeepSeek 的技術原理與優勢2.2 DeepSeek 在人工智能領域的地位與影響力 三、DeepSeek 在數字農業中的應用場景3.1 精準種植決策3.2 病蟲害監測與防治3.3 智能灌溉與施肥管理3.4 農產品質量追溯與品牌建設 四、DeepSeek …

<uniapp><vuex><狀態管理>在uniapp中,如何使用vuex實現數據共享與傳遞?

前言 本專欄是基于uniapp實現手機端各種小功能的程序&#xff0c;并且基于各種通訊協議如http、websocekt等&#xff0c;實現手機端作為客戶端&#xff08;或者是手持機、PDA等&#xff09;&#xff0c;與服務端進行數據通訊的實例開發。 發文平臺 CSDN 環境配置 系統&…

高速串行差分信號仿真分析及技術發展挑戰續

7.3 3.125Gbps 差分串行信號設計實例仿真分析 7.3.1 設計用例說明 介紹完 Cadence 系統本身所具有的高速差分信號的仿真分析功能之后&#xff0c;我們以一個實例來說明 3.125Gbps 以下的高速差分系統的仿真分析方法。 在網上下載的設計文件“Booksi_Demo_Allegro160_Finishe…

【Golang】部分語法格式和規則

1、時間字符串和時間戳的相互轉換 func main() {t1 : int64(1546926630) // 外部傳入的時間戳&#xff08;秒為單位&#xff09;&#xff0c;必須為int64類型t2 : "2019-01-08 13:50:30" // 外部傳入的時間字符串//時間轉換的模板&#xff0c;golang里面只能是 &quo…

第十六章:數據治理之數據架構:數據模型和數據流轉關系

本章我們說一下數據架構&#xff0c;說到數據架構&#xff0c;就很自然的想到企業架構、業務架構、軟件架構&#xff0c;因為個人并沒有對這些內容進行深入了解&#xff0c;所以這里不做比對是否有相似或者共通的地方&#xff0c;僅僅來說一下我理解的數據架構。 1、什么是架構…

Day126 | 靈神 | 二叉樹 | 層數最深的葉子結點的和

Day126 | 靈神 | 二叉樹 | 層數最深的葉子結點的和 1302.層數最深的葉子結點的和 1302. 層數最深葉子節點的和 - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a; 這道題用層序遍歷的思路比較好想&#xff0c;就把每層的都算一下&#xff0c;然后返回最后一層的和就…

PCIE 4.0 vs PCIE 5.0固態硬盤——區別、科普與選購場景全解析

隨著數字內容和高性能計算需求的爆發&#xff0c;固態硬盤&#xff08;SSD&#xff09;已成為PC、游戲主機和工作站不可或缺的核心硬件。面對市面上層出不窮的新一代SSD產品&#xff0c;大家最常見的一個疑惑&#xff1a;**PCIe 4.0和PCIe 5.0固態硬盤&#xff0c;到底有啥區別…

vue pinia 獨立維護,倉庫統一導出

它允許您跨組件/頁面共享狀態 持久化 安裝依賴pnpm i pinia-plugin-persistedstate 將插件添加到 pinia 實例上 pinia獨立維護 統一導出 import { createPinia } from pinia import piniaPluginPersistedstate from pinia-plugin-persistedstateconst pinia creat…