Vector Search otimizado para armazenamento

O nível de desempenho otimizado para armazenamento da pesquisa vetorial foi concebido para indexar e pesquisar conjuntos de dados massivos. Este nível implementa uma arquitetura baseada em disco em vez de usar RAM, o que reduz significativamente os custos operacionais. Quando a sua prioridade é a eficiência de custos em grande escala, em vez da latência de consulta mais baixa possível, o nível otimizado para armazenamento é a sua melhor escolha.

Quando usar um índice otimizado para armazenamento

Considere os índices otimizados para armazenamento se tiver alguma das seguintes opções:

  • Um conjunto de dados muito grande: tem de indexar um número muito grande de vetores e o custo de alojar um grande número de fragmentos otimizados para o desempenho é proibitivo.

  • Uma carga de trabalho de QPS baixo: em aplicações com um volume de consultas baixo, a poupança de custos com a utilização de menos fragmentos pode ser significativa.

  • Requisitos de latência flexíveis: a sua aplicação pode tolerar um pequeno aumento na latência da consulta, que é o tempo necessário para obter um resultado da pesquisa.

Equilíbrios de desempenho

Em comparação com o índice otimizado em função do desempenho predefinido, um índice otimizado em função do armazenamento tem as seguintes caraterísticas:

  • Aumento da latência das consultas: as consultas têm uma latência ligeiramente superior a um determinado nível de recordação.

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: criar um índice otimizado para armazenamento

O exemplo seguinte 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 está definido como SHARD_SIZE_SO_DYNAMIC, o que indica ao Vector Search para criar um índice mais denso. Isto permite que cada fragmento contenha significativamente mais pontos de dados, reduzindo assim o número total de fragmentos necessários para o seu conjunto de dados. Outros campos, como dimensions e distanceMeasureType, são configurados de acordo com as suas necessidades.

Pontos finais

As implementações otimizadas para armazenamento podem ser usadas com qualquer ponto final existente.

Implemente um índice

O exemplo seguinte demonstra o JSON necessário para implementar um índice otimizado para armazenamento num ponto final que criou.

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

A definição de deploymentTier como STORAGE implementa o índice otimizado para armazenamento com o displayName especificado num ponto final. A pesquisa vetorial escolhe dinamicamente o tipo de máquina adequado para o melhor desempenho.

O que se segue?