🚀 免費嘗試 Zilliz Cloud,完全托管的 Milvus,體驗速度提升 10 倍!立即嘗試

milvus-logo
LFAI
主頁
  • 常見問題

效能常見問題

如何為 IVF 索引設定nlistnprobe

設定nlist 需視情況而定。根據經驗,nlist 的建議值是4 × sqrt(n) ,其中n 是段中實體的總數。

每個區段的大小由datacoord.segment.maxSize 參數決定,預設值為 512 MB。網段 n 中的實體總數可以用datacoord.segment.maxSize 除以每個實體的大小來估計。

nprobe 的設定是針對資料集和情境而定,並涉及準確性和查詢效能之間的權衡。我們建議透過反覆的實驗找出理想的值。

以下圖表是在 sift50m 資料集和 IVF_SQ8 索引上執行測試的結果,其中比較了不同nlist/nprobe 對的召回率和查詢效能。

Accuracy test 精確度測試 Performance test效能測試

為什麼有時候在較小的資料集上查詢需要較長的時間?

查詢作業是在區段上進行的。索引可減少查詢資料段所需的時間。如果資料段沒有索引,Milvus 就會對原始資料進行暴力搜尋,大大增加查詢時間。

因此,在小型資料集(集合)上查詢通常需要較長的時間,因為它尚未建立索引。這是因為其區段的大小尚未達到rootCoord.minSegmentSizeToEnableindex 所設定的索引建立臨界值。呼叫create_index() ,強制 Milvus 為已達到臨界值但尚未自動建立索引的區段建立索引,可大幅改善查詢效能。

哪些因素影響 CPU 使用量?

當 Milvus 建立索引或執行查詢時,CPU 使用量會增加。一般而言,除了使用 Annoy(在單一線程上執行)外,索引建立都是 CPU 密集型的。

當執行查詢時,CPU 使用量會受到nqnprobe 的影響。當nqnprobe 較小的時候,並發量會很低,CPU 使用量也會保持在低水平。

同時插入資料和搜尋會影響查詢效能嗎?

插入作業不是 CPU 密集型作業。然而,由於新的區段可能尚未達到建立索引的臨界值,Milvus 會採用強制搜尋,這會嚴重影響查詢效能。

rootcoord.minSegmentSizeToEnableIndex 參數決定段的索引建立臨界值,預設為 1024 行。如需詳細資訊,請參閱系統設定

索引 VARCHAR 欄位可以提高刪除速度嗎?

為 VARCHAR 欄位建立索引可以加快「Delete By Expression」作業的速度,但僅限於特定情況:

  • INVERTED 索引:此索引有助於非主索引鍵 VARCHAR 欄位上的IN== 表達式。
  • Trie 索引:此索引有助於非主鍵 VARCHAR 欄位上的前綴查詢 (例如LIKE prefix%)。

但是,索引 VARCHAR 欄位並不會加快速度:

  • 按 ID 刪除:當 VARCHAR 欄位是主索引鍵時。
  • 不相關的表達:當 VARCHAR 欄位不是刪除表達式的一部分時。

還有問題嗎?

您可以

  • 在 GitHub 上查看Milvus。隨時提出問題、分享想法並幫助他人。
  • 加入我們的Slack 頻道,尋找支援並參與我們的開放原始碼社群。

免費嘗試托管的 Milvus

Zilliz Cloud 無縫接入,由 Milvus 提供動力,速度提升 10 倍。

開始使用
反饋

這個頁面有幫助嗎?