Milvus 向量數據庫詳解與實踐指南

一、Milvus 核心介紹

1. 什么是 Milvus?

????????Milvus 是一款開源、高性能、可擴展的向量數據庫,專門為海量向量數據的存儲、索引和檢索而設計。它支持近似最近鄰搜索(ANN),適用于圖像檢索、自然語言處理(NLP)、推薦系統、語義搜索、智能問答、多模態數據處理等 AI 應用場景。它能夠高效處理:

  • 嵌入向量(Embeddings)

  • 特征向量(Feature Vectors)

  • 任何高維數值向量

2. 核心特性

特性說明
多索引支持IVF_FLAT、IVF_PQ、HNSW、Annoy 等
分布式架構支持水平擴展,處理十億級向量
多語言 SDKPython、Java、Go、RESTful API
云原生設計Kubernetes 友好,支持多云部署
混合查詢支持向量+標量數據的聯合查詢

3. 典型應用場景

  • 圖像/視頻檢索

  • 語義文本搜索

  • 推薦系統

  • 異常檢測

  • 分子結構搜索

二、詳細使用案例:構建電商圖像搜索系統

案例背景

為電商平臺搭建一個以圖搜圖系統,用戶上傳商品圖片可找到相似商品。

實施步驟

1. 環境準備
# 安裝依賴
pip install pymilvus torch torchvision pillow
2. 特征提取模型
import torch
import torchvision.models as models
from torchvision import transforms# 使用ResNet50提取特征
model = models.resnet50(pretrained=True)
model.eval()# 圖像預處理
preprocess = transforms.Compose([transforms.Resize(256),transforms.CenterCrop(224),transforms.ToTensor(),transforms.Normalize(mean=[0.485, 0.456, 0.406],std=[0.229, 0.224, 0.225])
])def extract_features(img_path):img = Image.open(img_path)img_t = preprocess(img)batch_t = torch.unsqueeze(img_t, 0)with torch.no_grad():features = model(batch_t)return features.numpy().flatten()
3. Milvus 集合(Collection)創建
from pymilvus import (connections,FieldSchema, CollectionSchema, DataType,Collection, utility
)# 連接Milvus
connections.connect("default", host="localhost", port="19530")# 定義Schema
fields = [FieldSchema(name="id", dtype=DataType.INT64, is_primary=True),FieldSchema(name="product_id", dtype=DataType.VARCHAR, max_length=64),FieldSchema(name="image_vector", dtype=DataType.FLOAT_VECTOR, dim=2048),  # ResNet50輸出維度FieldSchema(name="category", dtype=DataType.VARCHAR, max_length=128)
]schema = CollectionSchema(fields, description="Product image search collection")
collection = Collection("product_images", schema)# 創建索引
index_params = {"index_type": "IVF_FLAT","metric_type": "L2","params": {"nlist": 128}
}
collection.create_index("image_vector", index_params)
4. 數據插入
# 假設已有商品圖片數據
product_data = [{"product_id": "1001", "image_path": "path/to/image1.jpg", "category": "electronics"},# 更多商品數據...
]data = [[],  # id列表[],  # product_id列表[],  # 特征向量列表[]   # category列表
]for idx, product in enumerate(product_data):features = extract_features(product["image_path"])data[0].append(idx)data[1].append(product["product_id"])data[2].append(features)data[3].append(product["category"])# 批量插入
collection.insert(data)
5. 相似搜索
# 用戶上傳圖片搜索
search_img_path = "user_upload.jpg"
search_vector = extract_features(search_img_path)search_params = {"metric_type": "L2","params": {"nprobe": 16}
}results = collection.search(data=[search_vector],anns_field="image_vector",param=search_params,limit=5,output_fields=["product_id", "category"]
)for hits in results:for hit in hits:print(f"產品ID: {hit.entity.get('product_id')}, 距離: {hit.distance}, 類別: {hit.entity.get('category')}")

三、關鍵注意事項

