Búsqueda de vectores optimizada para el almacenamiento

El nivel de rendimiento optimizado para el almacenamiento de la Búsqueda de vectores está diseñado para indexar y buscar conjuntos de datos masivos. Este nivel implementa una arquitectura basada en disco en lugar de usar RAM, lo que reduce significativamente tus costos operativos. Cuando tu prioridad es la rentabilidad a gran escala en lugar de la latencia de consulta más baja posible, el nivel optimizado para el almacenamiento es tu mejor opción.

Cuándo usar un índice optimizado para el almacenamiento

Considera usar índices optimizados para el almacenamiento si tienes alguna de las siguientes características:

  • Un conjunto de datos muy grande: Debes indexar una gran cantidad de vectores, y el costo de alojar una gran cantidad de fragmentos optimizados para el rendimiento es prohibitivo.

  • Una carga de trabajo con un QPS bajo: En las aplicaciones con un volumen de consultas bajo, el ahorro de costos que se obtiene al usar menos fragmentos puede ser significativo.

  • Requisitos de latencia flexibles: Tu aplicación puede tolerar un aumento menor en la latencia de las búsquedas, que es el tiempo que se tarda en obtener un resultado de la búsqueda.

Compensaciones de rendimiento

En comparación con el índice predeterminado optimizado para el rendimiento, un índice optimizado para el almacenamiento tiene las siguientes características:

  • Mayor latencia de las búsquedas: Las búsquedas tienen una latencia ligeramente mayor en un nivel de recuperación determinado.

Cómo configurar un índice optimizado para el almacenamiento

Para crear un índice optimizado para el almacenamiento, establece el parámetro shardSize en SHARD_SIZE_SO_DYNAMIC en la configuración del índice.

Ejemplo: Cómo crear un índice optimizado para el almacenamiento

En el siguiente ejemplo, se muestra el código JSON necesario para crear un nuevo índice de transmisión optimizado para el almacenamiento.

{
  "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"
}

En el ejemplo, shardSize se establece en SHARD_SIZE_SO_DYNAMIC, lo que indica a Vector Search que cree un índice más denso. Esto permite que cada fragmento contenga muchos más puntos de datos, lo que reduce la cantidad total de fragmentos necesarios para tu conjunto de datos. Otros campos, como dimensions y distanceMeasureType, se configuran según tus necesidades.

Extremos

Las implementaciones optimizadas para el almacenamiento se pueden usar con cualquier endpoint existente.

Implementa un índice

En el siguiente ejemplo, se muestra el código JSON necesario para implementar un índice optimizado para el almacenamiento en un extremo que creaste.

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

Si se configura deploymentTier como STORAGE, se implementa el índice optimizado para el almacenamiento con el displayName especificado en un extremo.

También puedes especificar el recuento mínimo de replicantes (minReplicaCount) y el recuento máximo de replicantes (minReplicaCount) para controlar la cantidad de réplicas de máquinas en las que se realizará la implementación. No se admite la configuración del tipo de máquina (machineType).

Próximos pasos