Best practice per l'ottimizzazione degli indici ScaNN

Seleziona una versione della documentazione:

Questa pagina fornisce consigli su come ottimizzare i parametri dell'indice AlloyDB Omni per un equilibrio ottimale tra richiamo e QPS. I parametri consigliati per l'indice Scalable Nearest Neighbor (ScaNN) variano a seconda che tu scelga di creare un indice ad albero a due o tre livelli.

Creazione dell'indice ScaNN

Per ulteriori informazioni, consulta la documentazione di riferimento dell'indice ScaNN.

Indice ad albero a due livelli

Per applicare i consigli che ti aiutano a trovare i valori ottimali di num_leaves e num_leaves_to_search per il tuo set di dati, segui questi passaggi consigliati:

  1. Per creare l'indice ScaNN ottimizzato per i seguenti casi, imposta il parametro num_leaves sul seguente valore, dove rows è il numero di righe nella tabella indicizzata:
    • balanced index build time and quality impostato su num_leaves a sqrt(rows).
    • quality imposta num_leaves su righe/100.
  2. Esegui le query di test, aumentando il valore di scann.num_of_leaves_to_search, finché non raggiungi l'intervallo di richiamo target, ad esempio il 95%. Per ulteriori informazioni sull'analisi delle query, vedi Analizzare le query.
  3. Prendi nota del rapporto tra scann.num_leaves_to_search e num_leaves che verrà utilizzato nei passaggi successivi. Questo rapporto fornisce un'approssimazione del set di dati che ti aiuterà a raggiungere il richiamo target.

    Se lavori con vettori di dimensioni elevate (500 dimensioni o più) e vuoi migliorare il richiamo, prova a modificare il valore di scann.pre_reordering_num_neighbors. Il valore predefinito è impostato sul valore 500 * K, dove K è il limite impostato nella query.
  4. Se il tuo QPS è troppo basso dopo che le query raggiungono un richiamo target, segui questi passaggi:
    1. Ricrea l'indice, aumentando il valore di num_leaves e scann.num_leaves_to_search in base alle seguenti indicazioni:
      • Imposta num_leaves su un fattore maggiore della radice quadrata del numero di righe. Ad esempio, se l'indice ha num_leaves impostato sulla radice quadrata del conteggio delle righe, prova a impostarlo sul doppio della radice quadrata. Se il valore è già il doppio, prova a impostarlo sul triplo della radice quadrata.
      • Aumenta scann.num_leaves_to_search in base alle necessità per mantenere il rapporto con num_leaves, che hai annotato nel passaggio 3.
      • Imposta num_leaves su un valore minore o uguale al numero di righe diviso per 100.
    2. Esegui di nuovo le query di test. Mentre esegui le query di test, prova a ridurre scann.num_leaves_to_search, trovando un valore che aumenti le QPS mantenendo un richiamo elevato. Prova valori diversi di scann.num_leaves_to_search senza ricompilare l'indice.
  5. Ripeti il passaggio 4 finché sia il QPS sia l'intervallo di richiamo non avranno raggiunto valori accettabili.

Indice ad albero a tre livelli

Oltre ai consigli per l'indice ScaNN ad albero a due livelli, utilizza le seguenti indicazioni.

Per applicare i consigli per trovare il valore ottimale dei parametri di indice num_leaves e max_num_levels:

  1. Crea l'indice ScaNN con le seguenti combinazioni di num_leaves e max_num_levels in base ai tuoi obiettivi di rendimento:

    • bilancia il tempo di creazione dell'indice e la qualità: imposta max_num_levels come 2 e num_leaves come power(rows, ⅔).
    • Ottimizza per la qualità: imposta max_num_levels come 2 e num_leaves come rows/100.
  2. Esegui le query di test. Per maggiori informazioni sull'analisi delle query, vedi Analizzare le query.

  3. Prendi nota del rapporto tra scann.num_leaves_to_search e num_leaves che verrà utilizzato nei passaggi successivi. Questo rapporto fornisce un'approssimazione del set di dati che ti aiuterà a raggiungere il richiamo target.

Se lavori con vettori di dimensioni elevate (500 dimensioni o più) e vuoi migliorare il richiamo, prova a modificare il valore di scann.pre_reordering_num_neighbors. Il valore predefinito è impostato sul valore 500 * K, dove K è il limite impostato nella query.

  1. Se il tuo QPS è troppo basso dopo che le query raggiungono un richiamo target, segui questi passaggi:

    • Ricrea l'indice, aumentando il valore di num_leaves e scann.num_leaves_to_search in base alle seguenti indicazioni:
    • Imposta num_leaves su un fattore maggiore di power(rows, ⅔). Ad esempio, se l'indice ha num_leaves impostato su power(rows, ⅔), prova a impostarlo sul doppio di power(rows, ⅔). Se il valore è già doppio, prova a impostarlo sul triplo di power(rows, ⅔).
    • Aumenta scann.num_leaves_to_search in base alle necessità per mantenere il rapporto con num_leaves, che hai annotato nel passaggio 3.
    • Imposta un valore di num_leaves minore o uguale a rows/100.
    • Esegui di nuovo le query di test. Mentre esegui le query di test, prova a ridurre scann.num_leaves_to_search, trovando un valore che aumenti le QPS mantenendo un richiamo elevato. Prova valori diversi di scann.num_leaves_to_search senza ricompilare l'indice.
  2. Ripeti il passaggio 4 finché sia il QPS sia l'intervallo di richiamo non avranno raggiunto valori accettabili.

Manutenzione indici

Se la tua tabella è soggetta a aggiornamenti o inserimenti frequenti, ti consigliamo di reindicizzare periodicamente l'indice ScaNN esistente per migliorare l'accuratezza del recupero. Puoi monitorare le metriche dell'indice per visualizzare le modifiche nelle distribuzioni dei vettori o nelle mutazioni dei vettori dalla creazione dell'indice e poi eseguire nuovamente l'indicizzazione di conseguenza. Per saperne di più sulle metriche, consulta Metriche dell'indice vettoriale.

Passaggi successivi