1. 生產環境部署建議

  • 集群部署:單機版僅適合開發測試,生產環境使用分布式集群

  • 資源規劃

    • 向量維度越高,所需資源越多

    • 10億條128維向量 ≈ 500GB內存 + 1TB SSD

  • 高可用配置

    # docker-compose.yml示例配置
    etcd:deploy:replicas: 3
    minio:deploy:replicas: 4

    2. 性能優化技巧

  • 索引選擇

    場景推薦索引特點
    高精度IVF_FLAT召回率高,內存占用大
    內存敏感IVF_PQ有損壓縮,節省內存
    超大規模DISKANN支持SSD存儲
  • 查詢參數調優

    # 平衡精度與性能的關鍵參數
    search_params = {"nprobe": 32,  # 增大值提高精度但降低性能"ef": 64       # HNSW專用參數
    }

    3. 常見問題處理

  • 內存不足
    # 調整Milvus配置
    docker-compose.yml中增加:
    milvus-standalone:environment:- QUERY_NODE_GC_INTERVAL=300- QUERY_NODE_GC_THRESHOLD=0.0001
  • 數據一致性
    # 插入后立即查詢可能看不到數據
    collection.flush()  # 手動刷新
  • 版本升級:

    1. 備份元數據(etcd)和對象存儲(MinIO)

    2. 使用官方遷移工具?

4. 安全建議

  • 啟用身份驗證:
    # 啟動時配置
    docker-compose.yml:
    environment:- MILVUS_AUTHORIZATION_ENABLED=true- MILVUS_ROOT_PASSWORD=YourSecurePassword
  • 網絡隔離:
    # 只允許內網訪問
    networks:milvus_net:internal: true

四、擴展應用場景

1. 跨模態搜索

# 同時處理文本和圖像
multi_modal_collection = CollectionSchema([FieldSchema(name="text_vector", dtype=DataType.FLOAT_VECTOR, dim=768),FieldSchema(name="image_vector", dtype=DataType.FLOAT_VECTOR, dim=2048)
])# 混合查詢
expr = "category == 'electronics'"
collection.search(data=[query_vector],anns_field="image_vector",expr=expr,  # 結合標量過濾limit=10
)

2.實時推薦系統?

# 用戶行為向量更新
def update_user_vector(user_id, new_behavior_vec):# 獲取現有向量current_vec = get_user_vector(user_id)# 加權平均更新updated_vec = 0.9 * current_vec + 0.1 * new_behavior_vec# 更新Milvuscollection.delete(f"id == {user_id}")collection.insert([[user_id], [updated_vec]])

五、監控與維護

1. 關鍵監控指標

指標健康值檢查命令
QPS< 1000/節點show metrics
內存使用< 80%docker stats
查詢延遲< 50mstime search...

2. 備份策略

# 定期備份
docker exec milvus-minio mc alias set myminio http://minio:9000 minioadmin minioadmin
docker exec milvus-minio mc cp --recursive myminio/milvus /backup/

?????????通過以上完整案例和注意事項,您可以構建一個高效的向量檢索系統。Milvus 2.x 版本相比1.x有顯著架構改進,建議新項目直接使用2.x版本。了解更多可以參閱milvus官方文檔。安裝教程可以參閱下面文章👇:mac 使用 Docker 安裝向量數據庫Milvus獨立版的保姆級別教程-CSDN博客

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

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

相關文章

算力經濟模型研究:從云計算定價到去中心化算力市場設計

引言&#xff1a;算力商品化的雙重革命 在H800 GPU集群的算力供給能力突破2.3 EFLOPS的今天&#xff0c;算力定價機制正經歷從"資源租賃"到"動態市場"的范式轉變。傳統云計算定價模型&#xff08;如AWS按需實例&#xff09;的靜態價格機制已難以適應大模型…

[D1,2] 貪心刷題

文章目錄 擺動序列最大子數組合買賣股票跳躍游戲跳躍2 擺動序列 不像是貪心&#xff0c;只要抓住擺動這個點&#xff0c;前一個上升&#xff0c;那下一個就要下降&#xff0c;記錄上一次的狀態為1的話&#xff0c;那下一次就要更新為-1&#xff0c;如果上一次為1&#xff0c;這…

