Vektorsuche

Auf dieser Seite wird beschrieben, wie Vektorsuchen in Cloud SQL for MySQL-Instanzen implementiert werden. Mit Cloud SQL können Sie Vektoreinbettungen speichern, Vektorindizes erstellen und Vektorsuchen in Verbindung mit Ihren anderen gespeicherten Daten ausführen.

Speicher für Vektoreinbettungen

Sie speichern Vektor-Embeddings in einer Tabelle, die den ACID-Eigenschaften (Atomarität, Konsistenz, Isolation, Langlebigkeit) entspricht. Wie bei anderen relationalen Daten in der Tabelle können Sie mithilfe der vorhandenen Transaktionssemantik auf die Vektor-Embeddings in der Tabelle zugreifen.

Um eine Zuordnung zwischen Tabellenzeilen und Vektordarstellungen herzustellen, müssen Sie in Ihrer Tabelle eine Spalte zum Speichern der Vektor-Embeddings erstellen. Die Spalte muss den Cloud SQL-Datentyp VECTOR verwenden und die Anzahl der Dimensionen angeben, die für die Einbettung erforderlich sind. In der Spalte für die Vektoreinbettung können nur Vektoreinbettungen gespeichert werden, die genau dieselben Dimensionen verwenden, die Sie bei der Definition der Spalte angeben.

Eine Tabelle kann nur eine Spalte für die Vektoreinbettung haben. Es gibt keine Einschränkungen für die Anzahl der Zeilen in der Tabelle.

Um die Vektor-Embedding-Spalte von anderen Spalten zu unterscheiden, fügt Cloud SQL der Spalte ein spezielles COMMENT und CONSTRAINT hinzu. Die Einschränkung ist für die Eingabevalidierung erforderlich und die Anmerkung für die Vektor-Embedding-Spalte ist als COMMENT sichtbar. Sie können den Kommentar oder die Einschränkung nicht ändern oder löschen.

Wenn in Ihrer Cloud SQL-Instanz genügend Speicher und Arbeitsspeicher verfügbar sind, können Sie mehrere Tabellen mit eigenen Spalten für Vektoreinbettungen haben.

Die Datenreplikation funktioniert für die Spalte mit Vektoreinbettungen genauso wie für andere MySQL-InnoDB-Spalten.

Eine Liste der Einschränkungen für Tabellen, Spalten und DML-Anweisungen für die Vektoreinbettung finden Sie unter Einschränkungen.

Vektorindexe

Sie müssen einen Vektorindex verwenden, um ANN-Ähnlichkeitssuchen für Ihre Vektor-Embeddings durchzuführen. In Cloud SQL werden Vektorindexe mit dem Algorithmus Scalable Nearest Neighbors (ScANN) erstellt.

Für Vektorindexe gelten die folgenden Anforderungen:

  • Sie können nur einen Vektorindex pro Tabelle erstellen.
  • Wenn Sie mehrere Tabellen mit Vektor-Embeddings in Ihrer Instanz haben, können Sie für jede einen Vektorindex erstellen.
  • Wenn Sie einen Vektorindex erstellen, können Sie dem Primärschlüssel der indexierten Tabelle keine Einschränkung hinzufügen.

Für eine bessere Suchqualität sollten Sie einen Vektorindex erst erstellen, nachdem Sie den Großteil Ihrer Daten in die Basistabelle geladen haben. Wenn die Basistabelle weniger als 1.000 Ebenen enthält, schlägt die Indexerstellung fehl.

Wenn Sie sich entscheiden, ob Sie einen Vektorindex erstellen möchten, und nur wenige Zeilen haben, sollten Sie überlegen, ob Sie stattdessen eine KNN-Suche ausführen können. Die Entscheidung, ob eine KNN- oder ANN-Suche verwendet werden soll, hängt auch von der Anzahl der Dimensionen der Vektoreinbettung ab. Bei einer größeren Anzahl von Einbettungen ist möglicherweise ein Vektorindex erforderlich.

Eine Liste der Einschränkungen für Vektorindexe finden Sie unter Einschränkungen. Informationen zum Erstellen eines Vektorindexes finden Sie unter Vektorindizes erstellen und verwalten.

Aktualisierungen des Vektorindexes

Cloud SQL aktualisiert Vektorindexe in Echtzeit. Bei jeder Transaktion, bei der DML-Vorgänge (Data Manipulation Language) auf der Basistabelle ausgeführt werden, werden Änderungen auch an die zugehörigen Vektorindizes weitergegeben. Vektorindexe verhalten sich wie jeder andere sekundäre Index in der Tabelle. Die Vektorindizes sind vollständig transaktionskonsistent und ACID-konform. Wenn Sie eine Transaktion rückgängig machen, werden die entsprechenden Rollback-Änderungen auch im Vektorindex vorgenommen.

