Pesquisa de vetor otimizada para armazenamento

O nível de desempenho otimizado para armazenamento da Pesquisa vetorial foi projetado para indexar e pesquisar conjuntos de dados enormes. Esse nível implementa uma arquitetura baseada em disco em vez de usar RAM, reduzindo significativamente os custos operacionais. Quando a prioridade é o custo-benefício em grande escala, em vez da menor latência de consulta possível, o nível otimizado para armazenamento é a melhor opção.

Quando usar um índice otimizado para armazenamento

Considere usar índices otimizados para armazenamento se você tiver alguma destas opções:

  • Um conjunto de dados muito grande: você precisa indexar um grande número de vetores, e o custo de hospedagem de um grande número de fragmentos otimizados para desempenho é proibitivo.

  • Uma carga de trabalho de baixa QPS: em aplicativos com baixo volume de consultas, a economia de custos ao usar menos fragmentos pode ser significativa.

  • Requisitos de latência flexíveis: seu aplicativo pode tolerar um pequeno aumento na latência da consulta, que é o tempo necessário para receber um resultado da pesquisa.

Compensações de desempenho

Em comparação com o índice padrão otimizado para performance, um índice otimizado para armazenamento tem as seguintes características:

  • Aumento na latência de consulta: as consultas têm uma latência ligeiramente maior em um determinado nível de recall.

Como configurar um índice otimizado para armazenamento

Para criar um índice otimizado para armazenamento, defina o parâmetro shardSize como SHARD_SIZE_SO_DYNAMIC na configuração do índice.

Exemplo: como criar um índice otimizado para armazenamento

O exemplo a seguir demonstra o JSON necessário para criar um novo índice de streaming otimizado para armazenamento.

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

No exemplo, shardSize é definido como SHARD_SIZE_SO_DYNAMIC, o que instrui a pesquisa vetorial a criar um índice mais denso. Isso permite que cada fragmento contenha muito mais pontos de dados, reduzindo o número total de fragmentos necessários para seu conjunto de dados. Outros campos, como dimensions e distanceMeasureType, são configurados de acordo com suas necessidades.

Endpoints

As implantações otimizadas para armazenamento podem ser usadas com qualquer endpoint atual.

Implantar um índice

O exemplo a seguir demonstra o JSON necessário para implantar um índice otimizado para armazenamento em um endpoint criado.

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

Definir deploymentTier como STORAGE implanta o índice otimizado para armazenamento com o displayName especificado em um endpoint. A Pesquisa de vetor escolhe dinamicamente o tipo de máquina adequado para oferecer o melhor desempenho.

A seguir