Milvus 向量數據庫內存使用相關了解

1、支持 MMap 的數據存儲

在 Milvus 中,內存映射文件允許將文件內容直接映射到內存中。這一功能提高了內存效率,尤其是在可用內存稀缺但完全加載數據不可行的情況下。這種優化機制可以增加數據容量,同時在一定限度內確保性能;但當數據量超出內存太多時,搜索和查詢性能可能會嚴重下降,因此請根據情況選擇打開或關閉此功能。

配置內存映射:從 Milvus 2.4 開始,您可以靈活調整靜態配置文件,在部署前為整個集群配置默認內存映射設置。此外,您還可以動態更改參數,以微調群集和索引級別的內存映射設置。展望未來,未來的更新將把內存映射功能擴展到字段級配置。

...
queryNode:mmap:# Set memory mapping property for whole clustermmapEnabled: false | true# Set memory-mapped directory path, if you leave mmapDirPath unspecified, the memory-mapped files will be stored in {localStorage.path}/ mmap by default. mmapDirPath: any/valid/path 
....

自 2.4.10?之后,配置queryNode.mmap.mmapEnabled?分成以下四個獨立字段,所有默認值均為false?:

  • queryNode.mmap.vectorField, 控制向量數據是否為 mmap;

  • queryNode.mmap.vectorIndex控制向量索引是否為 mmap;

  • queryNode.mmap.scalarField控制標量數據是否為 mmap;

  • queryNode.mmap.scalarIndex控制標量索引是否為 mmap;

...
queryNode:mmap:vectorField: false # Enable mmap for loading vector datavectorIndex: false # Enable mmap for loading vector indexscalarField: false # Enable mmap for loading scalar datascalarIndex: false # Enable mmap for loading scalar index
....

此外,只能單獨為某個 Collections 打開或關閉向量索引和向量數據 mmap,而不能為其他 Collections 打開或關閉。

兼容性:如果原始配置queryNode.mmap.mmapEnabled?設置為true?,則此時新添加的配置將設置為true?。如果queryNode.mmap.mmapEnabled?設置為false?,如果新配置設置為true?,則最終值將為true

2、群集操作符期間:動態配置

在群集運行期間,可以在 Collections 或索引級別動態調整內存映射設置。

Collections 層級,內存映射會應用到集合內所有未索引的原始數據,不包括主鍵、時間戳和行 ID。這種方法特別適用于大型數據集的綜合管理。

若要動態調整 Collections 中的內存映射設置,可使用set_properties()?方法。在這里,可以根據需要在True?或False?之間切換mmap.enabled?。

collection = Collection("test_collection") # Replace with your collection namecollection.set_properties({'mmap.enabled': True})

在 2.4.10?之后,可以使用add_field?方法調整 Collections 中的內存映射設置。在這里,可以根據需要在True?或False?之間切換mmap_enabled?

schema = MilvusClient.create_schema()schema.add_field(field_name="embedding", datatype=DataType.FLOAT_VECTOR, dim=768, mmap_enabled=True)

對于索引級設置,內存映射可專門應用于向量索引,而不會影響其他數據類型。對于需要優化向量搜索性能的 Collections 來說,這一功能非常寶貴。

要為 Collections 中的某個索引啟用或禁用內存映射,可調用alter_index()?方法,在index_name?中指定目標索引名稱,并將mmap.enabled?設置為True?或False

collection.alter_index(index_name="vector_index", # Replace with your vector index nameextra_params={"mmap.enabled": True} # Enable memory mapping for index
)

3、建議在哪些情況下啟用內存映射?啟用此功能后有哪些權衡?

內存有限或性能要求適中時,建議使用內存映射。啟用此功能可提高數據加載能力。例如,在 2 個 CPU 和 8 GB 內存的配置下,啟用內存映射比不啟用內存映射加載的數據多 4 倍。對性能的影響各不相同:

  • 在內存充足的情況下,預期性能與只使用內存的情況類似。

  • 如果內存不足,預期性能可能會下降。

  • Collection-level 和 Index-level 配置之間的關系是什么?

    Collection-level 和 index-level 不是包含關系,Collection-level 控制原始數據是否啟用了 mmap,而 index-level 僅適用于向量索引。

  • 有沒有推薦用于內存映射的索引類型?

    有,建議使用 HNSW 啟用毫米映射。我們曾測試過 HNSW、IVF_FLAT、IVF_PQ/SQ 系列索引,IVF 系列索引的性能下降嚴重,而 HNSW 索引啟用毫米映射后的性能下降仍在預期之內。

  • 內存映射需要什么樣的本地存儲?

    高質量的磁盤可以提高性能,NVMe 驅動器是首選。

  • 標量數據能否進行內存映射?

    內存映射可應用于標量數據,但不適用于基于標量字段建立的索引。

  • 如何確定不同級別內存映射配置的優先級?

    在 Milvus 中,當跨多個級別明確定義內存映射配置時,索引級和 Collect 級配置共享最高優先級,然后是集群級配置。

  • 如果我從 Milvus 2.3 升級,并配置了內存映射目錄路徑,會發生什么情況?

    如果從 Milvus 2.3 升級并配置了內存映射目錄路徑 (mmapDirPath),您的配置將被保留,啟用內存映射的默認設置 (mmapEnabled) 將是true?。遷移元數據對同步現有內存映射文件的配置很重要。