Replikation von Vektorindexen

Cloud SQL repliziert Vektorindexe in allen Lesereplikaten, auch für die kaskadierende Replikation. Wenn Sie ein neues Lesereplikat aus einer primären Instanz mit Vektor-Embedding erstellen, werden die Einstellungen für das Vektor-Embedding von der primären Instanz übernommen. Für vorhandene Lesereplikate müssen Sie die Unterstützung für Vektor-Embedding für jedes Lesereplikat aktivieren.

Was die Auswirkungen auf die Replikationsverzögerung angeht, funktionieren das Erstellen und Verwalten von Vektorindexen genauso wie bei regulären MySQL-Indexen.

Persistenz, Herunterfahren und Auswirkungen auf die Wartung

Vektorindexe werden auf die gleiche Weise wie Basistabellen bei voller ACID-Unterstützung gespeichert. Vektorindexe sind immer mit den Daten der Basistabelle synchronisiert und haben dieselbe Sichtbarkeit, Isolation und Absturzsicherheit. Das Herunterfahren der Instanz oder die Wartung hat keine Auswirkungen auf den Vektorindex.

Indexwartung

Nachdem umfangreiche DML-Vorgänge auf der Basistabelle ausgeführt wurden, entspricht der Vektorindex, den Sie anhand der ursprünglichen Daten (zum Zeitpunkt der Indexerstellung) trainiert haben, möglicherweise nicht dem neuen Zustand. Das kann sich auf die Suchqualität auswirken.

Der Index besteht aus zwei Teilen:

  • Der Indexbaum. Dieser wird durch Training mit vorhandenen Daten erstellt. Sie bleibt während der Lebensdauer des Index unverändert.
  • Der Index verlässt die Seite. Sie enthalten alle Datenzeilen. Die Indexblätter sind immer synchron.

Der Indexbaum kann weniger effizient werden, nachdem eine große Anzahl von DML-Anweisungen ausgeführt wurde, da sich Zeilen von einem Blattknoten zu einem anderen bewegen. Wenn Sie den Indexbaum aktualisieren möchten, müssen Sie den Index neu erstellen.

Nicht unterstützte DDL-Vorgänge für Tabellen mit Vektorindexen

  • Tabellenvorgänge ändern, für die ein Kopieralgorithmus erforderlich ist
  • Tabellenvorgänge ändern, für die die Tabelle neu erstellt werden muss
  • Löschen oder ändern Sie den Primärschlüssel.
  • Verschieben Sie die Tabelle in einen allgemeinen Tablespace.

Vektorsuche

Cloud SQL bietet Vektordistanzfunktionen, mit denen Sie in Ihrer Instanz Ähnlichkeitssuchen mit ungefähren nächsten Nachbarn (ANN) und KNN-Vektoren (K-Nearest Neighbor) ausführen können. Wenn Sie eine Abfrage ausführen, wird der Abfragevektor mit den Vektoren in Ihrem Datensatz verglichen. Mithilfe von Entfernungsfunktionen wird die Entfernung zwischen den Vektoren anhand eines Ähnlichkeitsmaßes wie dem Kosinus berechnet. Die Vektoren mit der kürzesten Entfernung voneinander sind am ähnlichsten und werden in den Suchergebnissen zurückgegeben.

In Cloud SQL werden die folgenden Funktionen verwendet, um die Entfernung zwischen Vektoren bei Vektorsuchen zu messen, wenn Sie ANN- und KNN-Vektorsuchen ausführen:

  • Kosinus: ordnet den Vektoren einen Wert zu, der dem Kosinus des Winkels zwischen ihnen entspricht. Je kleiner der Wert, desto ähnlicher sind die Vektoren.
  • Punktprodukt: Hier wird der Kosinus des Winkels multipliziert mit dem Produkt der entsprechenden Vektormagnituden berechnet.
  • Quadratische L2-Distanz: Misst die euklidische Distanz zwischen zwei Vektoren, indem die quadrierte Distanz in jeder Dimension addiert wird.

Die KNN-Vektorsuche ist die bevorzugte Suchmethode, wenn Sie genaue Ergebnisse benötigen oder eine selektive Filterung hinzufügen möchten. Bei der KNN-Suche wird die Entfernung des Abfragevektors zu jeder Einbettung im Datensatz berechnet, um den nächsten Nachbarn zu finden. KNN-Suchen in Cloud SQL bieten eine perfekte Wiedererkennung. Bei KNN-Suchen wird kein Vektorindex verwendet. Sie sind daher eine gute Option, wenn Sie mit kleineren Datensätzen arbeiten.

