O nível de desempenho otimizado para armazenamento da pesquisa de vetor foi projetado para indexar e pesquisar conjuntos de dados enormes. Esse nível implementa uma arquitetura baseada em disco em vez de usar a RAM, reduzindo significativamente os custos operacionais. Quando sua prioridade é a eficiência de custos em 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 os índices otimizados para armazenamento se você tiver alguma das seguintes opções:
Um conjunto de dados muito grande: é necessário 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 QPS baixa: em aplicativos de 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 de consulta, que é o tempo necessário para receber um resultado de pesquisa.
Compromissos de desempenho
Em comparação com o índice padrão otimizado para desempenho, um índice otimizado para armazenamento tem as seguintes características:
- Latência de consulta aumentada: as consultas têm uma latência um pouco 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 está definido como SHARD_SIZE_SO_DYNAMIC, que instrui a pesquisa de vetor 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 o 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.
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.
Também é possível especificar a contagem mínima de réplicas (minReplicaCount) e a contagem máxima de réplicas (minReplicaCount) para controlar o número de réplicas de máquinas a serem implantadas. Não é possível definir o tipo de máquina (machineType).