4、Milvus為什么需要load整個index data到內存中,而不是類似MySQL這種傳統數據庫做分片加載

向量每個維度的值是float32,占用4個字節。每條1536維的向量占用的空間是6KB。1000條就是6MB,一百萬條6GB,一億條就是600GB,十億條就是6TB。這個是理論值。然后用不同的索引類型使用的內存關系如下:HNSW/IVF_FLAT ------------- 這兩種需要的內存和理論值基本相等IVF_SQ8/IVF_PQ-------------- 這兩種需要的內存大約相當于理論值的25%~30%

如果除了向量之外還有別的字段,比如Int64類型的字段,十億條就占用 十億乘以8字節 這么多空間。如果是VARCHAR類型,那就跟字符串的長度相關,由于是用UTF-8編碼,每個字符可能占用1~4字節。

所以,你基本可以按這個路子估計出任意數據所需的最小內存。

選擇占內存小的索引是最簡單的方法。降維也是一個方法,但降維的工具你要自己去找。

  1. 換索引類型

  1. 降維HNSW/IVF_FLAT更適用于高維向量且對內存和查詢速度有較高要求,而IVF_SQ8/IVF_PQ適用于大規模數據且能夠在較低的內存消耗下實現高效的近似最近鄰搜索。不知道這個對索引選用的說法對不對。像我這個大規模數據,感覺是得用IVF_SQ8/IVF_PQ去搞

IVF_SQ8對搜索精度有較大影響DiskANN需要高性能磁盤,并且對延遲有很大影響HNSW需要較多的內存使用你也可以直接使用Zilliz cloud的Capacity optimized 實例,目前是性價比比較高的選擇。1億向量大概只需要16CU,大概一萬多一個月

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

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

相關文章

C++編程之旅-- -- --默認成員函數(全詳解)

目錄前言構造函數構造函數形式:構造函數的特性:explicit關鍵字析構函數析構函數的概念析構函數的特性含有類類型的成員變量的類析構函數的調用拷貝構造函數拷貝構造函數的概念拷貝構造函數的特性淺拷貝和深拷貝:拷貝構造函數典型調用場景&…

Linux網絡編程:TCP的遠程多線程命令執行

目錄 前言: 一、前文補充 二、服務端的修改 三、Command類的新增 前言: 好久不見,最近忙于其他事情,就耽誤了咱們的Linux的網絡部分的學習。 今天咱們先來給之前所學的TCP的部分進行一個首尾工作,主要是給大家介紹…

重學React(三):狀態管理

背景: 繼續跟著官網的流程往后學,之前已經整理了描述UI以及添加交互兩個模塊,總體來說還是收獲不小的,至少我一個表面上用了四五年React的前端小卡拉米對React的使用都有了新的認知。接下來就到了狀態管理(React特地加…

java web項目入門了解

目錄一、項目流程1. 使用servle2. 使用框架二、了解java web項目構造1. 項目目錄結構2. 查看頁面訪問順序3. 發起請求:jqueryajax4. 接受參數5. JSONJSON 數組三、get和post請求區別一、項目流程 1. 使用servle 有客戶端和服務端,客戶端和服務端進行交…

網絡資源模板--基于Android Studio 實現的日記本App

目錄 一、測試環境說明 二、項目簡介 三、項目演示 四、部設計詳情(部分) 創建修改頁面 五、項目源碼 一、測試環境說明 電腦環境 Windows 11 編寫語言 JAVA 開發軟件 Android Studio (2020) 開發軟件只要大于等于測試版本即可(近幾年官網直接下載也可…

GO的啟動流程(GMP模型/內存)

目錄第一部分:程序編譯第二部分:函數解讀1)Golang 核心初始化過程2)創建第一個協程3)啟動系統調度4)跳轉main函數5)總結第三部分:GMP模型Goroutine流程解讀第四部分:內存…

OLTP與OLAP:實時處理與深度分析的較量

OLTP(Online Transaction Processing)定義:OLTP 系統主要用于管理事務性應用程序的數據。這類系統需要支持大量的短時、快速的交互式事務,比如銀行交易、在線購物訂單等。特點:實時處理:OLTP 系統要求對數據…

數據安全與隱私保護:企業級防護策略與技術實現

