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.