Spring Boot操作MongoDB的完整示例大全

以下是基于Spring Boot操作MongoDB的完整示例大全&#xff0c;涵蓋增刪改查、聚合查詢、索引、事務等核心功能&#xff1a; 一、基礎CRUD操作 1. 環境配置 依賴配置&#xff08;pom.xml&#xff09; <dependency><groupId>org.springframework.boot</groupId…

【實戰教程】零基礎搭建DeepSeek大模型聊天系統 - Spring Boot+React完整開發指南

&#x1f525; 本文詳細講解如何從零搭建一個完整的DeepSeek AI對話系統&#xff0c;包括Spring Boot后端和React前端&#xff0c;適合AI開發入門者快速上手。即使你是編程萌新&#xff0c;也能輕松搭建自己的AI助手&#xff01; &#x1f4da;博主匠心之作&#xff0c;強推專欄…

Linux系統基本指令和知識指南

一、Linux系統簡介 Linux是一種自由和開放源代碼的類UNIX操作系統&#xff0c;由林納斯托瓦茲在1991年首次發布。它以穩定性、安全性和靈活性著稱&#xff0c;廣泛應用于服務器、嵌入式系統和個人計算機。 Linux主要特點&#xff1a; 開源免費 多用戶、多任務 良好的安全性…

【計算機視覺】OpenCV實戰項目:Long-Exposure:基于深度學習的長時間曝光合成技術

Long-Exposure&#xff1a;基于深度學習的長時間曝光合成技術 項目概述與技術背景項目核心功能技術原理 環境配置與安裝硬件要求建議詳細安裝步驟可選組件安裝 實戰應用指南1. 基礎使用&#xff1a;視頻轉長曝光2. 高級模式&#xff1a;自定義光軌合成3. 批量處理模式 技術實現…

TikTok 矩陣賬號運營實操細節:打造爆款矩陣

在 TikTok 的流量版圖里&#xff0c;打造 TikTok 矩陣賬號能顯著提升影響力與吸粉能力。而借助 AI 工具&#xff0c;更可為 TikTok 矩陣運營效率的提升賦能&#xff0c;讓運營如虎添翼。下面就為大家詳細講講其中的實操細節&#xff0c;并結合一些偽代碼示例輔助理解。 一、矩…

互聯網大廠Java求職面試:分布式系統中向量數據庫與AI應用的融合探索

互聯網大廠Java求職面試&#xff1a;分布式系統中向量數據庫與AI應用的融合探索 面試開場&#xff1a;技術總監與鄭薪苦的“較量” 技術總監&#xff08;以下簡稱T&#xff09;&#xff1a;鄭薪苦先生&#xff0c;請簡單介紹一下你在分布式系統設計方面的經驗。 鄭薪苦&…

【每日八股】學習 RocketMQ Day2:進階(一)

文章目錄 復習昨日內容為什么要使用消息隊列為什么選擇 RocketMQRocketMQ 的優缺點&#xff1f;談談你對 RocketMQ 的理解&#xff1f;消息隊列有哪些類型&#xff1f;RocketMQ 采用哪種消息隊列模型&#xff1f;消息的消費模式了解嗎&#xff1f;了解 RocketMQ 的基本架構嗎&a…

探索智能體開發新邊界:Cangjie Magic開源平臺體驗與解析

文章目錄 每日一句正能量前言一、Cangjie Magic的核心技術&#xff08;一&#xff09;Agent DSL架構&#xff08;二&#xff09;原生支持MCP通信協議&#xff08;三&#xff09;智能規劃功能 二、實際應用場景&#xff08;一&#xff09;智能客服系統&#xff08;二&#xff09…

深入解析進程間通信與Socket原理:從理論到TypeScript實戰