引言:數據安全的新時代挑戰在數字化轉型加速的今天,數據已成為企業最核心的資產。然而,數據泄露事件頻發,據 IBM《2024 年數據泄露成本報告》顯示,全球數據泄露平均成本已達445 萬美元,較 2020 年增長了 15…

AI_RAG

一.為什么需要RAG(AI幻覺)大模型LLM在某些情況下給出的回答很可能錯誤的,涉及虛構甚至是故意欺騙的信息。二.什么是RAGRAG是一種結合“信息檢索”和“文本生成”的技術,旨在提升生成式AI模型的準確性和可靠性。它通過以下兩個核心…

LeetCode111~130題解

LeetCode111.二叉樹的最小深度: 題目描述: 給定一個二叉樹,找出其最小深度。 最小深度是從根節點到最近葉子節點的最短路徑上的節點數量。 說明:葉子節點是指沒有子節點的節點。 示例 1: 輸入:root …

n8n飛書webhook配置(飛書機器人、飛書bot、feishu bot)Crypto節點、js timestamp代碼、Crypto node

自定義機器人使用指南 利用 n8n 打造飛書 RSS 推送機器人 文章目錄自定義機器人使用指南注意事項功能介紹在群組中添加自定義機器人操作步驟邀請自定義機器人進群。- 進入目標群組,在群組右上角點擊更多按鈕,并點擊 設置。- 在右側 設置 界面&#xff0…

nhdeep檔案管理工具軟件官網

歡迎訪問nhdeep官網: www.nhdeep.com NHDEEP提供一系列專業的單機版檔案管理工具,滿足不同場景下的檔案管理需求,無需網絡連接,數據安全可靠。所有工具均提供免費試用版下載。 檔案綜合管理系統單機版:全面的檔案管理解決方案&a…

RocketMQ節點部署計算方案

節點計算公式 業務場景 預期峰值TPS:200,000 單組容量:40K TPS 容災要求:同城雙機房 nameServer節點數max(3, (15/50) 1) max(3, 0.3 1) max(3, 1.3) 3 Broker節點數ceil(200,000 / 40,000) 5組 總節點數 NameServer節點Broker組數(Mas…

MyBatis聯合查詢 - XML篇

文章目錄數據庫設計MyBatis 配置MyBatis 映射文件Mapper 接口總結數據庫設計 建表 SQL CREATE TABLE user (id INT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(50) NOT NULL );CREATE TABLE order (id INT PRIMARY KEY AUTO_INCREMENT,user_id INT NOT NULL,order_no VARCHAR(…

Kubelet 探針如何選擇 IP:status.PodIP 溯源與“同 Pod 兩個 IP“現象解析

背景與現象同一個 Pod 的 readiness 和 liveness 探針日志顯示連接的 IP 不一致(例如 10.10.6.10:9999 與 10.10.6.32:9999)。本文從 kubelet 源碼入手,解釋探針目標 IP 的來源、為何會出現兩個不同 IP,并給出建議與驗證方法。在如…

Arm Development Studio 安全通告:CVE-2025-7427

安全之安全(security)博客目錄導讀 目錄 一、概述 二、CVE 詳情 三、受影響產品 四、建議 五、致謝 六、版本歷史 一、概述 ARM已知悉一個影響 Arm Development Studio 的安全漏洞,該漏洞可能允許攻擊者執行 DLL 劫持攻擊(DLL hijacking attack&…

C#異步編程雙利器:異步Lambda與BackgroundWorker實戰解析

**摘要:**深入剖析兩種異步編程范式,解決GUI線程阻塞難題 一、異步Lambda表達式:事件處理的輕量化利器 核心價值:簡化事件響應中的異步操作,避免UI線程阻塞 ? 典型應用場景(WPF示例)&#xff1…

yolo world (1): 論文解讀

YOLO 系列檢測器以其高效性和實用性而聞名。然而,它們依賴于預定義和訓練的目標類別,這限制了其在開放場景中的適用性。為了解決這一限制,我們提出了 YOLO-World,這是一種創新的方法,通過視覺-語言建模和大規模數據集預訓練,增強了 YOLO 的開放詞匯檢測能力。具體來說,我…

【JVM】深入解析Java虛擬機

目錄 1. 區分JDK,JRE 和 JVM 1.1 JVM 1.2 JRE 1.3 JDK 1.4 關系總結 2. 跨平臺性 3. JVM中的內存劃分 4. JVM的類加載機制 5. 雙親委派模型 6. 垃圾回收機制(GC) 6.1 識別垃圾 6.1.1 單個引用 6.1.2 多個引用 6.2 釋放垃圾 6.…

98-基于Python的網上廚房美食推薦系統

基于Python的網上廚房美食推薦系統 - 技術分享博客 📋 目錄 項目概述技術棧系統架構核心功能實現數據庫設計推薦算法數據可視化部署與優化項目特色總結與展望 🎯 項目概述 項目背景 隨著生活節奏的加快,越來越多的人開始關注美食制作&…