Ricerca vettoriale ottimizzata per l'archiviazione

Il livello di prestazioni ottimizzato per l'archiviazione per Vector Search è progettato per l'indicizzazione e la ricerca di set di dati di grandi dimensioni. Questo livello implementa un'architettura basata su disco anziché utilizzare la RAM, riducendo in modo significativo i costi operativi. Se la tua priorità è l'efficienza dei costi su larga scala anziché la latenza di query più bassa possibile, il livello ottimizzato per l'archiviazione è la scelta migliore.

Quando utilizzare un indice ottimizzato per l'archiviazione

Prendi in considerazione gli indici ottimizzati per l'archiviazione se hai uno dei seguenti elementi:

  • Un set di dati molto grande: devi indicizzare un numero molto elevato di vettori e il costo dell'hosting di un numero elevato di shard ottimizzati per il rendimento è proibitivo.

  • Un workload con QPS basso: nelle applicazioni con un volume di query basso, il risparmio sui costi derivante dall'utilizzo di un numero inferiore di shard può essere significativo.

  • Requisiti di latenza flessibili: la tua applicazione può tollerare un leggero aumento della latenza delle query, ovvero il tempo necessario per ottenere un risultato di ricerca.

Compromessi in termini di prestazioni

Rispetto all'indice predefinito ottimizzato per il rendimento, un indice ottimizzato per l'archiviazione presenta le seguenti caratteristiche:

  • Maggiore latenza delle query: le query hanno una latenza leggermente superiore a un determinato livello di richiamo.

Come configurare un indice ottimizzato per l'archiviazione

Per creare un indice ottimizzato per l'archiviazione, imposta il parametro shardSize su SHARD_SIZE_SO_DYNAMIC nella configurazione dell'indice.

Esempio: creare un indice ottimizzato per l'archiviazione

Il seguente esempio mostra il codice JSON necessario per creare un nuovo indice di streaming ottimizzato per l'archiviazione.

{
  "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"
}

Nell'esempio, shardSize è impostato su SHARD_SIZE_SO_DYNAMIC, il che indica a Vector Search di creare un indice più denso. In questo modo, ogni shard può contenere molti più punti dati, riducendo così il numero totale di shard necessari per il tuo set di dati. Altri campi, come dimensions e distanceMeasureType, vengono configurati in base alle tue esigenze.

Endpoint

I deployment ottimizzati per l'archiviazione possono essere utilizzati con qualsiasi endpoint esistente.

Esegui il deployment di un indice

Il seguente esempio mostra il codice JSON necessario per eseguire il deployment di un indice ottimizzato per l'archiviazione in un endpoint che hai creato.

{
  "deployedIndex": {
    "id": "PROJECT_UNIQUE_ID_NAME",
    "index": "projects/PROJECT_ID/locations/LOCATION/indexes/INDEX_ID",
    "displayName": "INDEX_DISPLAY_NAME",
    "deploymentTier": "STORAGE"
  }
}

Se imposti deploymentTier su STORAGE, viene eseguito il deployment dell'indice ottimizzato per l'archiviazione con il displayName specificato in un endpoint. Vector Search sceglie dinamicamente il tipo di macchina appropriato per ottenere le prestazioni migliori.

Passaggi successivi