如何無縫遷移您的資料到 Milvus:全面指南
Milvus是一個強大的開放原始碼向量資料庫,用於相似性搜尋,能夠以最小的延遲儲存、處理和擷取數十億甚至數萬億的向量資料。它也是高度可擴充、可靠、雲原生且功能豐富的資料庫。Milvus 的最新版本引入了更多令人振奮的功能和改進,包括GPU 支援,可將效能提升 10 倍以上,以及 MMap,可在單一機器上提供更大的儲存容量。
截至 2023 年 9 月,Milvus 已在 GitHub 上贏得近 23,000 顆星星,並擁有來自各行各業、需求各異的數萬名使用者。隨著ChatGPT等 Generative AI 技術的普及,它也變得更加流行。它是各種 AI 堆疊的重要組成部分,尤其是檢索擴增生成框架,可解決大型語言模型的幻覺問題。
為了滿足希望遷移到 Milvus 的新用戶和希望升級到最新 Milvus 版本的現有用戶日益增長的需求,我們開發了Milvus Migration。在這篇部落格中,我們將探討 Milvus Migration 的功能,並引導您快速地將資料從 Milvus 1.x、FAISS 和Elasticsearch 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
- 準備 Elasticsearch 資料
要遷移 Elasticsearch資料,您應該已經設定好自己的 Elasticsearch 伺服器。您應該在dense_vector
欄位中儲存向量資料,並將它們與其他欄位建立索引。索引對應如下所示。
- 編譯與建立
首先,從 GitHub 下載 Milvus Migration 的原始碼。然後,執行下列指令來編譯。
go get
go build
此步驟會產生一個名為milvus-migration
的可執行檔案。
- 設定
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 上的此頁面。
- 執行轉移工作
現在您已經配置好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(一體化的向量資料庫管理工具)查看成功遷移的總行數,並執行其他與收集相關的操作。
Attu 介面
從 Milvus 1.x 遷移到 Milvus 2.x
- 準備 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 伺服器或停止資料寫入。
複製 Milvus
tables
資料夾和meta.json
檔案到同一個目錄。
注意:如果您在Zilliz Cloud(Milvus 的完全管理服務)上使用 Milvus 2.x,您可以使用 Cloud Console 開始遷移。
- 編譯和建立
首先,從 GitHub 下載 Milvus Migration 的原始碼。然後,執行下列指令來編譯。
go get
go build
此步驟將生成一個名為milvus-migration
的可執行檔案。
- 配置
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 上的此頁面。
- 執行遷移工作
您必須分別執行dump
和load
指令才能完成遷移。這些命令會轉換資料並匯入 Milvus 2.x。
注意:我們將簡化這一步驟,使用戶只需使用一個命令即可完成遷移。敬請期待。
Dump 指令
./milvus-migration dump --config=/{YourConfigFilePath}/migration.yaml
Load Command:
./milvus-migration load --config=/{YourConfigFilePath}/migration.yaml
遷移完成後,在 Milvus 2.x 中產生的集合將包含兩個欄位:id
和data
。您可以使用多合一向量資料庫管理工具Attu 檢視更多詳細資訊。
從 FAISS 遷移到 Milvus 2.x
- 準備 FAISS 資料
要遷移 Elasticsearch 資料,您應該準備好自己的 FAISS 資料。為了幫助您快速體驗遷移過程,我們在 Milvus Migration 的原始碼中放入了一些FAISS 測試資料。
- 編譯和建立
首先,從 GitHub 下載 Milvus Migration 的原始碼。然後,執行下列指令來編譯它。
go get
go build
此步驟會產生一個名為milvus-migration
的可執行檔案。
- 配置
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 上的此頁面。
- 執行遷移工作
和 Milvus 1.x 向 Milvus 2.x 遷移一樣,FAISS 遷移也需要執行dump
和load
兩個命令。這些命令會轉換資料並匯入 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 文件,以獲得最新的資訊和說明。
- Milvus Migration,強大的資料遷移工具
- 從 Elasticsearch 遷移到 Milvus 2.x
- 從 Milvus 1.x 遷移到 Milvus 2.x
- 從 FAISS 遷移到 Milvus 2.x
- 請繼續關注未來的遷移計劃
- 總結
On This Page
Try Managed Milvus for Free
Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.
Get StartedLike the article? Spread the word