🚀 Попробуйте Zilliz Cloud, полностью управляемый Milvus, бесплатно — ощутите 10-кратное увеличение производительности! Попробовать сейчас>

milvus-logo
LFAI
  • Home
  • Blog
  • Как беспрепятственно перенести данные в Milvus: Исчерпывающее руководство

Как беспрепятственно перенести данные в Milvus: Исчерпывающее руководство

  • Engineering
December 01, 2023
Wenhui Zhang

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

  1. Подготовка данных Elasticsearch

Чтобы перенести данные Elasticsearch, вы должны уже настроить свой собственный сервер Elasticsearch. Вы должны хранить векторные данные в поле dense_vector и индексировать их с другими полями. Сопоставление индексов показано ниже.

  1. Компиляция и сборка

Сначала загрузите исходный код Milvus Migration с GitHub. Затем выполните следующие команды для его компиляции.

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

Чтобы помочь вам быстро освоить процесс миграции, мы поместили 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.

  1. Компиляция и сборка

Сначала загрузите исходный код Milvus Migration с GitHub. Затем выполните следующие команды для его компиляции.

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. Выполнение задания миграции

Для завершения миграции необходимо отдельно выполнить команды 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

  1. Подготовьте данные FAISS

Для миграции данных Elasticsearch вам необходимо подготовить собственные данные FAISS. Чтобы помочь вам быстро освоить процесс миграции, мы поместили некоторые тестовые данные FAISS в исходный код Milvus Migration.

  1. Компиляция и сборка

Сначала загрузите исходный код Milvus Migration с GitHub. Затем выполните следующие команды для его компиляции.

go get
go build

В результате будет создан исполняемый файл с именем milvus-migration.

  1. Настройте 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.

  1. Выполнение задания миграции

Как и миграция с 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.

Like the article? Spread the word

Продолжить чтение