文章目錄 一、進程中如何通信1.1 管道1.1.1 核心特性1.1.2 缺點1.1.3 匿名管道與命名管道的對比 1.2 信號1.2.1 核心特性1.2.2 缺點1.2.3 信號分類對比 1.3 消息隊列1.3.1 核心特性1.3.2 缺點 1.4 共享內存1.4.1 核心特性1.4.2 缺點 1.5 信號量1.5.1 核心特性1.5.2 缺點 二、So…

力扣-hot100(旋轉圖像)

48. 旋轉圖像 中等 給定一個 n n 的二維矩陣 matrix 表示一個圖像。請你將圖像順時針旋轉 90 度。 你必須在 原地 旋轉圖像&#xff0c;這意味著你需要直接修改輸入的二維矩陣。請不要 使用另一個矩陣來旋轉圖像。 示例 1&#xff1a; 輸入&#xff1a;matrix [[1,2,3],[4…

Docker編排工具---Compose的概述及使用

目錄 一、Compose工具的概述 二、Compose的常用命令 1、列出容器 2、查看訪問日志 3、輸出綁定的公共端口 4、重新構建服務 5、啟動服務 6、停止服務 7、刪除已停止服務的容器 8、創建和啟動容器 9、在運行的容器中執行命令 10、指定一個服務啟動容器的個數 11、其…

C25-數組應用及練習

第一題 題目: 代碼 #include <stdio.h> int main() {//數組及相關數據定義int arr[10];int i;//基于循環的數組數據輸入for(i0;i<10;i){arr[i]i;}//基于循環的數組數據輸出for(i9;i>0;i--){printf("%d ",arr[i]);}return 0; }結果 第二題 題目 代碼 …

網絡安全怎么入門?快速了解

網絡安全是一個快速發展的領域&#xff0c;入門需要系統化的學習和實踐。以下是適合零基礎或轉行者的分階段學習路徑&#xff0c;涵蓋必備知識、學習資源、實戰方法和職業方向&#xff1a; 一、基礎階段&#xff08;1-3個月&#xff09; 1. 掌握核心基礎知識 計算機網絡&#…

express 怎么搭建 WebSocket 服務器

一&#xff1a;使用 express-ws var express require(express); var app express(); var expressWs require(express-ws)(app);app.use(function (req, res, next) {console.log(middleware);req.testing testing;return next(); });app.get(/, function(req, res, next){…

【AI論文】SuperEdit:修正并促進基于指令的圖像編輯的監督信號

摘要&#xff1a;由于手動收集準確的編輯數據存在挑戰&#xff0c;現有的數據集通常使用各種自動化方法構建&#xff0c;導致編輯指令和原始編輯圖像對之間不匹配導致監督信號出現噪聲。 最近的研究試圖通過生成更高質量的編輯圖像、在識別任務上進行預訓練或引入視覺語言模型&…

關于大疆紅外圖片提取溫度方法 python 方法

思路 紅外圖片需要是黑白圖片 提取紅外圖片最高和最低溫度 溫度圖例 根據最高溫度31.2攝氏度 最低溫度19.9攝氏度 那中間的值在 0到255 之間 那有這個值之后。就可以獲取到圖片里面 每個點或者面的值 實現方式 def find_Gray(self, t_max, t_min, c_temp):"""…

金融小知識

&#x1f4c9; 一、“做空”是啥&#xff1f; 通俗說法&#xff1a;押“它會跌”&#xff0c;賺錢&#xff01; ? 舉個例子&#xff1a; 有一天老王的包子漲價到 10 塊一個&#xff0c;張三覺得這價格肯定撐不住&#xff0c;未來會跌到 5 塊。于是他&#xff1a; 向朋友借了…

JavaScript 數據存儲全攻略:從 Cookie 到 IndexedDB

1. Cookie&#xff1a;傳統的輕量級存儲 Cookie 是最早的客戶端存儲解決方案之一&#xff0c;最初設計用于服務器和客戶端之間的狀態保持。 基本用法 javascript 復制 下載 // 設置cookie document.cookie "usernameJohnDoe; expiresThu, 18 Dec 2025 12:00:00 UTC…