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

milvus-logo
LFAI
  • Home
  • Blog
  • Представляем инструмент для миграции данных Milvus

Представляем инструмент для миграции данных Milvus

  • Engineering
March 15, 2021
Zilliz

Важное замечание: инструмент Mivus Data Migration Tool был устаревшим. Для миграции данных из других баз данных в Milvus мы рекомендуем вам использовать более продвинутый инструмент Milvus-migration Tool.

В настоящее время инструмент Milvus-migration поддерживает:

  • Elasticsearch в Milvus 2.x
  • Faiss в Milvus 2.x
  • Milvus 1.x - Milvus 2.x
  • Milvus 2.3.x на Milvus 2.3.x или выше.

Мы будем поддерживать миграцию с других источников векторных данных, таких как Pinecone, Chroma и Qdrant. Следите за новостями.

Для получения дополнительной информации смотрите документацию по Milvus-migration или ее репозиторий на GitHub.

--------------------------------- Mivus Data Migration Tool был устаревшим ----------------------

Обзор

MilvusDM (Milvus Data Migration) - это инструмент с открытым исходным кодом, разработанный специально для импорта и экспорта файлов данных с помощью Milvus. MilvusDM может значительно повысить эффективность управления данными и снизить затраты на DevOps следующими способами:

  • Faiss в Milvus: Импорт распакованных данных из Faiss в Milvus.

  • HDF5 в Milvus: импорт файлов HDF5 в Milvus.

  • Milvus to Milvus: перенос данных из исходного Milvus в другой целевой Milvus.

  • Milvus to HDF5: сохранение данных в Milvus в виде файлов HDF5.

milvusdm blog 1.png блог milvusdm 1.png

MilvusDM размещен на Github и может быть легко установлен путем запуска командной строки pip3 install pymilvusdm. MilvusDM позволяет переносить данные в определенную коллекцию или раздел. В следующих разделах мы расскажем, как использовать каждый тип миграции данных.


Faiss в Milvus

Шаги

1.Загрузите файл F2M.yaml:

$ wget https://raw.githubusercontent.com/milvus-io/milvus-tools/main/yamls/F2

2.Установите следующие параметры:

  • data_path: : Путь к данным (векторы и соответствующие им идентификаторы) в Faiss.

  • dest_host: : Адрес сервера Milvus.

  • dest_port: Порт сервера Milvus.

  • mode: Данные можно импортировать в Milvus, используя следующие режимы:

    • Пропустить: игнорировать данные, если коллекция или раздел уже существуют.

    • Append (Добавить): Добавить данные, если коллекция или раздел уже существуют.

    • Перезаписать: Удалить данные перед вставкой, если коллекция или раздел уже существуют.

  • dest_collection_name: Имя принимающей коллекции для импорта данных.

  • dest_partition_name: Имя принимающего раздела для импорта данных.

  • collection_parameter: Специфическая для коллекции информация, такая как размер вектора, размер индексного файла и метрика расстояния.

F2M:
  milvus_version: 1.0.0
  data_path: '/home/data/faiss.index'
  dest_host: '127.0.0.1'
  dest_port: 19530
  mode: 'append'        # 'skip/append/overwrite'
  dest_collection_name: 'test'
  dest_partition_name: ''
  collection_parameter:
    dimension: 256
    index_file_size: 1024
    metric_type: 'L2'

3.Запустите файл F2M.yaml:

$ milvusdm --yaml F2M.yaml

Код примера

1.Считать файлы Faiss для получения векторов и соответствующих им идентификаторов.

ids, vectors = faiss_data.read_faiss_data()

2.Вставить полученные данные в Milvus:

insert_milvus.insert_data(vectors, self.dest_collection_name, self.collection_parameter, self.mode, ids, self.dest_partition_name)


HDF5 в Milvus

Шаги

1.Загрузите файл H2M.yaml.

$ wget https://raw.githubusercontent.com/milvus-io/milvus-tools/main/yamls/H2M.yaml

