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 los costos operativos. Cuando tu prioridad es la rentabilidad 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 alguna de las siguientes opciones:
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 con un QPS bajo: En las aplicaciones con un volumen de consultas bajo, el ahorro de costos que se obtiene al usar menos fragmentos puede ser significativo.
Requisitos de latencia flexibles: Tu aplicación puede tolerar un aumento menor en la latencia de las búsquedas, que es el tiempo que se tarda en obtener un resultado de la 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 las búsquedas: Las búsquedas tienen una latencia ligeramente mayor 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 código JSON necesario para crear un índice de transmisión optimizado para el almacenamiento nuevo.
{
"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 cree 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 endpoint existente.
Implementa un índice
En el siguiente ejemplo, se muestra el código 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 configuras deploymentTier
como STORAGE
, se implementa el índice optimizado para el almacenamiento con el displayName
especificado en un extremo. Vector Search elige de forma dinámica el tipo de máquina adecuado para obtener el mejor rendimiento.