2025, Dec 19 21:01

Восстановление данных коллекции Milvus в Docker после пересоздания

Удалили коллекцию Milvus и создали заново? Объясняем, почему данные не видны в UI/SDK и как восстановить их в Docker через batch_import и milvus-backup.

Запуск standalone-версии Milvus в Docker — распространённая практика: вы монтируете том хоста, Milvus записывает в него векторы и логи, и данные переживают перезапуски контейнера. Сложности возникают, когда коллекцию удаляют, а затем создают снова с тем же именем. В UI и SDK коллекция пустая, но том по‑прежнему занимает гигабайты. Как вернуть данные?

Воспроизводим ситуацию

На деле «пересоздать коллекцию» обычно означает удалить её и создать заново с тем же идентификатором. В SDK Milvus нет отдельной команды recreate_collection.

# демонстрационные действия, имитирующие последовательность «пересоздания»
svc.drop_collection("my_vectors")
svc.create_collection("my_vectors", same_schema)

Том Docker сохраняет персистентные артефакты. Типичная структура может выглядеть так:

volumes
  milvus
    data
    |  delta_log
    |  index_files
    |  insert_log
    |  mmap
    |    mmap_chink_manager
    |  stats_log
    etcd
    rdb_data
    rdb_data_meta_kv

Что на самом деле происходит и почему коллекция выглядит пустой

В SDK Milvus нет команды recreate_collection. Если вы удалили коллекцию и создали новую с тем же именем и схемой, прямого способа восстановить данные не существует. Метаданные новой коллекции больше не указывают на прежние артефакты на диске, даже если в томе всё ещё лежат файлы в каталоге data/ (insert_log, delta_log, index_files и т. п.). Поэтому коллекция кажется пустой, хотя место на диске занято.

Как действовать на практике

Раз в томе сохранились исходные данные, рекомендуемый путь — ручной batch_import. В качестве ориентира используйте скрипты восстановления из проекта milvus-backup: https://github.com/zilliztech/milvus-backup. Смысл в том, чтобы загрузить сохранённое содержимое в новую коллекцию, а не пытаться «прикрепить» файлы обратно к метаданным.

Набросок вызова batch_import

Конкретные шаги зависят от вашей среды и того, какие части скриптов восстановления вы выберете. Концептуально поток выглядит так:

# пути к сохранённым источникам, из которых вы собираетесь восстанавливаться
source_dirs = [
    "/path/to/your/volume/..."
]

# концептуально запустить массовую загрузку по подходу скриптов восстановления
batch_import(source_dirs)

Ориентируйтесь на репозиторий выше, чтобы понять, какие входные данные валидны и как выполнять восстановление. Он создан для сценариев бэкапа и рестора и подходит для ручного batch_import.

Почему это важно

Удаление и повторное создание коллекции разрывает связь между метаданными и сохранёнными файлами. Считать, что повторное использование того же имени сохранит данные, рискованно: артефакты на диске остаются, но система их не индексирует и не показывает автоматически. Осознание того, что нет прямого пути восстановления, помогает избежать бесполезных попыток «прикрутить» файлы и сразу перейти к поддерживаемому способу восстановления.

Выводы

Если вы удалили, а затем создали коллекцию Milvus с тем же именем и схемой, прямого способа вернуть данные нет. Том Docker может по‑прежнему содержать исходные файлы, но они не появятся в новой коллекции сами по себе. Чтобы восстановить данные, используйте ручной batch_import и следуйте скриптам восстановления из проекта milvus-backup. Планируйте такие разрушительные операции заранее и рассматривайте резервное копирование и восстановление как часть повседневной операционной практики.