El nivel de rendimiento optimizado para el almacenamiento de Vector Search está diseñado para indexar y buscar conjuntos de datos masivos. Este nivel implementa una arquitectura basada en disco en lugar de usar RAM, lo que reduce significativamente tus costos operativos. Cuando tu prioridad es la eficiencia de costos a gran escala en lugar de la latencia de consulta más baja posible, el nivel optimizado para el almacenamiento es tu mejor opción.
Cuándo usar un índice optimizado para el almacenamiento
Considera los índices optimizados para el almacenamiento si tienes alguno de los siguientes:
Un conjunto de datos muy grande: Debes indexar una gran cantidad de vectores, y el costo de alojar una gran cantidad de fragmentos optimizados para el rendimiento es prohibitivo.
Una carga de trabajo de QPS baja: En las aplicaciones de bajo volumen de consultas, el ahorro de costos por usar menos fragmentos puede ser significativo.
Requisitos de latencia flexibles: Tu aplicación puede tolerar un aumento menor en la latencia de consulta, que es el tiempo que tarda en obtener un resultado de búsqueda.
Compensaciones de rendimiento
En comparación con el índice predeterminado optimizado para el rendimiento, un índice optimizado para el almacenamiento tiene las siguientes características:
- Mayor latencia de consulta: Las consultas tienen una latencia ligeramente más alta en un nivel de recuperación determinado.
Cómo configurar un índice optimizado para el almacenamiento
Para crear un índice
optimizado para el almacenamiento, establece el parámetro shardSize en
SHARD_SIZE_SO_DYNAMIC en la configuración del índice.
Ejemplo: Cómo crear un índice optimizado para el almacenamiento
En el siguiente ejemplo, se muestra el JSON necesario para crear un nuevo índice de transmisión optimizado para el almacenamiento.
{
"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"
}
En el ejemplo, shardSize se establece en SHARD_SIZE_SO_DYNAMIC, lo que indica a Vector Search que compile un índice más denso. Esto permite que cada fragmento contenga muchos más puntos de datos, lo que reduce la cantidad total de fragmentos necesarios para tu conjunto de datos. Otros campos, como dimensions y distanceMeasureType, se configuran según tus necesidades.
Extremos
Las implementaciones optimizadas para el almacenamiento se pueden usar con cualquier extremo existente.
Implementa un índice
En el siguiente ejemplo, se muestra el JSON necesario para implementar un índice optimizado para el almacenamiento en un extremo que creaste.
{
"deployedIndex": {
"id": "PROJECT_UNIQUE_ID_NAME",
"index": "projects/PROJECT_ID/locations/LOCATION/indexes/INDEX_ID",
"displayName": "INDEX_DISPLAY_NAME",
"deploymentTier": "STORAGE"
}
}
Si estableces deploymentTier en STORAGE, se implementa el índice optimizado para el almacenamiento con el displayName especificado en un extremo.
También puedes especificar el recuento mínimo de réplicas (minReplicaCount) y el recuento máximo de réplicas (minReplicaCount) para controlar la cantidad de réplicas de máquinas que se implementarán. No se admite la configuración del tipo de máquina (machineType).