Für eine KNN-Suche verwenden Sie die Funktion vector_distance, die zwei Vektoren als Eingabe nimmt: den Suchvektor (das, wonach Sie suchen) und einen Kandidatenvektor aus Ihrem Datensatz. Es wird die Entfernung zwischen diesen beiden Vektoren berechnet. Sie verwenden „vector_distance“ in einer SELECT-Anweisung. Weitere Informationen finden Sie unter KNN-Suche (K-Nearest-Neighbor).

Wenn Sie feststellen, dass die KNN-Leistung nicht zufriedenstellend ist, können Sie später einen Vektorindex erstellen und approx_distance in Ihrer Anwendung weiterhin für ANN-Suchen verwenden.

Eine ANN-Vektorsuche ist die bevorzugte Suchmethode, wenn es um die Effizienz von Abfragen geht. Sie beschleunigt Ähnlichkeitssuchen, indem der Abstand zwischen dem Abfragevektor und nur einem Teil der Vektoren in Ihrem Datensatz berechnet wird. Dazu ordnet Cloud SQL die Daten in Cluster oder Partitionen an und konzentriert die Suche dann auf die Cluster, die der Abfrage am nächsten sind. Für ANN-Suchen sind Vektorindexe erforderlich. Bei diesen Indexen wird die Suchgeschwindigkeit vor der vollständigen Wiedergabe priorisiert. In Cloud SQL wird der Indextyp TREE_SQ für ANN-Suchen verwendet.

Für eine ANN-Suche verwenden Sie die Funktion approx_distance mit einer Option zur Entfernungsmessung. Sie verwenden approx_distance in einer ORDER BY- oder SELECT-Liste und eine LIMIT-Klausel ist zulässig, um die Suchergebnisse einzuschränken. Sie können auch eine WHERE-Klausel hinzufügen, um die Suchergebnisse nachträglich zu filtern. Weitere Informationen finden Sie unter Ungefähre Nachbarschaft (Suchparameter).

In einigen Fällen greift die ANN-Suche auf eine KNN-Suche zurück. Weitere Informationen finden Sie unter Fallback-Status für ANN-Suchanfragen prüfen.

Voraussetzungen

In Cloud SQL müssen Sie Vektoreinbettungen mit dem Flag cloudsql_vector für die Instanz aktivieren, bevor Sie Vektoreinbettungen hinzufügen. Weitere Informationen finden Sie unter Vektoreinbettungen für Ihre Instanz aktivieren und deaktivieren.

Beschränkungen

Für Tabellen mit einer Spalte für die Vektor-Embedding-Funktion gelten die folgenden Einschränkungen:

  • Pro Tabelle kann nur eine Spalte für die Vektoreinbettung vorhanden sein.
  • Pro Tabelle kann nur ein Vektorindex vorhanden sein.
  • Eine Vektoreinbettung ist auf 16.000 Dimensionen beschränkt.
  • Die Spalte für die Vektor-Embeddings darf keine generierte Spalte sein.
  • Die Partitionierung auf Tabellenebene für Tabellen mit Spalten für Vektor-Embeddings wird nicht unterstützt.
  • Primärschlüssel mit den Datentypen BIT, BINARY, VARBINARY, JSON, BLOB oder TEXT sowie räumliche Daten werden für Vektorindexe nicht unterstützt. Zusammengesetzte Primärschlüssel dürfen auch keine dieser Typen enthalten.
  • Wenn ein Vektorindex vorhanden ist, können Sie dem Primärschlüssel der Basistabelle keine Einschränkung hinzufügen.
  • Wenn für eine Tabelle ein Vektorindex vorhanden ist, können einige DDL-Vorgänge nicht ausgeführt werden. Weitere Informationen finden Sie unter Nicht unterstützte DDL-Vorgänge für Tabellen mit Vektorindexen.

Für Vektorsuchanfragen gelten die folgenden Einschränkungen:

  • Die Funktion approx_distance kann nur in einer ORDER BY- oder SELECT-Liste verwendet werden.
  • Prädikate mit der Basistabelle können in der WHERE-Bedingung in Kombination mit approx_distance-Ausdrücken in der Liste ORDER BY oder SELECT verwendet werden. Die WHERE-Bedingungsprädikate werden nach der Auswertung der approx_distance-Vektorfunktionen ausgewertet.

Best Practices für die Arbeit mit Vektorindexen

Dieser Abschnitt enthält Best Practices für die Arbeit mit Vektorindexen. Jede Arbeitslast ist anders und Sie müssen sie möglicherweise entsprechend anpassen.

  • Nach größeren DML-Vorgängen empfiehlt es sich, den Index neu zu erstellen.
  • Im Allgemeinen ist es in Ordnung, wenn Cloud SQL die Anzahl der zu verwendenden Übergänge berechnet. Wenn Sie die Anzahl der Blätter für einen Anwendungsfall angeben möchten, sollten Sie für die beste Wiedererkennung mindestens 100 Vektoren pro Blatt verwenden.

Nächste Schritte