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

milvus-logo
LFAI
  • Home
  • Blog
  • 如何無縫遷移您的資料到 Milvus:全面指南

如何無縫遷移您的資料到 Milvus:全面指南

  • Engineering
December 01, 2023
Wenhui Zhang

Milvus是一個強大的開放原始碼向量資料庫,用於相似性搜尋,能夠以最小的延遲儲存、處理和擷取數十億甚至數萬億的向量資料。它也是高度可擴充、可靠、雲原生且功能豐富的資料庫。Milvus 的最新版本引入了更多令人振奮的功能和改進,包括GPU 支援,可將效能提升 10 倍以上,以及 MMap,可在單一機器上提供更大的儲存容量。

截至 2023 年 9 月,Milvus 已在 GitHub 上贏得近 23,000 顆星星,並擁有來自各行各業、需求各異的數萬名使用者。隨著ChatGPT等 Generative AI 技術的普及,它也變得更加流行。它是各種 AI 堆疊的重要組成部分,尤其是檢索擴增生成框架,可解決大型語言模型的幻覺問題。

為了滿足希望遷移到 Milvus 的新用戶和希望升級到最新 Milvus 版本的現有用戶日益增長的需求,我們開發了Milvus Migration。在這篇部落格中,我們將探討 Milvus Migration 的功能,並引導您快速地將資料從 Milvus 1.x、FAISSElasticsearch 7.0及更高版本轉移到 Milvus。

Milvus Migration,強大的資料遷移工具

Milvus Migration是用 Go 寫成的資料遷移工具。它能讓使用者將資料從舊版本的 Milvus (1.x)、FAISS 和 Elasticsearch 7.0 及更高版本無縫遷移至 Milvus 2.x 版本。

下圖展示了我們如何建立 Milvus Migration 及其運作方式。

Milvus Migration 如何遷移資料

從 Milvus 1.x 和 FAISS 遷移到 Milvus 2.x

從 Milvus 1.x 和 FAISS 的資料遷移包括解析原始資料檔案的內容,轉換成 Milvus 2.x 的資料儲存格式,並使用 Milvus SDK 的bulkInsert 寫入資料。整個過程以流為基礎,理論上只受限於磁碟空間,並將資料檔案儲存於本機磁碟、S3、OSS、GCP 或 Minio。

從 Elasticsearch 到 Milvus 2.x

在 Elasticsearch 資料遷移中,資料擷取是不同的。資料不是從檔案取得,而是使用 Elasticsearch 的捲動 API 依序取得。然後將資料解析並轉換為 Milvus 2.x 儲存格式,接著使用bulkInsert 寫入資料。除了遷移儲存在 Elasticsearch 中的dense_vector 類型向量之外,Milvus Migration 也支援遷移其他欄位類型,包括長、整數、短、布林、關鍵字、文字和 double。

Milvus Migration 功能集

Milvus Migration通過其強大的功能集簡化了遷移過程:

  • 支援的資料來源:

    • Milvus 1.x 至 Milvus 2.x

    • Elasticsearch 7.0 及以上至 Milvus 2.x

    • FAISS 至 Milvus 2.x

  • 多種互動模式:

    • 使用 Cobra 框架的命令列介面 (CLI)

    • 內建 Swagger UI 的 Restful API

    • 整合為其他工具中的 Go 模組

  • 多樣化的檔案格式支援:

    • 本機檔案

    • 亞馬遜 S3

    • 物件儲存服務 (OSS)

    • Google 雲端平台 (GCP)

  • 彈性的 Elasticsearch 整合:

    • 從 Elasticsearch 遷移dense_vector 類型向量

    • 支援遷移其他欄位類型,例如 long、integer、short、boolean、keyword、text 和 double

介面定義

Milvus Migration 提供下列主要介面:

  • /start:啟動遷移工作(等同於 dump 和 load 的組合,目前僅支援 ES 遷移)。

  • /dump:啟動轉儲工作(將源資料寫入目標儲存媒體)。

  • /load:啟動載入作業(將資料從目標儲存媒體寫入 Milvus 2.x)。

  • /get_job:允許使用者檢視工作執行結果。(如需詳細資訊,請參閱專案的 server.go)。

接下來,讓我們使用一些範例資料來探討如何在本節中使用 Milvus Migration。您可以在 GitHub這裡找到這些範例。

從 Elasticsearch 遷移到 Milvus 2.x

  1. 準備 Elasticsearch 資料

遷移 Elasticsearch資料,您應該已經設定好自己的 Elasticsearch 伺服器。您應該在dense_vector 欄位中儲存向量資料,並將它們與其他欄位建立索引。索引對應如下所示。

  1. 編譯與建立

首先,從 GitHub 下載 Milvus Migration 的原始碼。然後,執行下列指令來編譯。

