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.