Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Le migliori pratiche per gli indici vettoriali
I seguenti consigli ti aiutano a progettare indici vettoriali accurati, performanti e convenienti.
Scegliete innanzitutto il modello e le dimensioni di incorporamento
Il modello di incorporamento che utilizzi determina il numero di dimensioni dei tuoi vettori e lo imposti Dimensions quando crei l'indice. Non è possibile modificare il numero di dimensioni dopo la creazione. Scegliete un modello di incorporamento prima di creare l'indice e utilizzate lo stesso modello per generare sia i vettori memorizzati che i vettori di interrogazione. Un numero inferiore di dimensioni riduce i costi di ricerca, scrittura e archiviazione, ma i modelli di dimensioni superiori possono acquisire più dettagli semantici. Scegliete il numero minimo di dimensioni che soddisfi i vostri requisiti di pertinenza. Per informazioni, consulta Generazione di incorporamenti vettoriali.
Abbina la funzione di distanza ai tuoi incorporamenti
Scegli la funzione di distanza che corrisponde al modo in cui il tuo modello di incorporamento rappresenta la somiglianza. COSINEconfronta la direzione e ignora la grandezza, il che si adatta alla maggior parte dei modelli di incorporamento del testo. EUCLIDEANmisura la distanza assoluta ed è sensibile alla magnitudine. DOT_PRODUCTè sensibile anche alla magnitudine. Se lo usi, normalizza gli incorporamenti alla lunghezza unitaria in modo che i punteggi riflettano la direzione anziché la lunghezza del vettore. Non puoi modificare la funzione di distanza dopo aver creato l'indice, quindi convalida prima la tua scelta rispetto a un set di dati rappresentativo. Per informazioni, consulta In che modo le funzioni di distanza classificano i risultati.
Scegli una chiave di partizione che corrisponda ai tuoi schemi di interrogazione
Una chiave di partizione limita ogni SearchVectors chiamata alla porzione dell'indice vettoriale che appartiene a un singolo valore della chiave di partizione. La chiamata non esegue la ricerca nell'intero indice. La ricerca di meno dati riduce i costi, può migliorare la latenza e il richiamo e ridimensiona orizzontalmente il throughput tra i valori delle chiavi di partizione.
È necessario fornire il valore della chiave di partizione in ogni ricerca. SearchConditionExpression Ogni ricerca è limitata a esattamente un valore di chiave di partizione. Scegliete una chiave di partizione che corrisponda ai pattern di interrogazione supportati dall'applicazione.
Ad esempio, se si archiviano dati basati sulla posizione per stato degli Stati Uniti, si hanno circa 50 valori di chiave di partizione. Ogni stato contiene un numero significativo di vettori per una corretta memorizzazione. Le 50 partizioni offrono una scalabilità orizzontale del throughput fino a circa 50 volte. Funziona quando ogni ricerca è indirizzata a un singolo stato.
Evita la cardinalità estrema in entrambe le direzioni:
-
Troppo alto (ad esempio, un ID di elemento univoco): ogni partizione contiene un singolo elemento senza vicini da confrontare, con conseguente scarso richiamo.
-
Troppo basso (ad esempio, un valore booleano): la maggior parte degli elementi finisce in una partizione, il che limita la scalabilità del throughput e riduce la latenza e i vantaggi in termini di costi.
Per filtrare ulteriormente all'interno di una partizione, utilizza gli attributi di filtro in linea.
Esempio di throughput. Considera un modello di incorporamento a 768 dimensioni (come Cohere Embed v3) con 1 KB di dati di elementi non vettoriali, per una dimensione totale dell'elemento di circa 4 KB (768 dimensioni × 4 byte + 1 KB). Con questa dimensione dell'elemento, i limiti per chiave di partizione si traducono in:
-
Ricerca: 1 GBps ÷ 4 KB ≈ 250.000 vettori esaminati al secondo per valore della chiave di partizione. Man mano che il numero di vettori in una partizione aumenta, ogni ricerca esamina più dati e si raggiungerà questo limite prima.
-
Scrittura: 10 MBps ÷ 4 KB ≈ 2.500 scritture vettoriali al secondo per valore della chiave di partizione
La diffusione dei dati su più valori di chiave di partizione moltiplica questi limiti. Ad esempio, 50 valori di chiave di partizione forniscono fino a 50 volte il throughput aggregato di ricerca e scrittura. Se il carico di lavoro supera questi limiti per chiave di partizione, contatta l'assistenza. AWS
Mantieni gli incorporamenti sincronizzati con i contenuti di origine
DynamoDB non ricalcola gli incorporamenti per te. Ogni volta che modifichi il contenuto sorgente rappresentato da un incorporamento, rigenera il vettore con lo stesso modello di incorporamento e lo riscrivi sull'elemento. In caso contrario, l'indice continua a restituire risultati basati sul vettore obsoleto. Prendi in considerazione l'acquisizione delle modifiche ai contenuti con DynamoDB Streams e l'utilizzo di un processo downstream per rigenerare e riscrivere gli incorporamenti interessati.
Proietta solo gli attributi di cui hai bisogno
SearchVectorsnon può restituire attributi che non sono proiettati nell'indice vettoriale. La proiezione di più attributi aumenta la memorizzazione dell'indice e i costi di scrittura. Proietta gli attributi letti dall'applicazione direttamente dai risultati di ricerca e recupera il resto con un follow-up GetItem o BatchGetItem nella tabella di base quando ne hai bisogno.
Usa più indici per confrontare i modelli di incorporamento
È possibile creare fino a 5 indici vettoriali su una singola tabella. Utilizzate indici separati per valutare diversi modelli di incorporamento o versioni del modello fianco a fianco. Archivia gli incorporamenti di ogni modello in un attributo vettoriale diverso e crea un indice vettoriale per ciascuno. Ciò consente di confrontare la qualità di ricerca tra i modelli con gli stessi dati sottostanti senza migrare l'indice di produzione.
Ad esempio, quando si esegue l'aggiornamento da una versione del modello a un'altra, create un secondo indice con le dimensioni e la funzione di distanza del nuovo modello. Riempilo con gli incorporamenti del nuovo modello, esegui query di test su entrambi gli indici e confronta la pertinenza. Una volta soddisfatto, migra l'applicazione al nuovo indice ed elimina quello vecchio.