Best Practices für die Vektorindexierung

Auf dieser Seite werden Best Practices für die Vektorindexierung beschrieben, mit denen Sie Ihre Vektorindexe optimieren und die Ergebnisse von ANN-Abfragen (Approximate Nearest Neighbor) verbessern können.

Optionen für die Vektorsuche optimieren

Die optimalen Werte für die Optionen Ihres Vektorindex hängen von Ihrem Anwendungsfall, Ihrem Vektordatensatz und den Anfragevektoren ab. Sie können diese Werte festlegen und optimieren, indem Sie einen neuen Vektorindex erstellen und index_option_list in der CREATE VECTOR INDEX-Anweisung festlegen. Möglicherweise müssen Sie die Werte für Ihre spezifische Arbeitslast iterativ optimieren.

Hier sind einige hilfreiche Richtlinien für die Auswahl geeigneter Werte:

  • tree_depth (Baumebene): Wenn die Tabelle, die Sie indexieren, weniger als 10 Millionen Zeilen hat, verwenden Sie für tree_depth den Wert 2. Andernfalls unterstützt ein tree_depth von 3 Tabellen mit bis zu etwa 10 Milliarden Zeilen.

  • num_leaves: Verwenden Sie die Quadratwurzel der Anzahl der Zeilen im Dataset. Ein größerer Wert kann die Build-Zeit des Vektorindex verlängern. Vermeiden Sie es, num_leaves größer als table_row_count / 1.000 festzulegen, da dies zu zu kleinen Blättern und einer schlechten Leistung führt.

  • num_leaves_to_search: Mit dieser Option wird angegeben, wie viele Blattknoten des Index durchsucht werden. Durch Erhöhen von num_leaves_to_search wird der Recall verbessert, aber auch die Latenz und die Kosten steigen. Wir empfehlen, für num_leaves_to_search eine Zahl zu verwenden, die 1% der Gesamtzahl der Blätter ist, die in der CREATE VECTOR INDEX-Anweisung definiert sind. Wenn Sie eine Filterklausel verwenden, erhöhen Sie diesen Wert, um die Suche auszuweiten.

Wenn ein akzeptabler Recall erreicht wird, die Kosten für Abfragen jedoch zu hoch sind, was zu einer niedrigen maximalen QPS führt, versuchen Sie, num_leaves zu erhöhen. Gehen Sie dazu so vor:

  1. Setzen Sie num_leaves auf ein Vielfaches k des ursprünglichen Werts (z. B. 2 * sqrt(table_row_count)).
  2. Legen Sie num_leaves_to_search als das k-fache des ursprünglichen Werts fest.
  3. Experimentieren Sie mit einer Reduzierung von num_leaves_to_search, um Kosten und Anzahl der Abfragen pro Sekunde zu verbessern und gleichzeitig den Recall beizubehalten.

Recall verbessern

Um den Recall zu verbessern, können Sie den num_leaves_to_search-Wert anpassen oder den Vektorindex neu erstellen.

Wenn der Wert für num_leaves_to_search zu klein ist, kann es schwieriger sein, die nächsten Nachbarn für einige Anfragevektoren zu finden. Wenn Sie einen neuen Vektorindex mit einem höheren num_leaves_to_search-Wert erstellen, kann dies die Erinnerung verbessern, da mehr Blätter durchsucht werden. Die letzten Suchanfragen enthalten möglicherweise mehr dieser anspruchsvollen Vektoren.

Vektorindex neu erstellen

Die Baumstruktur des Vektorindex wird zum Zeitpunkt der Erstellung für das Dataset optimiert und ist danach statisch. Wenn nach der Erstellung des ursprünglichen Vektorindex deutlich unterschiedliche Vektoren hinzugefügt werden, ist die Baumstruktur möglicherweise suboptimal, was zu einem schlechteren Recall führt.

So erstellen Sie Ihren Vektorindex ohne Ausfallzeiten neu:

  1. Erstellen Sie einen neuen Vektorindex für dieselbe Einbettungsspalte wie den aktuellen Vektorindex und aktualisieren Sie die Parameter (z. B. OPTIONS) entsprechend. Nachdem der Index erstellt wurde, können Sie prüfen, welcher der beiden Indexe eine bessere Leistung erzielt. Wenn ja, fahren Sie mit dem nächsten Schritt fort. Andernfalls fahren Sie mit dem Löschen des veralteten Vektorindex fort.
  2. Spanner entscheidet automatisch, welcher Index bei der Ausführung der Abfrage verwendet wird. Spanner bietet zwei Möglichkeiten, den zu verwendenden Index anzugeben. Wählen Sie eine der folgenden Methoden aus, um Ihre Indexe zu bewerten und zu vergleichen:

    a. Anwendung ändern: Sie können eine Teilmenge Ihrer Abfragen so aktualisieren, dass sie den Hinweis FORCE_INDEX verwenden, um auf den neuen Index zu verweisen und die Vektorsuchanfrage zu aktualisieren. So wird sichergestellt, dass für die Anfrage der neue Vektorindex verwendet wird. Bei dieser Methode müssen Sie num_leaves_to_search in Ihrer neuen Anfrage möglicherweise neu abstimmen.

    b. Schema ändern: Sie können die Option disable_search für einen Ihrer Vektorindexe festlegen. Wenn true festgelegt ist, wird der Vektorindex in Spanner deaktiviert. Führen Sie dazu die Anweisung zum Ändern des ALTER VECTOR INDEX-Schemas aus:

      ALTER VECTOR INDEX IncidentVectorIndex SET OPTIONS (disable_search=true);
    

    Bei dieser Methode wird verhindert, dass Spanner diesen Vektorindex in Ihrer Datenbank verwendet. Wenn Sie zwei Indexe haben und diese Option für den älteren Index festlegen, werden nach der Schemaänderung alle Anfragen mit dem neuen Index ausgeführt. Wenn Sie den Hinweis FORCE_INDEX verwenden, um einen Vektorindex anzugeben, für den die Option disable_search auf true festgelegt ist, schlägt die Abfrage fehl.

  3. Löschen Sie den veralteten Vektorindex.

Nächste Schritte