Creazione dell'indice ScaNN
Per saperne di più, 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:
- Per creare l'indice
ScaNNottimizzato per i seguenti casi, imposta il parametronum_leavessul seguente valore, dove rows è il numero di righe nella tabella indicizzata:- Tempo di compilazione e qualità dell'indice bilanciati imposta
num_leavessusqrt(rows). - Qualità imposta num_leaves su rows/100.
- Tempo di compilazione e qualità dell'indice bilanciati imposta
- 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 saperne di più sull'analisi delle query, consulta Analizzare le query. - Prendi nota del rapporto tra
scann.num_leaves_to_searchenum_leavesche verrà utilizzato nei passaggi successivi. Questo rapporto fornisce un'approssimazione del set di dati che ti aiuterà a raggiungere il richiamo target.
Se utilizzi vettori ad alta dimensione (500 dimensioni o più) e vuoi migliorare il richiamo, prova a ottimizzare il valore discann.pre_reordering_num_neighbors. Il valore predefinito è impostato sul valore500 * K, doveKè il limite impostato nella query. - Se il QPS è troppo basso dopo che le query raggiungono un richiamo target, segui questi passaggi:
- Ricrea l'indice, aumentando il valore di
num_leavesescann.num_leaves_to_searchin base alle seguenti indicazioni:- Imposta
num_leavessu un fattore maggiore della radice quadrata del conteggio delle righe. Ad esempio, se l'indice hanum_leavesimpostato 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_searchin base alle esigenze per mantenere il rapporto connum_leaves, che hai annotato nel passaggio 3. - Imposta
num_leavessu un valore minore o uguale al conteggio delle righe diviso per 100.
- Imposta
- Esegui di nuovo le query di test.
Durante l'esecuzione delle query di test, prova a ridurre
scann.num_leaves_to_search, trovando un valore che aumenti il QPS mantenendo un richiamo elevato. Prova diversi valori discann.num_leaves_to_searchsenza ricreare l'indice.
- Ricrea l'indice, aumentando il valore di
- Ripeti il passaggio 4 finché il QPS e l'intervallo di richiamo non raggiungono 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 dell'indice num_leaves e max_num_levels:
Crea l'indice
ScaNNcon le seguenti combinazioni dinum_leavesemax_num_levelsin base ai tuoi obiettivi di rendimento:- Bilancia il tempo di compilazione e la qualità dell'indice: imposta
max_num_levelssu2enum_leavessupower(rows, ⅔). - Ottimizza per la qualità: imposta
max_num_levelssu2enum_leavessurows/100.
- Bilancia il tempo di compilazione e la qualità dell'indice: imposta
Esegui le query di test. Per saperne di più sull'analisi delle query, consulta Analizzare le query.
Prendi nota del rapporto tra
scann.num_leaves_to_searchenum_leavesche verrà utilizzato nei passaggi successivi. Questo rapporto fornisce un'approssimazione del set di dati che ti aiuterà a raggiungere il richiamo target.
Se utilizzi vettori ad alta dimensione (500 dimensioni o più) e vuoi migliorare il richiamo, prova a ottimizzare il valore di scann.pre_reordering_num_neighbors. Il valore predefinito è impostato sul valore 500 * K, dove K è il limite impostato nella query.
Se il QPS è troppo basso dopo che le query raggiungono un richiamo target, segui questi passaggi:
- Ricrea l'indice, aumentando il valore di
num_leavesescann.num_leaves_to_searchin base alle seguenti indicazioni: - Imposta
num_leavessu un fattore maggiore dipower(rows, ⅔). Ad esempio, se l'indice hanum_leavesimpostato supower(rows, ⅔), prova a impostarlo sul doppio dipower(rows, ⅔). Se il valore è già il doppio, prova a impostarlo sul triplo dipower(rows, ⅔). - Aumenta
scann.num_leaves_to_searchin base alle esigenze per mantenere il rapporto connum_leaves, che hai annotato nel passaggio 3. - Imposta
num_leavessu un valore minore o uguale arows/100. - Esegui di nuovo le query di test. Durante l'esecuzione delle query di test, prova a ridurre
scann.num_leaves_to_search, trovando un valore che aumenti il QPS mantenendo un richiamo elevato. Prova diversi valori discann.num_leaves_to_searchsenza ricreare l'indice.
- Ricrea l'indice, aumentando il valore di
Ripeti il passaggio 4 finché il QPS e l'intervallo di richiamo non raggiungono 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 richiamo.
Puoi monitorare le metriche dell'indice per visualizzare le modifiche nelle distribuzioni dei vettori o le mutazioni dei vettori dalla creazione dell'indice e poi reindicizzare di conseguenza. Per saperne di più sulle metriche, consulta Metriche dell'indice vettoriale.