Vektordaten bilden das Herzstück moderner KI-gestützter Funktionen: semantische Suche, Empfehlungsmaschinen, RAG-Pipelines (Retrieval-Augmented Generation) und vieles mehr. Da 4D.Vector Felder in 4D-Datenbanken eine zentrale Rolle einnehmen, ist die Fähigkeit, sie effizient zu indizieren, unerlässlich, um Abfragen auch bei wachsenden Datensätzen schnell zu halten. Dieser Beitrag erläutert, wie die Vektorindizierung in 4D funktioniert, welche Algorithmen unterstützt werden und wie man Vektorindizes programmgesteuert verwaltet.
Die Abfrage eines Vektorfeldes bedeutet in der Regel, die Datensätze zu finden, deren Vektoren einem Referenzvektor unter Verwendung einer Ähnlichkeitsmetrik „am nächsten“ liegen. Ohne Index muss 4D jeden Vektor in der Tabelle durchgehen und den Abstand nacheinander berechnen, was zwar korrekt, aber bei wachsender Tabelle langsam ist.
Mit einem Vektorindex verwendet 4D einen speziell für die Vektorähnlichkeitssuche entwickelten Algorithmus, der die Abfragezeit drastisch verkürzt und gleichzeitig dieselben Ergebnisse liefert wie eine Abfrage ohne Index. Mit anderen Worten:
- Die Korrektheit bleibt gewahrt: Indizierte und nicht indizierte Abfragen liefern identische Ergebnismengen.
- Die Leistung verbessert sich: Abfragen mit Index sind etwa achtmal schneller als solche ohne Index.
Unterstützte Vektorindex-Typen
4D führt zusätzlich zum bestehenden „Standard“-Index drei spezielle Indextypen für 4D.Vector-Felder ein:
| Konstant | Anwendungsfall |
|---|---|
Vektor-Kosinus-Index |
Ähnlichkeit basierend auf dem Winkel zwischen Vektoren |
Vektor-Skalarprodukt-Index |
Ähnlichkeit basierend auf dem Skalarprodukt |
Euklidischer Vektorindex |
Ähnlichkeit basierend auf dem geradlinigen Abstand |
Diese sind verfügbar über CREATE INDEX und SET INDEX, und jeder Index-Typ kann unabhängig ausgewählt werden, sodass ein einzelnes Vektorfeld gleichzeitig mehrere Indizes aufweisen kann (z. B. sowohl Kosinus- als auch euklidischen Index).
Benutzeroberfläche
Vektorfelder und ihre Indizes sind vollständig in den Struktur-Editor und die zugehörigen Dialogfelder integriert:
- Felder vom Typ „4D “ . „ Vector “-Felder werden sowohl im Struktur-Editor als auch im Inspektor mit einem speziellen Vektorsymbol
angezeigt.
- Das Indexlistenfenster zeigt Vektorindizes neben den regulären Indizes an.

- Im Inspektor, im Kontextmenü des Feldes und im Fenster „Index erstellen/bearbeiten“ werden für Vektorfelder nur die Indizes „Cosinus“, „Skalarprodukt“, „Euklidisch“ und „Automatisch“ angeboten, die jeweils unabhängig voneinander ausgewählt werden können. Die Auswahl eines anderen Index-Typs löst einen Fehler aus.

Indizes konsistent halten
4D sorgt dafür, dass Vektorindizes mit den Daten konsistent bleiben:
- Das Aktualisieren eines Vektors über `save()` (oder einen beliebigen anderen Befehl) aktualisiert automatisch den zugehörigen Index.
- Das Löschen eines Vektors über `drop()` (oder einen anderen Befehl) aktualisiert automatisch den zugehörigen Index.
Beachten Sie Folgendes:
- Zusammengesetzte Indizes dürfen kein Vektorfeld enthalten.
-
Aktualisierungen von Vektorindizes werden derzeit innerhalb von Transaktionen nicht unterstützt.
Operativer Support
Vektorindizes werden in den Wartungs- und Verwaltungstools von 4D als vollwertige Elemente behandelt:
- Anhalten / Fortsetzen: PAUSE INDEXES und RESUME INDEXES arbeiten Sie mit Vektorindizes genau wie mit jedem anderen Index.
- Speicherung: 4D erstellt im Verzeichnis „DATA“ einen Ordner mit dem Namen <Projektname>.4DVI, um Vektorindizes zu speichern.
- Neuindizierung: Eine beim Neustart ausgelöste Neuindizierung indiziert auch Vektorindizes neu.
- Überprüfung und Reparatur: Das Maintenance and Security Center (MSC) bezieht Vektorindizes sowohl in seine Überprüfungs- als auch in seine Reparaturvorgänge ein.
- Sicherung: Wenn ein Index in einer separaten Datei gespeichert ist, wird er in die Standard-Sicherungskonfiguration einbezogen.
Vektorpräzision
4D.Vector.new() akzeptiert nun einen Präzisionsparameter, der 32 oder 64 Bit betragen kann (Konstanten „mk single precision “ und „ mk double precision “). Standardmäßig werden neue Vektoren mit 32-Bit-Präzision (4 Byte pro Komponente) erstellt. Dies reduziert den Speicherbedarf im Vergleich zu 64-Bit-Vektoren um die Hälfte, während gleichzeitig genügend Genauigkeit für Ähnlichkeits- und Abstandsberechnungen erhalten bleibt, weshalb dies für die meisten Anwendungsfälle die empfohlene Standardeinstellung ist.
$vector32:=4D.Vector.new([1; 2; 3])
// $vector32.precision=32
$vector64:=4D.Vector.new([1; 2; 3]; mk double precision)
// $vector64.precision=64
Hinweis zur Kompatibilität: Diese Änderung beeinträchtigt die Kompatibilität mit bestehendem Code, der auf der bisherigen 64-Bit-Standardeinstellung basierte. Um die 64-Bit-Genauigkeit beizubehalten, übergeben Sie explizit „ mk double precision “.
Fazit
Die Vektorindizierung in 4D bietet produktionsreife Leistung für die Ähnlichkeitssuche direkt in der Datenbank-Engine, ohne dabei auf Konsistenz oder Benutzerfreundlichkeit zu verzichten. Ganz gleich, ob Sie ein Empfehlungssystem, eine semantische Suchfunktion oder eine RAG-Pipeline entwickeln – Sie können nun:
- die richtige Ähnlichkeitsmetrik (Kosinus, Punkt oder euklidisch) für Ihren Anwendungsfall auswählen.
- Vektorindizes per Code oder über die Benutzeroberfläche erstellen und verwalten.
- Sich darauf verlassen, dass 4D die Indizes bei Datenänderungen automatisch synchronisiert.
- Vektorindizes mit denselben Tools überprüfen, anhalten, verifizieren und reparieren, die Sie bereits für reguläre Indizes verwenden.
Wie immer liefern indizierte und nicht indizierte Abfragen identische Ergebnisse; der Index dient ausschließlich der Leistungsoptimierung und bewirkt niemals eine Verhaltensänderung.
Für diesen Beitrag sind derzeit keine Kommentare verfügbar.