go get
go build

此步驟會產生一個名為milvus-migration 的可執行檔案。

  1. 設定migration.yaml

在開始遷移之前,您必須準備一個名為migration.yaml 的配置檔案,其中包含資料來源、目標和其他相關設定的資訊。以下是一個配置範例:

# Configuration for Elasticsearch to Milvus 2.x migration


dumper:
  worker:
    workMode: Elasticsearch
    reader:
      bufferSize: 2500
meta:
  mode: config
  index: test_index
  fields:
    - name: id
      pk: true
      type: long
    - name: other_field
      maxLen: 60
      type: keyword
    - name: data
      type: dense_vector
      dims: 512
  milvus:
      collection: "rename_index_test"
      closeDynamicField: false
      consistencyLevel: Eventually
      shardNum: 1


source:
  es:
    urls:
      - http://localhost:9200
    username: xxx
    password: xxx


target:
  mode: remote
  remote:
    outputDir: outputPath/migration/test1
    cloud: aws
    region: us-west-2
    bucket: xxx
    useIAM: true
    checkBucket: false
  milvus2x:
    endpoint: {yourMilvusAddress}:{port}
    username: ******
    password: ******

有關配置檔案的詳細說明,請參閱 GitHub 上的此頁面

  1. 執行轉移工作

現在您已經配置好migration.yaml 檔案,可以執行以下指令開始執行遷移任務:

./milvus-migration start --config=/{YourConfigFilePath}/migration.yaml

觀察日誌輸出。當您看到類似以下的日誌時,表示轉移成功。

[task/load_base_task.go:94] ["[LoadTasker] Dec Task Processing-------------->"] [Count=0] [fileName=testfiles/output/zwh/migration/test_mul_field4/data_1_1.json] [taskId=442665677354739304][task/load_base_task.go:76] ["[LoadTasker] Progress Task --------------->"] [fileName=testfiles/output/zwh/migration/test_mul_field4/data_1_1.json] [taskId=442665677354739304][dbclient/cus_field_milvus2x.go:86] ["[Milvus2x] begin to ShowCollectionRows"][loader/cus_milvus2x_loader.go:66] ["[Loader] Static: "] [collection=test_mul_field4_rename1] [beforeCount=50000] [afterCount=100000] [increase=50000][loader/cus_milvus2x_loader.go:66] ["[Loader] Static Total"] ["Total Collections"=1] [beforeTotalCount=50000] [afterTotalCount=100000] [totalIncrease=50000][migration/es_starter.go:25] ["[Starter] migration ES to Milvus finish!!!"] [Cost=80.009174459][starter/starter.go:106] ["[Starter] Migration Success!"] [Cost=80.00928425][cleaner/remote_cleaner.go:27] ["[Remote Cleaner] Begin to clean files"] [bucket=a-bucket] [rootPath=testfiles/output/zwh/migration][cmd/start.go:32] ["[Cleaner] clean file success!"]

除了命令行方式,Milvus Migration也支持使用Restful API進行遷移。

要使用Restful API,請使用以下命令啟動API服務器:

./milvus-migration server run -p 8080

一旦服務運行,你就可以通過呼叫 API 來啟動遷移。

curl -XPOST http://localhost:8080/api/v1/start

當遷移完成後,你可以使用Attu(一體化的向量資料庫管理工具)查看成功遷移的總行數,並執行其他與收集相關的操作。

The Attu interface Attu 介面

從 Milvus 1.x 遷移到 Milvus 2.x

  1. 準備 Milvus 1.x 資料

為了幫助您快速體驗遷移過程,我們在 Milvus Migration 的源代碼中放了 10,000 個 Milvus 1.x測試數據記錄。然而,在實際情況下,你必須在開始遷移過程之前,從你的Milvus 1.x實例中導出你自己的meta.json 檔案。

  • 您可以使用以下命令匯出資料。
./milvus-migration export -m "user:password@tcp(adderss)/milvus?charset=utf8mb4&parseTime=True&loc=Local" -o outputDir

確保

  • 用您實際的 MySQL 認證取代占位符。

  • 在執行此匯出之前,停止 Milvus 1.x 伺服器或停止資料寫入。

  • 複製 Milvustables 資料夾和meta.json 檔案到同一個目錄。

注意:如果您在Zilliz Cloud(Milvus 的完全管理服務)上使用 Milvus 2.x,您可以使用 Cloud Console 開始遷移。

  1. 編譯和建立

首先,從 GitHub 下載 Milvus Migration 的原始碼。然後,執行下列指令來編譯。

go get
go build

此步驟將生成一個名為milvus-migration 的可執行檔案。

  1. 配置migration.yaml

準備一個migration.yaml 的設定檔,指定來源、目標和其他相關設定的詳細資訊。以下是一個配置範例:

