• Milvusについて
  • はじめに
  • 概念
  • ユーザーガイド
  • データのインポート
  • AIツール
  • 管理ガイド
  • ツール
  • 連携機能
  • チュートリアル
  • よくある質問
  • API Reference

スナップショットの活用例Compatible with Milvus 3.0.x

このガイドでは、スナップショットの一般的な利用例について解説します。

データのバックアップと復元

スナップショットは、データの特定の時点の状態を素早く取得したイメージであり、迅速なロールバックやテスト(数日から数週間)に適しています。一方、バックアップは独立した完全なコピーであり、長期的な災害復旧(数週間から数年)や、ストレージ全体の障害に対するより確実な保護を目的として、別途保存されます。

以下の表は、スナップショットとバックアップを比較したものです。

バックアップ

スナップショット

バックアップの作成

すべてのデータファイルをコピーする(時間がかかる)

メタデータのみを作成(数ミリ秒)

復元

データをインポートし、インデックスを再構築します

既存のデータファイルとインデックスファイルのみをコピーします

パフォーマンス

処理が遅く、リソースを大量に消費する

高速で軽量(数秒~数分)

システムへの影響

I/OおよびCPU使用率が高い

影響は最小限

スナップショットの作成には通常ミリ秒単位の時間がかかり、復元にはデータ量に応じて数秒から数分かかります。

スナップショットの制限、制約、およびシステムへの影響の詳細については、「スナップショット」を参照してください。

外部コレクションを使用したデータ処理

スナップショットは、分析や検証ワークロード向けに、特定の時点における安定したデータソースを提供できます。Milvusのスナップショットについては、スナップショットファイルを汎用的なSpark入力として直接読み込むのではなく、milvus-table という外部コレクション形式を使用してください。 Milvusスナップショットには、コレクションのメタデータ、セグメントマニフェスト、削除ログ、および主キーの統計情報が格納されているため、Milvusでは正しいスキーマと削除のセマンティクスを維持するために、スナップショットのメタデータJSONとmilvus-table リーダーが必要です。

このワークフローは、スナップショットデータに対してクエリ可能な外部コレクションを作成します。メインカラムのデータは引き続きスナップショットソースから参照され、リフレッシュ処理によってソースの StorageV3 マニフェストがターゲットの外部セグメントにマッピングされます。

ステップ 1: スナップショットのメタデータパスを取得する

通常の Milvus コレクションからスナップショットを作成するか選択し、そのスナップショットを記述してオブジェクトストレージ上の場所を取得します。

from pymilvus import DataType, MilvusClient

client = MilvusClient(
    uri="http://localhost:19530",
    token="root:Milvus"
)

snapshot_info = client.describe_snapshot(
    snapshot_name="analytics_snapshot_20260321",
    collection_name="my_collection",
    include_collection_info=True
)

external_source = f"s3://bucket/{snapshot_info.s3_location}"

ステップ 2: `milvus-table ` 外部コレクションの作成とリフレッシュ

スナップショットソースコレクションとスキーマが一致する外部コレクションを作成します。「external_spec.format 」を「"milvus-table" 」に設定し、各ターゲットデータフィールドの「external_field 」を対応するソースフィールド名に設定します。

schema = client.create_schema(
    external_source=external_source,
    external_spec="""{
        "format": "milvus-table",
        "extfs": {
            "cloud_provider": "aws",
            "region": "us-west-2",
            "access_key_id": "YOUR_ACCESS_KEY",
            "access_key_value": "YOUR_SECRET_KEY"
        }
    }""",
)

schema.add_field(
    field_name="id",
    datatype=DataType.INT64,
    is_primary=True,
    external_field="id",
)
schema.add_field(
    field_name="embedding",
    datatype=DataType.FLOAT_VECTOR,
    dim=768,
    external_field="embedding",
)

client.create_collection(
    collection_name="snapshot_external_collection",
    schema=schema,
)

job_id = client.refresh_external_collection(
    collection_name="snapshot_external_collection"
)

更新が完了したら、インデックスを作成し、外部コレクションにデータをロードして、スナップショットをバックエンドとするビューに対して検索やクエリ操作を実行できます。