Perconas Datenbank 9.7 fügt Vektor-Distanzberechnung in SQL hinzu
Perconas Open-Source-Datenbankserver Version 9.7.2-2 ermöglicht Entwicklern nun, Vektorähnlichkeit direkt in SQL zu berechnen. Die neuen Funktionen DISTANCE() und VECTOR_DISTANCE(), angekündigt von Catalin Besleaga am 21. September 2026, unterstützen die Metriken COSINE, EUCLIDEAN, EUCLIDEAN_SQUARED, MANHATTAN und DOT. Die nativen Distanzfunktionen des Upstream-Datenbankservers sind nur in HeatWave verfügbar, einem verwalteten Cloud-Datenbankdienst auf der Infrastruktur eines großen Enterprise-Cloud-Anbieters, und decken nur drei Metriken ab (COSINE, DOT, EUCLIDEAN). Percona bringt dieselbe Fähigkeit zu jedem, der diesen Open-Source-Datenbankserver auf einer beliebigen unterstützten Plattform betreibt. Die Funktion wurde in einem Percona-Blogbeitrag von Catalin Besleaga beschrieben und von Dennis Kittrell und Peter Zaitsev geprüft.
Ein Vektor ist eine Liste fester Länge von Zahlen, oft als Embedding bezeichnet, die von einem maschinellen Lernmodell erzeugt wird, um etwas wie Text, ein Bild, ein Produkt oder eine Benutzerpräferenz darzustellen. Ähnliche Dinge erhalten numerisch nahe Vektoren, sodass die Berechnung des Abstands zwischen zwei Vektoren das Ranking oder Filtern nach Ähnlichkeit ermöglicht. Dieser Open-Source-Datenbankserver Version 9.7 unterstützt bereits den VECTOR-Datentyp sowie die Funktionen TO_VECTOR() und FROM_VECTOR() zum Speichern von Embeddings. Eine Distanzmetrik ist eine mathematische Funktion, die zwei Vektoren in eine einzelne Zahl umwandelt, die die Ähnlichkeit beschreibt. Diese Version unterstützt fünf Metriken. EUCLIDEAN (L2) ist der geradlinige geometrische Abstand und eignet sich gut, wenn die Größe eine Rolle spielt. EUCLIDEAN_SQUARED überspringt die Quadratwurzel, behält dasselbe Ranking bei, läuft aber schneller für Vergleiche und ORDER BY-Klauseln, wenn nur die Reihenfolge zählt. MANHATTAN (L1) ist der gitterartige Abstand, wie die Taxidistanz auf einem Stadtplan, und kann in einigen Anwendungen robuster gegenüber Ausreißern sein. COSINE-Ähnlichkeit misst den Winkel zwischen zwei Vektoren; die Cosinus-Distanz wird als 1 minus Cosinus-Ähnlichkeit berechnet, sodass kleinere Werte ähnlicher bedeuten. DOT ist das rohe Skalarprodukt sum(a[i]*b[i]), das von Modellen verwendet wird, die speziell für Skalarprodukt-Ähnlichkeit trainiert wurden; die Industrie multipliziert üblicherweise mit -1, um die Skala umzudrehen, sodass kleinere Werte ähnlicher bedeuten, ausgerichtet an den anderen Metriken.
Die Funktionssignatur lautet DISTANCE(vector1, vector2, metric). Die beiden Vektorargumente können Werte des VECTOR-Datentyps oder binäre Zeichenfolgenliterale sein, die mit TO_VECTOR() erstellt wurden. Die Metrik muss ein festes Literal sein, Groß-/Kleinschreibung ignorierend, keine Spalte oder Ausdruck. VECTOR_DISTANCE() ist ein Alias mit identischem Verhalten. Die Funktion gibt einen DOUBLE zurück. Alle Dimensionen müssen übereinstimmen; wenn eine Eingabe NULL ist, ist das Ergebnis NULL. Um die Metrik an das Modell anzupassen, werden die meisten modernen Embedding-Modelle wie OpenAI und Cohere mit COSINE-Ähnlichkeit trainiert, verwenden Sie also COSINE. Wenn die Größe Bedeutung trägt, verwenden Sie EUCLIDEAN oder EUCLIDEAN_SQUARED; im Zweifelsfall prüfen Sie die Modelldokumentation. Ein schrittweises Beispiel erstellt eine Produkttabelle mit einer VECTOR(1536)-Spalte, fügt Zeilen mit TO_VECTOR('[0.1, 0.2, 0.3, ..., 0.384]') ein und fragt die Top-5-Produkte mit DISTANCE(embedding, TO_VECTOR('[0.12, 0.22, 0.32, ..., 0.382]'), 'EUCLIDEAN') ORDER BY similarity_score LIMIT 5 ab. Die Beispielergebnisse zeigen Produkt B zuerst mit 0.5432109, dann Produkt A mit 0.9654321, dann Produkt C mit 0.9876543, sortiert nach höchster Ähnlichkeit zuerst.
Unter der Haube verwendet die Implementierung SIMD (Single Instruction, Multiple Data), eine CPU-Fähigkeit, die dieselbe Arithmetik auf viele Zahlen gleichzeitig anwendet. Distanzberechnungen über Hunderte von Dimensionen sind genau die repetitive Arithmetik, die SIMD beschleunigt. Percona erkennt die CPU-Fähigkeiten beim Start und wählt die beste verfügbare SIMD-Stufe aus, ohne Neukompilierung pro Zielarchitektur. Die Stufen sind SSE4.2 oder NEON mit 128 Bit (etwa 2- bis 3-fache Beschleunigung gegenüber skalar), AVX2 mit 256 Bit (etwa 4- bis 6-fach), AVX-512F mit 512 Bit (etwa 8- bis 12-fach), SVE2 auf ARM (skalierbares SIMD, das sich an die CPU-Vektorbreite anpasst) und ein skalarer Fallback, der überall funktioniert. Dimensionsabhängige Kernel-Auswahl bedeutet, dass Distanzberechnungen für kleine Vektoren mit weniger als 16 Dimensionen die schmalere 128-Bit-Stufe verwenden, weil der Overhead beim Einrichten größerer SIMD-Register den Nutzen überwiegt; größere Vektoren verwenden automatisch die breiteste verfügbare Stufe. Unausgerichtete Ladevorgänge werden absichtlich verwendet: VECTOR-Spaltendaten sind nicht garantiert cache-line-ausgerichtet und sollten keine Ausrichtung erfordern. Moderne CPUs haben identischen Durchsatz für ausgerichtete und unausgerichtete Ladevorgänge, wenn Daten im Cache sind, daher verwenden alle SIMD-Kernel Intrinsics für unausgerichtete Ladevorgänge, um Fehler bei falsch ausgerichteten Eingaben zu vermeiden, ohne Leistung zu opfern.
DISTANCE() ist eine skalare Funktion, die den Abstand zwischen zwei Vektoren berechnet und eine einzelne Zahl zurückgibt. Ohne einen Approximate-Nearest-Neighbor-Index (ANN) ist eine Abfrage wie ORDER BY DISTANCE(...) LIMIT k über eine große Tabelle ein Full Table Scan: Die Datenbank ruft die Distanzfunktion für jede Zeile auf und sortiert dann. Es ist korrekt und SIMD-beschleunigt pro Zeile, skaliert aber als O(n), nicht O(log n). Der natürliche nächste Schritt ist ANN-Indizierung, wie HNSW (Hierarchical Navigable Small World) oder IVF (Inverted File mit Verfeinerung), die den Suchraum einschränken und Näherungsergebnisse viel schneller liefern. Diese Richtung ist auf der Roadmap. Während ANN-Indizierung Geschwindigkeit liefert, beruht sie auf Näherungsergebnissen; sollte eine Anwendung exakte Präzision statt Schätzungen benötigen, ist DISTANCE() in diesem Open-Source-Datenbankserver Version 9.7.2-2 verfügbar.
Percona lädt Benutzer ein, die Funktion auszuprobieren und Feedback zu teilen: Melden Sie Fehler oder Funktionsideen auf JIRA, beteiligen Sie sich an der Diskussion im Percona-Community-Forum oder wenden Sie sich mit Fragen zu Nutzung oder Leistung an uns. Das Feedback wird die Roadmap prägen, insbesondere Anwendungsfälle wie spezifische ANN-Indexstrategien, Integrationen von Embedding-Modellen und Leistungsoptimierung. Für Teams, die diese Open-Source-Datenbank in Produktion betreiben, kann ein verwalteter Datenbankdienst wie AEU Data automatisierte Backups, verschlüsselten Speicher, Überwachung und Hochverfügbarkeit übernehmen, sodass sie sich auf Abfrage- und Indexdesign einschließlich der neuen Distanzfunktionen konzentrieren können.