# Configuration for Milvus 1.x to Milvus 2.x migration


dumper:
  worker:
    limit: 2
    workMode: milvus1x
    reader:
      bufferSize: 1024
    writer:
      bufferSize: 1024
loader:
  worker:
    limit: 16
meta:
  mode: local
  localFile: /outputDir/test/meta.json


source:
  mode: local
  local:
    tablesDir: /db/tables/


target:
  mode: remote
  remote:
    outputDir: "migration/test/xx"
    ak: xxxx
    sk: xxxx
    cloud: aws
    endpoint: 0.0.0.0:9000
    region: ap-southeast-1
    bucket: a-bucket
    useIAM: false
    useSSL: false
    checkBucket: true
  milvus2x:
    endpoint: localhost:19530
    username: xxxxx
    password: xxxxx

有關配置檔案的詳細說明,請參閱 GitHub 上的此頁面

  1. 執行遷移工作

您必須分別執行dumpload 指令才能完成遷移。這些命令會轉換資料並匯入 Milvus 2.x。

注意:我們將簡化這一步驟,使用戶只需使用一個命令即可完成遷移。敬請期待。

Dump 指令

./milvus-migration dump --config=/{YourConfigFilePath}/migration.yaml

Load Command:

./milvus-migration load --config=/{YourConfigFilePath}/migration.yaml

遷移完成後,在 Milvus 2.x 中產生的集合將包含兩個欄位:iddata 。您可以使用多合一向量資料庫管理工具Attu 檢視更多詳細資訊。

從 FAISS 遷移到 Milvus 2.x

  1. 準備 FAISS 資料

要遷移 Elasticsearch 資料,您應該準備好自己的 FAISS 資料。為了幫助您快速體驗遷移過程,我們在 Milvus Migration 的原始碼中放入了一些FAISS 測試資料

  1. 編譯和建立

首先,從 GitHub 下載 Milvus Migration 的原始碼。然後,執行下列指令來編譯它。

go get
go build

此步驟會產生一個名為milvus-migration 的可執行檔案。

  1. 配置migration.yaml

為 FAISS 遷移準備migration.yaml 配置檔案,指定來源、目標和其他相關設定的詳細資訊。以下是一個配置範例:

# Configuration for FAISS to Milvus 2.x migration


dumper:
  worker:
    limit: 2
    workMode: FAISS
    reader:
      bufferSize: 1024
    writer:
      bufferSize: 1024
loader:
  worker:
    limit: 2
source:
  mode: local
  local:
    FAISSFile: ./testfiles/FAISS/FAISS_ivf_flat.index


target:
  create:
    collection:
      name: test1w
      shardsNums: 2
      dim: 256
      metricType: L2
  mode: remote
  remote:
    outputDir: testfiles/output/
    cloud: aws
    endpoint: 0.0.0.0:9000
    region: ap-southeast-1
    bucket: a-bucket
    ak: minioadmin
    sk: minioadmin
    useIAM: false
    useSSL: false
    checkBucket: true
  milvus2x:
    endpoint: localhost:19530
    username: xxxxx
    password: xxxxx

有關配置檔案的詳細說明,請參閱 GitHub 上的此頁面

  1. 執行遷移工作

和 Milvus 1.x 向 Milvus 2.x 遷移一樣,FAISS 遷移也需要執行dumpload 兩個命令。這些命令會轉換資料並匯入 Milvus 2.x。

注意:我們將簡化這一步驟,使用戶只需使用一個命令即可完成遷移。敬請期待。

Dump 指令

./milvus-migration dump --config=/{YourConfigFilePath}/migration.yaml

載入指令:

./milvus-migration load --config=/{YourConfigFilePath}/migration.yaml

您可以使用多合一向量資料庫管理工具Attu 檢視更多細節。

請繼續關注未來的遷移計劃

未來,我們會支援從更多資料來源進行遷移,並新增更多遷移功能,包括

  • 支援從 Redis 遷移到 Milvus。

  • 支援從 MongoDB 遷移到 Milvus。

  • 支援可恢復的遷移。

  • 將 dump 與 load 程序合二為一,簡化遷移指令。

  • 支援從其他主流資料來源遷移至 Milvus。

總結

Milvus 2.3,Milvus 的最新版本,帶來了令人振奮的新功能和性能改進,迎合了日益增長的數據管理需求。將您的資料遷移至 Milvus 2.x 可以釋放這些優點,Milvus 遷移專案讓遷移過程變得簡化且容易。試試看,您一定不會失望。

註:本部落格的資訊是基於截至 2023 年 9 月的 Milvus 和Milvus Migration專案狀態。請查閱官方的Milvus 文件,以獲得最新的資訊和說明。

Like the article? Spread the word

繼續閱讀