Как беспрепятственно перенести данные в Milvus: Исчерпывающее руководство
Milvus - это надежная векторная база данных с открытым исходным кодом для поиска сходства, которая может хранить, обрабатывать и извлекать миллиарды и даже триллионы векторных данных с минимальной задержкой. Она также отличается высокой масштабируемостью, надежностью, облачностью и многофункциональностью. В новом выпуске Milvus появилось еще больше интересных функций и улучшений, включая поддержку GPU для более чем 10-кратного повышения производительности и MMap для увеличения емкости хранилища на одной машине.
По состоянию на сентябрь 2023 года Milvus заработал почти 23 000 звезд на GitHub и имеет десятки тысяч пользователей из разных отраслей с различными потребностями. Он становится еще более популярным по мере распространения технологий генеративного ИИ, таких как ChatGPT. Он является неотъемлемым компонентом различных стеков ИИ, особенно фреймворка дополненной генерации для поиска, который решает проблему галлюцинаций в больших языковых моделях.
Чтобы удовлетворить растущий спрос со стороны новых пользователей, которые хотят перейти на Milvus, и существующих пользователей, которые хотят обновиться до последних версий Milvus, мы разработали Milvus Migration. В этом блоге мы рассмотрим возможности Milvus Migration и расскажем, как быстро перенести данные в Milvus из Milvus 1.x, FAISS, Elasticsearch 7.0 и последующих версий.
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 получение данных происходит по-другому. Данные не берутся из файлов, а последовательно извлекаются с помощью API прокрутки Elasticsearch. Затем данные разбираются и преобразуются в формат хранения Milvus 2.x, после чего они записываются с помощью bulkInsert
. Помимо переноса векторов типа dense_vector
, хранящихся в Elasticsearch, Milvus Migration также поддерживает перенос других типов полей, включая long, integer, short, boolean, keyword, text и double.
Набор функций Milvus Migration
Milvus Migration упрощает процесс миграции благодаря широкому набору функций:
Поддерживаемые источники данных:
Milvus 1.x - Milvus 2.x
Elasticsearch 7.0 и последующие версии до Milvus 2.x
FAISS - Milvus 2.x
Несколько режимов взаимодействия:
Интерфейс командной строки (CLI) с использованием фреймворка Cobra
Restful API со встроенным пользовательским интерфейсом Swagger
Интеграция в качестве модуля Go в другие инструменты
Универсальная поддержка форматов файлов:
Локальные файлы
Amazon S3
Служба хранения объектов (OSS)
Облачная платформа Google (GCP)
Гибкая интеграция с Elasticsearch:
Миграция векторов типа
dense_vector
из Elasticsearch.Поддержка миграции других типов полей, таких как long, integer, short, boolean, keyword, text и double
Определения интерфейсов
Milvus Migration предоставляет следующие ключевые интерфейсы:
/start
: : Инициирует задание миграции (эквивалентно комбинации дампа и загрузки, в настоящее время поддерживает только миграцию ES)./dump
: : Инициирует задание дампа (записывает исходные данные на целевой носитель)./load
: : Инициирует задание загрузки (записывает данные с целевого носителя в Milvus 2.x)./get_job
: Позволяет пользователям просматривать результаты выполнения задания. (Для получения более подробной информации обратитесь к файлу server.go проекта).
Далее давайте на примере данных рассмотрим, как использовать Milvus Migration в этом разделе. Вы можете найти эти примеры здесь, на GitHub.
Миграция с Elasticsearch на Milvus 2.x
- Подготовка данных Elasticsearch
Чтобы перенести данные Elasticsearch, вы должны уже настроить свой собственный сервер Elasticsearch. Вы должны хранить векторные данные в поле dense_vector
и индексировать их с другими полями. Сопоставление индексов показано ниже.
- Компиляция и сборка
Сначала загрузите исходный код Milvus Migration с GitHub. Затем выполните следующие команды для его компиляции.
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
Чтобы помочь вам быстро освоить процесс миграции, мы поместили 10 000 тестовых записей данных Milvus 1.x в исходный код Milvus Migration. Однако в реальных случаях перед началом процесса миграции необходимо экспортировать собственный файл meta.json
из экземпляра Milvus 1.x.
- Экспортировать данные можно с помощью следующей команды.
./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
в ту же директорию.
Примечание: Если вы используете Milvus 2.x на Zilliz Cloud (полностью управляемый сервис Milvus), вы можете начать миграцию с помощью Cloud Console.
- Компиляция и сборка
Сначала загрузите исходный код Milvus Migration с GitHub. Затем выполните следующие команды для его компиляции.
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.
Примечание: В ближайшее время мы упростим этот шаг и дадим пользователям возможность завершить миграцию с помощью всего одной команды. Следите за новостями.
Команда дампа:
./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. Чтобы помочь вам быстро освоить процесс миграции, мы поместили некоторые тестовые данные FAISS в исходный код Milvus Migration.
- Компиляция и сборка
Сначала загрузите исходный код Milvus Migration с GitHub. Затем выполните следующие команды для его компиляции.
go get
go build
В результате будет создан исполняемый файл с именем milvus-migration
.
- Настройте
migration.yaml
Подготовьте конфигурационный файл migration.yaml
для миграции FAISS, указав в нем сведения об источнике, цели и другие необходимые параметры. Здесь приведен пример конфигурации:
# 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.
Примечание: В ближайшее время мы упростим этот шаг и дадим пользователям возможность завершить миграцию с помощью одной команды. Следите за новостями.
Команда дампа:
./milvus-migration dump --config=/{YourConfigFilePath}/migration.yaml
Команда загрузки:
./milvus-migration load --config=/{YourConfigFilePath}/migration.yaml
Вы можете просмотреть более подробную информацию с помощью Attu, универсального инструмента администрирования векторных баз данных.
Следите за будущими планами по миграции
В будущем мы будем поддерживать миграцию из большего количества источников данных и добавим больше функций миграции, в том числе:
Поддержка миграции с Redis на Milvus.
Поддержка миграции с MongoDB на Milvus.
Поддержка возобновляемой миграции.
Упрощение команд миграции за счет объединения процессов дампа и загрузки в один.
Поддержка миграции с других основных источников данных на Milvus.
Заключение
Milvus 2.3, последний выпуск Milvus, предлагает новые интересные функции и улучшения производительности, которые отвечают растущим потребностям управления данными. Перенос ваших данных на Milvus 2.x может раскрыть эти преимущества, а проект Milvus Migration делает процесс миграции простым и удобным. Попробуйте, и вы не будете разочарованы.
Примечание: Информация в этом блоге основана на состоянии проектов Milvus и Milvus Migration по состоянию на сентябрь 2023 года. Самую свежую информацию и инструкции можно найти в официальной документации 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