ScaNN-Index erstellen
Weitere Informationen finden Sie in der ScaNN-Indexreferenz.
Zweistufiger Baumindex
So wenden Sie Empfehlungen an, um die optimalen Werte für num_leaves
und num_leaves_to_search
für Ihren Datensatz zu ermitteln:
- Wenn Sie den für die folgenden Fälle optimierten Index
ScaNN
erstellen möchten, legen Sie den Parameternum_leaves
auf den folgenden Wert fest, wobei „rows“ die Anzahl der Zeilen in der indexierten Tabelle ist:- Ausgewogene Indexerstellungszeit und ‑qualität: Setzen Sie
num_leaves
aufsqrt(rows)
. - Bei quality wird „num_leaves“ auf „rows/100“ festgelegt.
- Ausgewogene Indexerstellungszeit und ‑qualität: Setzen Sie
- Führen Sie Ihre Testabfragen aus und erhöhen Sie den Wert von
scann.num_of_leaves_to_search
, bis Sie den gewünschten Recall-Bereich erreichen, z. B. 95%. Weitere Informationen zum Analysieren von Abfragen finden Sie unter Abfragen analysieren. - Notieren Sie sich das Verhältnis zwischen
scann.num_leaves_to_search
undnum_leaves
, das in den nachfolgenden Schritten verwendet wird. Dieses Verhältnis bietet eine Annäherung an den Datensatz, mit dem Sie die angestrebte Erinnerung erreichen können.
Wenn Sie mit Vektoren mit hoher Dimension (500 Dimensionen oder mehr) arbeiten und die Erinnerung verbessern möchten, versuchen Sie, den Wert vonscann.pre_reordering_num_neighbors
zu optimieren. Der Standardwert ist auf500 * K
festgelegt, wobeiK
das Limit ist, das Sie in Ihrer Abfrage festgelegt haben. - Wenn Ihre Rate von Abfragen pro Sekunde zu niedrig ist, nachdem Ihre Anfragen ein bestimmtes Ziel für den Recall erreicht haben, gehen Sie so vor:
- Erstellen Sie den Index neu und erhöhen Sie den Wert von
num_leaves
undscann.num_leaves_to_search
gemäß der folgenden Anleitung:- Setzen Sie
num_leaves
auf einen größeren Faktor der Quadratwurzel der Anzahl der Zeilen. Wenn der Index beispielsweisenum_leaves
auf die Quadratwurzel der Zeilenanzahl festgelegt hat, versuchen Sie, ihn auf das Doppelte der Quadratwurzel festzulegen. Wenn der Wert bereits verdoppelt wurde, versuchen Sie, ihn auf das Dreifache der Quadratwurzel zu setzen. - Erhöhen Sie
scann.num_leaves_to_search
nach Bedarf, um das Verhältnis zunum_leaves
beizubehalten, das Sie in Schritt 3 notiert haben. - Legen Sie für
num_leaves
einen Wert fest, der kleiner oder gleich der Zeilenanzahl geteilt durch 100 ist.
- Setzen Sie
- Führen Sie die Testabfragen noch einmal aus.
Während Sie die Testanfragen ausführen, können Sie mit einer Reduzierung von
scann.num_leaves_to_search
experimentieren, um einen Wert zu finden, der die Anzahl der Abfragen pro Sekunde erhöht und gleichzeitig die Trefferquote hoch hält. Sie können verschiedene Werte fürscann.num_leaves_to_search
ausprobieren, ohne den Index neu erstellen zu müssen.
- Erstellen Sie den Index neu und erhöhen Sie den Wert von
- Wiederholen Sie Schritt 4, bis sowohl die QPS als auch der Recall-Bereich akzeptable Werte erreicht haben.
Baumindex mit drei Ebenen
Zusätzlich zu den Empfehlungen für den ScaNN
-Index mit zwei Ebenen sollten Sie die folgenden Hinweise beachten.
So wenden Sie Empfehlungen an, um den optimalen Wert der Indexparameter num_leaves
und max_num_levels
zu ermitteln:
Erstellen Sie den
ScaNN
-Index mit den folgendennum_leaves
- undmax_num_levels
-Kombinationen, die auf Ihren Leistungszielen basieren:- Indexaufbauzeit und ‑qualität in Einklang bringen: Legen Sie
max_num_levels
als2
undnum_leaves
alspower(rows, ⅔)
fest. - Für Qualität optimieren: Legen Sie
max_num_levels
auf2
undnum_leaves
aufrows/100
fest.
- Indexaufbauzeit und ‑qualität in Einklang bringen: Legen Sie
Führen Sie Ihre Testabfragen aus. Weitere Informationen zum Analysieren von Abfragen finden Sie unter Abfragen analysieren.
Notieren Sie sich das Verhältnis zwischen
scann.num_leaves_to_search
undnum_leaves
, das in den nachfolgenden Schritten verwendet wird. Dieses Verhältnis bietet eine Schätzung für das Dataset, mit dem Sie den angestrebten Recall erreichen können.
Wenn Sie mit Vektoren mit vielen Dimensionen (500 oder mehr) arbeiten und den Recall verbessern möchten, versuchen Sie, den Wert von scann.pre_reordering_num_neighbors
zu optimieren. Der Standardwert ist auf 500 * K
festgelegt, wobei K
das Limit ist, das Sie in Ihrer Abfrage festgelegt haben.
Wenn Ihre Rate von Abfragen pro Sekunde zu niedrig ist, nachdem Ihre Anfragen eine Ziel-Recall-Rate erreicht haben, gehen Sie so vor:
- Erstellen Sie den Index neu und erhöhen Sie die Werte von
num_leaves
undscann.num_leaves_to_search
gemäß der folgenden Anleitung: - Setzen Sie
num_leaves
auf einen größeren Faktor vonpower(rows, ⅔)
. Wenn der Index beispielsweisenum_leaves
aufpower(rows, ⅔)
gesetzt hat, versuchen Sie, ihn auf das Doppelte vonpower(rows, ⅔)
zu setzen. Wenn der Wert bereits doppelt ist, versuchen Sie, ihn auf das Dreifache vonpower(rows, ⅔)
zu setzen. - Erhöhen Sie
scann.num_leaves_to_search
nach Bedarf, um das Verhältnis zunum_leaves
beizubehalten, das Sie in Schritt 3 notiert haben. - Setzen Sie
num_leaves
auf einen Wert, der kleiner oder gleichrows/100
ist. - Führen Sie die Testabfragen noch einmal aus. Während Sie die Testanfragen ausführen, können Sie mit einer Reduzierung von
scann.num_leaves_to_search
experimentieren, um einen Wert zu finden, der die Anzahl der Abfragen pro Sekunde erhöht und gleichzeitig die Trefferquote hoch hält. Sie können verschiedene Werte fürscann.num_leaves_to_search
ausprobieren, ohne den Index neu erstellen zu müssen.
- Erstellen Sie den Index neu und erhöhen Sie die Werte von
Wiederholen Sie Schritt 4, bis sowohl die QPS als auch der Recall-Bereich akzeptable Werte erreicht haben.
Indexwartung
Wenn Ihre Tabelle häufig aktualisiert oder neue Zeilen eingefügt werden, empfehlen wir, den vorhandenen ScaNN
-Index regelmäßig neu zu indexieren, um die Genauigkeit des Rückrufs zu verbessern.
Sie können Indexmesswerte beobachten, um Änderungen an Vektorverteilungen oder Vektormutationen seit der Erstellung des Index zu sehen, und den Index dann entsprechend neu indexieren. Weitere Informationen zu Messwerten finden Sie unter Messwerte für Vektorindex.