2.Установите следующие параметры:

  • data_path: Путь к файлам HDF5.

  • data_dir: Каталог, содержащий файлы HDF5.

  • dest_host: Адрес сервера Milvus.

  • dest_port: Порт сервера Milvus.

  • mode: Данные можно импортировать в Milvus, используя следующие режимы:

    • Пропустить: игнорировать данные, если коллекция или раздел уже существуют.

    • Append (Добавить): Добавить данные, если коллекция или раздел уже существуют.

    • Перезаписать: Удалить данные перед вставкой, если коллекция или раздел уже существуют.

  • dest_collection_name: Имя принимающей коллекции для импорта данных.

  • dest_partition_name: Имя принимающего раздела для импорта данных.

  • collection_parameter: Информация о конкретной коллекции, например размер вектора, размер индексного файла и метрика расстояния.

Установите либо data_path, либо data_dir. Не задавайте оба варианта. Используйте data_path, чтобы указать несколько путей к файлам, или data_dir, чтобы указать каталог, в котором находится файл данных.

H2M:
  milvus-version: 1.0.0
  data_path:
    - /Users/zilliz/float_1.h5
    - /Users/zilliz/float_2.h5
  data_dir:
  dest_host: '127.0.0.1'
  dest_port: 19530
  mode: 'overwrite'        # 'skip/append/overwrite'
  dest_collection_name: 'test_float'
  dest_partition_name: 'partition_1'
  collection_parameter:
    dimension: 128
    index_file_size: 1024
    metric_type: 'L2'

3.Запустите H2M.yaml:

$ milvusdm --yaml H2M.yaml

Код примера

1.Прочитайте файлы HDF5, чтобы получить векторы и соответствующие им идентификаторы:

vectors, ids = self.file.read_hdf5_data()

2.Вставьте полученные данные в Milvus:

ids = insert_milvus.insert_data(vectors, self.c_name, self.c_param, self.mode, ids,self.p_name)


Milvus to Milvus

Шаги

1.Загрузите файл M2M.yaml.

$ wget https://raw.githubusercontent.com/milvus-io/milvus-tools/main/yamls/M2M.yaml

2.Установите следующие параметры:

  • source_milvus_path: Исходный рабочий путь Milvus.

  • mysql_parameter: Настройки исходного Milvus MySQL. Если MySQL не используется, задайте параметр mysql_parameter равным ''.

  • source_collection: Имена коллекции и ее разделов в исходном Milvus.

  • dest_host: Адрес сервера Milvus.

  • dest_port: : Порт сервера Milvus.

  • mode: Данные можно импортировать в Milvus, используя следующие режимы:

    • Пропустить: игнорировать данные, если коллекция или раздел уже существуют.

    • Append (Добавить): Добавить данные, если коллекция или раздел уже существуют.

    • Перезаписать: Удалить данные перед вставкой, если коллекция или раздел уже существуют.

M2M:
  milvus_version: 1.0.0
  source_milvus_path: '/home/user/milvus'
  mysql_parameter:
    host: '127.0.0.1'
    user: 'root'
    port: 3306
    password: '123456'
    database: 'milvus'
  source_collection:
    test:
      - 'partition_1'
      - 'partition_2'
  dest_host: '127.0.0.1'
  dest_port: 19530
  mode: 'skip' # 'skip/append/overwrite'

3.Запустите файл M2M.yaml.

$ milvusdm --yaml M2M.yaml

Пример кода

1.В соответствии с указанными метаданными коллекции или раздела, прочитайте файлы в папке milvus/db на локальном диске, чтобы получить векторы и соответствующие им идентификаторы из исходного Milvus.

collection_parameter, _ = milvus_meta.get_collection_info(collection_name)
r_vectors, r_ids, r_rows = milvusdb.read_milvus_file(self.milvus_meta, collection_name, partition_tag)

2.Вставьте полученные данные в целевой Milvus.

milvus_insert.insert_data(r_vectors, collection_name, collection_parameter, self.mode, r_ids, partition_tag)


Преобразование Milvus в HDF5

Шаги

1.Загрузите файл M2H.yaml:

$ wget https://raw.githubusercontent.com/milvus-io/milvus-tools/main/yamls/M2H.yaml

