ストレージ最適化ベクトル検索

ベクトル検索のストレージ最適化パフォーマンス ティアは、大規模なデータセットのインデックス登録と検索用に設計されています。この階層では、RAM ではなくディスクベースのアーキテクチャが実装されているため、運用コストが大幅に削減されます。クエリ レイテンシを最小限に抑えることよりも、大規模な費用対効果を重視する場合は、ストレージ最適化ティアが最適です。

ストレージ最適化インデックスを使用する場合

次のいずれかに該当する場合は、ストレージ最適化インデックスを検討してください。

  • 非常に大きなデータセット: 非常に多くのベクトルをインデックス登録する必要があり、パフォーマンスが最適化された多数のシャードをホストするコストが非常に高くなります。

  • QPS の低いワークロード: クエリ量の少ないアプリケーションでは、シャード数を減らすことで大幅なコスト削減を実現できます。

  • 柔軟なレイテンシ要件: アプリケーションで、検索結果を取得するのにかかる時間であるクエリ レイテンシのわずかな増加を許容できます。

パフォーマンスのトレードオフ

デフォルトのパフォーマンス最適化インデックスと比較して、ストレージ最適化インデックスには次の特性があります。

  • クエリのレイテンシの増加: 特定の再現率レベルでクエリのレイテンシが若干高くなります。

ストレージ最適化インデックスを構成する方法

ストレージ最適化されたインデックスを作成するには、インデックス構成で shardSize パラメータを SHARD_SIZE_SO_DYNAMIC に設定します。

例: ストレージ最適化インデックスを作成する

次の例は、新しいストレージ最適化ストリーミング インデックスの作成に必要な JSON を示しています。

{
  "displayName": "my-storage-optimized-index",
  "description": "An index configured to prioritize storage over performance.",
  "metadata": {
    "contentsDeltaUri": "gs://your-bucket/source-data/",
    "config": {
      "dimensions": 100,
      "approximateNeighborsCount": 150,
      "distanceMeasureType": "DOT_PRODUCT_DISTANCE",
      "shardSize": "SHARD_SIZE_SO_DYNAMIC"
    }
  },
  "indexUpdateMethod": "STREAM_UPDATE"
}

この例では、shardSizeSHARD_SIZE_SO_DYNAMIC に設定されています。これにより、ベクトル検索はより密度の高いインデックスを構築します。これにより、各シャードで保持できるデータポイントの数が大幅に増え、データセットに必要なシャードの総数が削減されます。dimensionsdistanceMeasureType などの他のフィールドは、必要に応じて構成します。

エンドポイント

ストレージ最適化デプロイは、既存のエンドポイントで使用できます。

インデックスのデプロイ

次の例は、作成したエンドポイントにストレージ最適化インデックスをデプロイするために必要な JSON を示しています。

{
  "deployedIndex": {
    "id": "PROJECT_UNIQUE_ID_NAME",
    "index": "projects/PROJECT_ID/locations/LOCATION/indexes/INDEX_ID",
    "displayName": "INDEX_DISPLAY_NAME",
    "deploymentTier": "STORAGE"
  }
}

deploymentTierSTORAGE に設定すると、指定された displayName を使用してストレージ最適化インデックスがエンドポイントにデプロイされます。ベクトル検索では、最適なパフォーマンスを得るために適切なマシンタイプが動的に選択されます。

次のステップ