Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
Verwenden von Vektorindizes in DynamoDB
Vektorindizes sind eine Art von Index in Amazon DynamoDB, der die Ähnlichkeitssuche nach Vektoreinbettungen ermöglicht, die in Ihren Tabellenelementen gespeichert sind. Im Gegensatz zu globalen sekundären Indizes und lokalen sekundären Indizes, die exakte Treffer- und Bereichsabfragen mithilfe Query von Scan UND-Operationen unterstützen, verwenden Vektorindizes die Suche nach Näherem nächsten Nachbarn (ANN), um Elemente zu finden, deren Vektoren einem von Ihnen angegebenen Abfragevektor am ähnlichsten sind. Sie führen diese Ähnlichkeitssuchen durch, indem Sie die SearchVectors API aufrufen, die nach einem Ähnlichkeitswert geordnet die ähnlichsten Elemente zurückgibt.
Mit Vektorindizes können Sie Vektoreinbettungen zusammen mit Ihren Betriebsdaten in DynamoDB speichern und Ähnlichkeitssuchen durchführen, ohne eine separate Vektordatenbank zu benötigen. Dadurch entfallen komplexe Datenreplikations-Pipelines zwischen DynamoDB und externen Vektorspeichern.
Vektorindizes werden über dieselben CreateTable UpdateTable APIs verwaltet, die Sie bereits verwenden, mit dem VectorIndexes Parameter (forCreateTable) und dem VectorIndexUpdates Parameter (for). UpdateTable
Themen
Anwendungsfälle für Vektorindizes
Vektorindizes unterstützen eine Vielzahl von Anwendungsfällen, bei denen ähnliche Elemente auf der Grundlage von Vektordarstellungen gefunden werden müssen:
-
Semantische Suche — Entwickeln Sie Suchmaschinen, die eher die Bedeutung von Suchanfragen verstehen als passende Schlüsselwörter. Speichern Sie Texteinbettungen, die von Modellen für maschinelles Lernen generiert wurden, und finden Sie semantisch ähnliche Inhalte.
-
Retrieval Augmented Generation (RAG) — Verbinden Sie große Sprachmodelle (LLMs) mit relevanten Wissensdatenbanken. Speichern Sie Dokumenteinbettungen in DynamoDB und rufen Sie den relevantesten Kontext für LLM-Eingabeaufforderungen ab.
-
Empfehlungssysteme — Finden Sie ähnliche Produkte, Inhalte oder Benutzer anhand von Vektordarstellungen ihrer Funktionen oder ihres Verhaltens.
-
Speicher für KI-Agenten — Speichern Sie Einbettungen von Konversationen, um den Kontext zwischen den Sitzungen aufrechtzuerhalten und die Leistung der KI-Agenten zu verbessern.
-
Erkennung von Anomalien und Betrug — Vergleichen Sie neue Ereignisse mit Einbettungen von bekanntermaßen normalem Verhalten, um Ausreißer wie ungewöhnliche Transaktionen oder betrügerische Aktivitäten zu erkennen.
Vergleich von Vektorindizes mit Sekundärindizes
In der folgenden Tabelle werden Vektorindizes mit globalen Sekundärindizes und lokalen Sekundärindizes verglichen.
| Feature | Vektorindex | Globaler sekundärer Index | Lokaler sekundärer Index |
|---|---|---|---|
| Abfragetyp | Ähnlichkeitssuche | Exakte Übereinstimmung und Reichweite | Exakte Übereinstimmung und Reichweite |
| API lesen | SearchVectors |
Query, Scan |
Query, Scan |
| Schema | Vektorattribut plus optional SearchSchema (Partitionsschlüssel, Inline-Filter) | Partitionsschlüssel und optionale Sortierschlüssel | Derselbe Partitionsschlüssel, anderer Sortierschlüssel |
| Maximum pro Tabelle | 5 | 20 | 5 |
| Kapazitätsmodus | On-demand nur | On-demand oder bereitgestellt | On-demand oder bereitgestellt |
Distanzfunktionen
Wenn Sie einen Vektorindex erstellen, wählen Sie eine Distanzfunktion. Die Distanzfunktion bestimmt, wie DynamoDB die Ähnlichkeit zwischen Vektoren misst. Ihre Auswahl wirkt sich auf die Ranking-Qualität und die Suchgenauigkeit aus. Amazon DynamoDB unterstützt drei Distanzfunktionen.
| Entfernungsfunktion | Interpretation der Ergebnisse | Das beste Spiel |
|---|---|---|
COSINE |
Niedrigere Werte deuten auf eine größere Ähnlichkeit hin. Misst den Kosinusabstand (1 minus Kosinusähnlichkeit) zwischen zwei Vektoren. Die Werte reichen von 0 (identische Richtung) bis 2 (entgegengesetzte Richtung). | Kleinste Punktzahlen |
DOT_PRODUCT |
Höhere Werte deuten auf eine größere Ähnlichkeit hin. Misst das Punktprodukt zwischen zwei Vektoren. | Die höchsten Punktzahlen |
EUCLIDEAN |
Niedrigere Werte deuten auf eine größere Ähnlichkeit hin. Misst den geradlinigen Abstand zwischen zwei Vektoren. | Kleinste Werte |
Informationen zum Vergleich der Rangfolge von Entfernungsfunktionen für denselben Abfragevektor finden Sie unterWie ordnen Entfernungsfunktionen Ergebnisse.
Die folgende Anleitung hilft Ihnen bei der Auswahl der richtigen Entfernungsfunktion für Ihre Arbeitslast.
COSINE-
Vergleicht die Richtung und ignoriert die Größe. Wird
COSINEfür semantische Ähnlichkeit mit Modellen zur Texteinbettung verwendet. Diese Modelle kodieren die Bedeutung in ihrer Richtung, und die Vektorlänge kann variieren. Beispiele hierfür sind Amazon Titan Text Embeddings und. Cohere EmbedCOSINEeignet sich gut für die folgenden Anwendungsfälle:-
Semantische Suche in Produktbeschreibungen oder Dokumenten
-
Retrieval Augmented Generation (RAG)
-
FAQ-Matching
COSINEist die sichere Standardeinstellung, wenn Sie sich nicht sicher sind, welche Funktion Sie verwenden sollen. -
DOT_PRODUCT-
DOT_PRODUCTreagiert sowohl auf die Richtung als auch auf die Größe (die Länge eines Vektors). Wählen Sie ausDOT_PRODUCT, wann in der Dokumentation Ihres Einbettungsmodells das Punktprodukt als Ähnlichkeitsmaß empfohlen wird oder wann die Vektorlänge die Rangfolge beeinflussen soll.DOT_PRODUCTeignet sich gut für die folgenden Anwendungsfälle:-
Empfehlungssysteme, die Beliebtheits- oder Vertrauenswerte verwenden, um Einbettungen zu skalieren und das Ranking zu beeinflussen
-
Modelle, in deren Dokumentation ausdrücklich das Punktprodukt als Ähnlichkeitsmaß empfohlen wird
-
Magnitude-sensitive Rangfolge, bei der die Vektorlänge ein aussagekräftiges Signal liefert
Wir empfehlen, Ihre Einbettungen auf Längeneinheiten zu normalisieren. Bei der Normalisierung ergeben sich die
DOT_PRODUCTRangfolgen auf die gleiche Weise wie.COSINEÜberspringen Sie die Normalisierung nur, wenn Sie möchten, dass sich die Größe auf das Ranking auswirkt.Anwendungsbeispiel: Ein Produktempfehlungssystem, bei dem Sie jede Produkteinbettung anhand ihres Beliebtheitswerts skalieren. Beliebtere Produkte erhalten längere Vektoren und rangieren in den Suchergebnissen höher.
-
EUCLIDEAN-
Misst den geradlinigen Abstand zwischen zwei Vektoren.
EUCLIDEANreagiert empfindlich auf die Größe. Verwenden Sie es, wenn es auf die absolute Position im Einbettungsbereich ankommt.EUCLIDEANeignet sich gut für die folgenden Anwendungsfälle:-
Bild- oder Audioeinbettungen, bei denen es auf räumliche Entfernung ankommt
-
Near-duplicate Erkennung
-
Clustering und Erkennung von Anomalien
Beispiel für einen Anwendungsfall: Auffinden nahezu doppelter Bilder anhand von Bildeinbettungen.
-
Wählen Sie eine Distanzfunktion, die zu Ihrem Einbettungsmodell passt
Wenn Sie sich nicht sicher sind, welche Funktion Sie verwenden sollen, lesen Sie in der Dokumentation Ihres Einbettungsmodells nach. Bestätigen Sie Ihre Wahl anhand eines repräsentativen Datensatzes. Sie können die Entfernungsfunktion nach der Indexerstellung nicht ändern. Weitere Informationen finden Sie unter Passen Sie die Distanzfunktion an Ihre Einbettungen an.
Wie ordnen Entfernungsfunktionen Ergebnisse
Die Entfernungsfunktion, die Sie beim Erstellen des Indexes auswählen, bestimmt sowohl den Score Wert als auch die Sortierreihenfolge der Ergebnisse. Dieselbe Abfrage kann dieselben Elemente unter verschiedenen Distanzfunktionen unterschiedlich einordnen. Im folgenden Beispiel wird der Abfrage-Vektor [1, 0, 0, 0] gegen vier gespeicherte Vektoren verwendet.
| Gespeicherter Vektor | COSINE(niedriger ist ähnlicher) |
EUCLIDEAN(niedriger ist ähnlicher) |
DOT_PRODUCT(höher ist ähnlicher) |
|---|---|---|---|
[1, 0, 0, 0] |
0.0 | 0.0 | 1,0 |
[10, 0, 0, 0] |
0.0 | 9.0 | 10.0 |
[0.7071, 0.7071, 0, 0] |
0,29 | 0,77 | 0,71 |
[-1, 0, 0, 0] |
2.0 | 2.0 | -1,0 |
Zwei Verhaltensweisen sind bemerkenswert:
-
COSINEignoriert die Größe. Es bewertet[1, 0, 0, 0]und[10, 0, 0, 0]identisch (beide0.0), weil sie in dieselbe Richtung zeigen.EUCLIDEANrangiert bei derselben Abfrage an[10, 0, 0, 0]letzter Stelle, da sie die absolute Entfernung misst, die mit der Größe eines Vektors zunimmt. -
DOT_PRODUCTErgebnisse können negativ sein. Ein Vektor, der in die entgegengesetzte Richtung ([-1, 0, 0, 0]) zeigt, wird bewertet-1.0. Gehen Sie nicht davon aus, dass die Ergebnisse immer nicht negativ sind, wenn Sie Ergebnisse sortieren oder Schwellenwerte auf Ergebnisse anwenden.
SearchSchema
Wenn Sie einen Vektorindex erstellen, können Sie optional einen definieren SearchSchema , der Vektorindex-Partitionsschlüssel und Inline-Filterattribute angibt.
HASH(Partitionsschlüssel für den Vektorindex)-
Ein Vektorindex-Partitionsschlüssel partitioniert Ihre Indexdaten für eine unabhängige Skalierung. Wenn Sie einen Vektorindex-Partitionsschlüssel angeben, werden Elemente mit demselben Partitionsschlüsselwert zusammen gespeichert, sodass das System nur die relevanten Daten durchsuchen kann. Bei hoher Skalierung verringert dies die Suchlatenz, da bei der Suche nur eine Teilmenge des Vektorraums und nicht der gesamte Index untersucht wird. Verwenden Sie Attribute mit niedriger bis mittlerer Kardinalität, wie z. B. oder.
CategoryCountrySie können höchstens einen Vektorindex-Partitionsschlüssel angeben.Wenn Sie einen Vektorindex-Partitionsschlüssel in der definieren SearchSchema, müssen Sie seinen Wert in der angeben
SearchConditionExpression, wenn Sie aufrufenSearchVectors.Verwenden Sie einen Partitionsschlüssel, um den Suchdurchsatz zu skalieren
Definieren Sie einen Vektorindex-Partitionsschlüssel, wenn Sie einen großen Index oder ein hohes Suchvolumen erwarten. Da jeder
SearchVectorsAufruf auf einen einzelnen Partitionsschlüsselwert beschränkt ist, können Sie durch die Verteilung Ihrer Daten auf viele Partitionsschlüsselwerte mehr Suchvorgänge pro Sekunde ausführen und die Datenmenge reduzieren, die bei jeder Suche untersucht wird. Siehe Wählen Sie einen Partitionsschlüssel, der Ihren Abfragemustern entspricht. INLINE_FILTER-
Inline-Filterattribute werden in den Vektorindex projiziert, sodass DynamoDB während der Suche auf der Speicherebene filtern kann.
Inline-Filter unterstützen den Gleichheitsoperator (
=) in.SearchConditionExpressionVergleichs-, Range- und Set-Mitgliedschaftsoperatoren (<><,,<=,>,>=,IN) sind noch nicht verfügbar. Im Gegensatz zu Partitionsschlüsseln für Vektorindizes sind Inline-Filter bei der Suche optional.
Sie können einen Vektorindex erstellen, ohne einen Partitionsschlüssel in der zu definieren SearchSchema. In diesem Fall durchsucht jeder SearchVectors Aufruf den gesamten Index. Das ist einfacher, weil Sie keinen benötigenSearchConditionExpression, aber er skaliert nicht horizontal. Wenn Ihr Index wächst, werden bei jeder Suche mehr Daten untersucht, was die Latenz und die Kosten erhöht. Wenn Ihre Arbeitslast einen hohen Durchsatz erfordert oder Ihr Index eine große Anzahl von Vektoren enthält, definieren Sie einen Partitionsschlüssel, um Daten auf Partitionen zu verteilen und unabhängig zu skalieren. Siehe Wählen Sie einen Partitionsschlüssel, der Ihren Abfragemustern entspricht.
Projektionen
Wie globale sekundäre Indizes unterstützen Vektorindizes Prognosen, die steuern, welche Attribute aus der Basistabelle in den Index kopiert werden. Sie geben die Projektion an, wenn Sie den Vektorindex erstellen.
-
KEYS_ONLY— Nur die Primärschlüsselattribute der Basistabelle, das Vektorattribut und alle darin definierten Inline-Filterattribute SearchSchema werden in den Index projiziert. -
INCLUDE— Zusätzlich zu denKEYS_ONLYAttributen geben Sie weitere Attribute an, die keine Schlüsselattribute für das Projekt sind. Sie können den Satz der enthaltenen Attribute nicht mehr ändern, nachdem der Vektorindex erstellt wurde. Um einen anderen Satz von Attributen zu projizieren, löschen Sie den Index und erstellen Sie ihn mit der gewünschten Projektion neu. -
ALL— Alle Attribute aus der Basistabelle werden in den Index projiziert.
Die Projektion begrenzt, was zurückgegeben SearchVectors werden kann
Attribute, die nicht in den Vektorindex projiziert werden, können in SearchVectors Antworten nicht zurückgegeben werden. Wenn Sie bestimmte Attribute in den Suchergebnissen benötigen, nehmen Sie diese in die Projektion auf oder verwenden Sie sieALL.
Verwenden von Vektorindizes mit anderen DynamoDB-Funktionen
- DynamoDB Streams
-
Sie können DynamoDB-Streams für eine Tabelle mit einem Vektorindex aktivieren, entweder mit dem
StreamSpecificationParameter beim Erstellen der Tabelle oder über.UpdateTableDer Stream erfasst Änderungen an der Basistabelle auf Elementebene und arbeitet unabhängig vom Vektorindex. - Globale Tabellen
-
Sie können einer globalen Tabelle einen Vektorindex hinzufügen, und Sie können eine Tabelle mit einem Vektorindex in eine globale Tabelle konvertieren, indem Sie ein Replikat mit hinzufügen.
UpdateTableDie Vektorindexdefinition, einschließlich ihrer Dimensionen, Entfernungsfunktion und Projektion SearchSchema, wird automatisch in jede neue Replikatregion repliziert. Sie erstellen den Vektorindex nicht separat in der Replikatregion.Elemente, die Sie in eine beliebige Replikatregion schreiben, werden in die anderen Regionen repliziert und dort indexiert. Nach Abschluss der Replikation wird
SearchVectorsin jeder Region nach demselben Satz von Vektoren gesucht. Da bei der Vektorsuche der ungefähre nächste Nachbar (ANN) verwendet wird, können separate Suchen in verschiedenen Regionen zu leicht unterschiedlichen Ergebnissen oder einer anderen Reihenfolge für dieselbe Abfrage führen, selbst wenn es sich um identische Daten handelt. Die Replikation und Indizierung von Vektoren in den anderen Regionen erfolgen asynchron, selbst bei globalen MRSC-Tabellen (Multiregion Strong Consistency). Ein Vektor, den Sie gerade in eine Region geschrieben haben, erscheint in einer anderen Region möglicherweise noch nicht in denSearchVectorsErgebnissen, bis die Änderung übernommen wurde.On-demand Kapazität erforderlich
Vektorindizes benötigen den On-Demand-Kapazitätsmodus, den auch globale Tabellen unterstützen. Erstellen Sie den Vektorindex und das Replikat in einer Tabelle, die bereits On-Demand-Kapazität nutzt.
- Point-in-time Wiederherstellung (PITR) und Backups
-
Wenn Sie eine Tabelle aus einer Point-in-Time-Wiederherstellung oder einer On-Demand-Backup wiederherstellen, stellt DynamoDB die Basistabellendaten und die Vektorindexdefinition wieder her. Wie bei globalen sekundären Indizes erstellt DynamoDB den Vektorindex aus den wiederhergestellten Basistabellendaten neu, anstatt ihn Byte für Byte zu kopieren. Daher durchläuft der Index ein Backfilling, bevor er für die Suche bereit ist. Warten Sie, bis der wiederhergestellte Index auf dem
IndexStatuswiederhergestellten Index stehtACTIVEundBackfillingistfalse, bevor Sie ihn ausführen.SearchVectors - Time to Live (TTL)
-
Sie können DynamoDB TTL für eine Tabelle verwenden, die einen Vektorindex hat. Wenn TTL ein abgelaufenes Element aus der Basistabelle löscht, entfernt DynamoDB den entsprechenden Eintrag aus dem Vektorindex, genauso wie bei einem manuellen Löschen. Abgelaufene Elemente erscheinen daher nicht mehr in den
SearchVectorsErgebnissen, nachdem der Löschvorgang auf den Index übertragen wurde. - Import und Export von Tabellendaten
-
Sie können eine Tabelle mit einem Vektorindex nach Amazon S3 exportieren. Der Export enthält die Elemente der Basistabelle, einschließlich der darauf gespeicherten Vektorattribute. Wenn Sie Daten aus Amazon S3 in eine neue Tabelle importieren, definieren Sie den Vektorindex in der Importanforderung auf die gleiche Weise wie mit
CreateTable. DynamoDB indexiert die importierten Elemente, während sie geschrieben werden, und der Vektorindex wird nach Abschluss des Imports verfügbar. - DAX
-
DynamoDB Accelerator (DAX) unterstützt den
SearchVectorsVorgang nicht. Senden SieSearchVectorsAnfragen direkt an DynamoDB, auch wenn Ihre Anwendung DAX für andere Lesevorgänge verwendet. Das DAX-Caching von Lesevorgängen in Basistabellen wird durch das Vorhandensein eines Vektorindexes nicht beeinflusst.