2.Установите следующие параметры:

  • source_milvus_path: Исходный рабочий путь Milvus.

  • mysql_parameter: Настройки исходного Milvus MySQL. Если MySQL не используется, задайте параметр mysql_parameter равным ''.

  • source_collection: Имена коллекции и ее разделов в исходном Milvus.

  • data_dir: Каталог для хранения сохраненных HDF5-файлов.

M2H:
  milvus_version: 1.0.0
  source_milvus_path: '/home/user/milvus'
  mysql_parameter:
    host: '127.0.0.1'
    user: 'root'
    port: 3306
    password: '123456'
    database: 'milvus'
  source_collection: # specify the 'partition_1' and 'partition_2' partitions of the 'test' collection.
    test:
      - 'partition_1'
      - 'partition_2'
  data_dir: '/home/user/data'

3.Запустите M2H.yaml:

$ milvusdm --yaml M2H.yaml

Пример кода

1.В соответствии с указанными метаданными коллекции или раздела, прочитайте файлы в каталоге milvus/db на локальном диске, чтобы получить векторы и соответствующие им идентификаторы.

collection_parameter, version = milvus_meta.get_collection_info(collection_name)
r_vectors, r_ids, r_rows = milvusdb.read_milvus_file(self.milvus_meta, collection_name, partition_tag)

2.Сохраните полученные данные в виде файлов HDF5.

data_save.save_yaml(collection_name, partition_tag, collection_parameter, version, save_hdf5_name)

Структура файлов MilvusDM

Приведенная ниже блок-схема показывает, как MilvusDM выполняет различные задачи в зависимости от полученного YAML-файла:

milvusdm blog 2.png milvusdm blog 2.png

Структура файла MilvusDM:

  • pymilvusdm

    • ядро

      • milvus_client.py: Выполняет клиентские операции в Milvus.

      • read_data.py: Читает файлы данных в формате HDF5 на вашем локальном диске. (Добавьте сюда свой код для поддержки чтения файлов данных в других форматах).

      • read_faiss_data.py: Читает файлы данных в Faiss.

      • read_milvus_data.py: Читает файлы данных в формате Milvus.

      • read_milvus_meta.py: Читает метаданные в Milvus.

      • data_to_milvus.py: Создает коллекции или разделы на основе параметров в YAML-файлах и импортирует векторы и соответствующие векторные идентификаторы в Milvus.

      • save_data.py: Сохраняет данные в виде файлов HDF5.

      • write_logs.py: Записывает журналы во время выполнения программы.

    • faiss_to_milvus.py: Импортирует данные из Faiss в Milvus.

    • hdf5_to_milvus.py: Импортирует данные в файлах HDF5 в Milvus.

    • milvus_to_milvus.py: Переносит данные из исходного Milvus в целевой Milvus.

    • milvus_to_hdf5.py: Экспортирует данные в Milvus и сохраняет их в виде файлов HDF5.

    • main.py: Выполняет соответствующие задачи в соответствии с полученным YAML-файлом.

    • setting.py: Конфигурации, связанные с запуском кода MilvusDM.

  • setup.py: Создает пакеты файлов pymilvusdm и загружает их в PyPI (Python Package Index).


Обзор

MilvusDM в первую очередь занимается миграцией данных в Milvus и из него, включая Faiss в Milvus, HDF5 в Milvus, Milvus в Milvus и Milvus в HDF5.

В ближайших выпусках запланированы следующие функции:

  • Импорт бинарных данных из Faiss в Milvus.

  • Блок-лист и список разрешений для миграции данных между исходным Milvus и целевым Milvus.

  • Слияние и импорт данных из нескольких коллекций или разделов в исходном Milvus в новую коллекцию в целевом Milvus.

  • Резервное копирование и восстановление данных Milvus.

Проект MilvusDM является проектом с открытым исходным кодом на Github. Любой вклад в проект приветствуется. Дайте ему звезду 🌟, и не стесняйтесь подать проблему или представить свой собственный код!

    Try Managed Milvus for Free

    Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.

    Get Started

    Like the article? Spread the word

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