Die empfohlenen Parameter für den IndexScaNN
unterscheiden sich je nachdem, ob Sie einen zweistufigen oder dreistufigen Baumindex erstellen. Auf dieser Seite finden Sie Empfehlungen zur Optimierung von Indexparametern für ein optimales Gleichgewicht zwischen Rückruf und QPS.
ScaNN-Indexerstellung
Weitere Informationen finden Sie in der Referenz zum ScaNN-Index.
Zweistufiger Baumindex
So können Sie Empfehlungen anwenden, um die optimalen Werte für num_leaves
und num_leaves_to_search
für Ihren Datensatz zu ermitteln:
- Wenn Sie den
ScaNN
-Index für die folgenden Fälle optimieren möchten, legen Sie den Parameternum_leaves
auf den folgenden Wert fest. Dabei ist „Zeilen“ die Anzahl der Zeilen in der indexierten Tabelle:- Wenn Sie Indexerstellungszeit und Qualität ausbalancieren möchten, setzen Sie
num_leaves
aufsqrt(rows)
. - Für quality wird „num_leaves“ auf „Zeilen/100“ festgelegt.
- Wenn Sie Indexerstellungszeit und Qualität ausbalancieren möchten, setzen Sie
- Führen Sie die Testabfragen aus und erhöhen Sie den Wert von
scann.num_of_leaves_to_search
, bis Sie den gewünschten Bereich für die Wiedererkennung erreichen, z. B. 95%. Weitere Informationen zur Analyse von Abfragen finden Sie unter Abfragen analysieren. - Notieren Sie sich das Verhältnis zwischen
scann.num_leaves_to_search
undnum_leaves
, das in den nächsten Schritten verwendet wird. Dieses Verhältnis liefert eine Näherung an den Datensatz, mit der Sie die gewünschte Wiedererkennung erzielen.
Wenn Sie mit Vektoren mit hoher Dimension (500 Dimensionen oder mehr) arbeiten und die Wiedererkennung verbessern möchten, können Sie den Wert vonscann.pre_reordering_num_neighbors
anpassen. Der Standardwert ist500 * K
, wobeiK
das Limit ist, das Sie in Ihrer Abfrage festgelegt haben. - Wenn die QPS zu niedrig ist, nachdem Ihre Abfragen die gewünschte Trefferquote 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:- Legen Sie für
num_leaves
einen größeren Faktor der Quadratwurzel der Zeilenanzahl fest. Wennnum_leaves
im Index beispielsweise auf die Quadratwurzel der Zeilenanzahl festgelegt ist, versuchen Sie, den Wert auf das Doppelte der Quadratwurzel zu setzen. Wenn der Wert bereits doppelt so hoch ist, versuchen Sie, ihn auf das Dreifache der Quadratwurzel festzulegen. - 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 Anzahl der Zeilen geteilt durch 100 ist.
- Legen Sie für
- Führen Sie die Testabfragen noch einmal aus.
Versuchen Sie während der Ausführung der Testabfragen,
scann.num_leaves_to_search
zu reduzieren, um einen Wert zu finden, mit dem die Anzahl der Abfragen pro Sekunde erhöht wird, während die Trefferquote hoch bleibt. Probieren Sie verschiedene Werte fürscann.num_leaves_to_search
aus, ohne den Index neu zu erstellen.
- Erstellen Sie den Index neu und erhöhen Sie die Werte von
- Wiederholen Sie Schritt 4, bis sowohl die QPS als auch der Rückrufbereich akzeptable Werte erreicht haben.
Dreistufiger Baumindex
Beachten Sie zusätzlich zu den Empfehlungen für den zweistufigen BaumScaNN
-Index die folgenden Hinweise.
So wenden Sie Empfehlungen an, um den optimalen Wert für die 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:- Indexerstellungszeit und Qualität ausbalancieren: Legen Sie
max_num_levels
als2
undnum_leaves
alspower(rows, ⅔)
fest. - Qualität optimieren: Legen Sie
max_num_levels
als2
undnum_leaves
alsrows/100
fest.
- Indexerstellungszeit und Qualität ausbalancieren: 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 nächsten Schritten verwendet wird. Dieses Verhältnis liefert eine Näherung für den Datensatz, mit der Sie die angestrebte Wiedererkennung erreichen können.
Wenn Sie mit Vektoren mit vielen Dimensionen (500 oder mehr) arbeiten und die Wiedererkennung verbessern möchten, können Sie den Wert von scann.pre_reordering_num_neighbors
anpassen. Der Standardwert ist 500 * K
, wobei K
das Limit ist, das Sie in Ihrer Abfrage festgelegt haben.
Wenn die QPS zu niedrig ist, nachdem Ihre Abfragen die angestrebte Trefferquote 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: - Legen Sie für
num_leaves
einen größeren Faktor alspower(rows, ⅔)
fest. Wennnum_leaves
im Index beispielsweise aufpower(rows, ⅔)
festgelegt ist, versuchen Sie, den Wert auf das Doppelte vonpower(rows, ⅔)
zu setzen. Wenn der Wert bereits doppelt so hoch ist, versuchen Sie, ihn auf das Dreifache vonpower(rows, ⅔)
festzulegen. - 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 gleichrows/100
ist. - Führen Sie die Testabfragen noch einmal aus. Versuchen Sie während der Ausführung der Testabfragen,
scann.num_leaves_to_search
zu reduzieren, um einen Wert zu finden, mit dem die Anzahl der Abfragen pro Sekunde erhöht wird, während die Trefferquote hoch bleibt. 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 Rückrufbereich akzeptable Werte erreicht haben.
Indexwartung
Wenn Ihre Tabelle häufig aktualisiert oder Daten eingefügt werden, empfehlen wir, den vorhandenen ScaNN
-Index regelmäßig neu zu indexieren, um die Abrufgenauigkeit zu verbessern.
Sie können Indexmesswerte beobachten, um Änderungen an Vektorverteilungen oder Vektormutationen seit dem Erstellen des Index zu sehen und dann entsprechend neu indexieren. Weitere Informationen zu Messwerten finden Sie unter Messwerte für Vektorindexe ansehen.