Búsqueda vectorial optimizada para el almacenamiento

El nivel de rendimiento optimizado para el almacenamiento de la búsqueda de vectores se ha 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 los costes operativos. Si tu prioridad es la rentabilidad a gran escala en lugar de la latencia de consulta más baja posible, el nivel optimizado para almacenamiento es la mejor opción.

Cuándo usar un índice optimizado para el almacenamiento

Considera usar índices optimizados para el almacenamiento si tienes alguno de los siguientes elementos:

  • Un conjunto de datos muy grande: debes indexar un número muy elevado de vectores y el coste de alojar un gran número de particiones optimizadas para el rendimiento es prohibitivo.

  • Carga de trabajo con un QPS bajo: en aplicaciones con un volumen de consultas bajo, el ahorro de costes que supone usar menos particiones puede ser significativo.

  • Requisitos de latencia flexibles: tu aplicación puede tolerar un pequeño aumento de la latencia de las consultas, que es el tiempo que se tarda en obtener un resultado de 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 consultas: las consultas tienen una latencia ligeramente superior en un nivel de recuerdo determinado.

Cómo configurar un índice optimizado para el almacenamiento

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

Ejemplo: Crear un índice optimizado para el almacenamiento

En el siguiente ejemplo se muestra el JSON necesario para crear un índice de streaming 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 ha definido como SHARD_SIZE_SO_DYNAMIC, lo que indica a Vector Search que cree un índice más denso. De esta forma, cada partición puede contener muchos más puntos de datos, lo que reduce el número total de particiones necesarias para tu conjunto de datos. Otros campos, como dimensions y distanceMeasureType, se configuran según tus necesidades.

Endpoints

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

Desplegar un índice

En el siguiente ejemplo se muestra el JSON necesario para implementar un índice optimizado para el almacenamiento en un endpoint que hayas creado.

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

Si asigna el valor STORAGE a deploymentTier, se implementa el índice optimizado para el almacenamiento con el valor displayName especificado en un endpoint. Búsqueda vectorial elige dinámicamente el tipo de máquina adecuado para obtener el mejor rendimiento.

Siguientes pasos