Questa pagina descrive come vengono implementate le ricerche di vettori nelle istanze Cloud SQL per MySQL. Cloud SQL ti consente di archiviare embedding vettoriali, creare indici vettoriali ed eseguire ricerche vettoriali in combinazione con gli altri dati archiviati.
Archiviazione degli embedding vettoriali
Archivi gli embedding vettoriali in una tabella conforme alle proprietà ACID (atomicità, coerenza, isolamento e durabilità). Come per gli altri dati relazionali nella tabella, puoi accedere agli embedding vettori nella tabella con la semantica transazionale esistente.
Per stabilire la mappatura tra le righe della tabella e le rappresentazioni vettoriali, devi creare una colonna nella tabella per archiviare gli embedding vettoriali. La colonna deve utilizzare il tipo di dati VECTOR
di Cloud SQL e deve indicare il numero di dimensioni richieste dall'embedding. La colonna di embedding dei vettori può memorizzare solo embedding dei vettori che utilizzano esattamente le stesse dimensioni specificate quando definisci la colonna.
Una tabella può avere una sola colonna di incorporamento di vettori. Non esistono limitazioni per il numero di righe nella tabella.
Per distinguere la colonna di embedding di vettori dalle altre colonne,
Cloud SQL aggiunge COMMENT
e CONSTRAINT
speciali alla colonna.
Il vincolo è obbligatorio per la convalida dell'input e l'annotazione della colonna dell'embedding del vettore è visibile come COMMENT
. Non puoi modificare o eliminare il commento o
il vincolo.
Se hai spazio di archiviazione e memoria sufficienti disponibili nell'istanza Cloud SQL, puoi avere più tabelle con le proprie colonne di embedding di vettori.
La replica dei dati funziona allo stesso modo per la colonna di embedding di vettori e per le altre colonne InnoDB di MySQL.
Per un elenco di limitazioni e restrizioni per tabelle, colonne e istruzioni DML di incorporamento di vettori, consulta Limitazioni.
Indici di vettori
Devi utilizzare un indice vettoriale per eseguire ricerche di somiglianza ANN sugli incorporamenti vettoriali. Cloud SQL crea indici vettoriali utilizzando l'algoritmo Scalable Nearest Neighbors (ScANN).
Gli indici di vettore hanno i seguenti requisiti:
- Puoi creare un solo indice di vettori per tabella.
- Se nella tua istanza sono presenti più tabelle con embedding di vettori, puoi creare indici di vettori per ognuna di esse.
- Se stai creando un indice vettoriale, non puoi aggiungere una limitazione alla chiave primaria della tabella indicizzata.
Per una migliore qualità di ricerca, crea un indice vettoriale solo dopo aver caricato la maggior parte dei dati nella tabella di base. Se nella tabella di base sono presenti meno di 1000 incorporamenti, la creazione dell'indice non riesce.
Quando decidi se creare un indice di vettori, se hai un numero ridotto di righe, valuta la possibilità di eseguire una ricerca KNN. La decisione di utilizzare una ricerca KNN o ANN dipende anche dal numero di dimensioni dell'embedding vettoriale. Un numero maggiore di embedding potrebbe richiedere un indice di vettore.
Per un elenco di limitazioni e restrizioni per gli indici di vettori, consulta Limitazioni. Per informazioni su come creare un indice di vettori, consulta Creare e gestire gli indici di vettori.
Aggiornamenti dell'indice vettoriale
Cloud SQL aggiorna gli indici di vettori in tempo reale. Qualsiasi transazione che esegue operazioni di Data Manipulation Language (DML) sulla tabella di base propaghi anche le modifiche agli indici di vettore associati. Gli indici vettoriali si comportano allo stesso modo di qualsiasi altro indice secondario nella tabella. Gli indici vettoriali sono completamente coerenti a livello di transazioni e conformi ad ACID. Se esegui il rollback di una transazione, le modifiche corrispondenti al rollback si verificano anche nell'indice del vettore.
Replica degli indici vettoriali
Cloud SQL replica gli indici di vettori in tutte le repliche di lettura, anche per la replica a cascata. Quando crei una nuova replica di lettura da un'istanza principale con l'embedding vettoriale, la replica di lettura eredita le impostazioni di embedding vettoriale dall'istanza principale. Per le repliche di lettura esistenti, devi attivare il supporto dell'embedding vettoriale su ciascuna.
In termini di impatto sul ritardo della replica, la creazione e la gestione degli indici di vettori avviene nello stesso modo degli indici MySQL standard.
Persistenza, arresto e impatto sulla manutenzione
Gli indici vettoriali vengono mantenuti in modo analogo alle tabelle di base, con il supporto completo di ACID. Gli indici di vettori sono sempre sincronizzati con i dati della tabella di base e hanno la stessa visibilità, isolamento e sicurezza in caso di arresto anomalo. L'indice di vettori non è interessato quando l'istanza viene arrestata o riceve manutenzione.
Manutenzione dell'indice
Dopo aver eseguito operazioni DML estese sulla tabella di base, l'indice vettoriale che hai addestrato sui dati iniziali (al momento della creazione dell'indice) potrebbe non riflettere il nuovo stato. Ciò può influire sulla qualità della ricerca.
L'indice è composto da due parti:
- L'albero dell'indice. Viene creato con l'addestramento sui dati esistenti. Rimane immutato per tutta la durata dell'indice.
- L'indice esce. Questi contengono tutte le righe di dati. Le schede dell'indice non mai non vengono sincronizzate.
L'albero dell'indice potrebbe diventare meno efficiente dopo l'esecuzione di un numero elevato di istruzioni DML perché le righe passano da una foglia all'altra. Per aggiornare la struttura ad albero dell'indice, devi ricostruire l'indice.
Operazioni DDL non supportate sulle tabelle con indici vettoriali
- Modifica le operazioni tabella che richiedono l'algoritmo di copia.
- Modifica le operazioni tabella che richiedono la ricostruzione della tabella.
- Elimina o modifica la chiave primaria.
- Sposta la tabella in un tablespace generale.
Ricerca vettoriale
Cloud SQL fornisce funzioni di distanza vettoriale che puoi utilizzare per eseguire ricerche di similarità vettoriale con il vicino più prossimo approssimativo (ANN) e i k vicini più prossimi (KNN) sulla tua istanza. Quando esegui una query, il vettore della query viene confrontato con i vettori del tuo set di dati. Le funzioni di distanza calcolano la distanza tra i vettori utilizzando una metrica di somiglianza come il coseno. I vettori con la distanza più breve tra loro sono i più simili e vengono restituiti nei risultati di ricerca.
Cloud SQL utilizza le seguenti funzioni per misurare la distanza tra i vettori nelle ricerche vettoriali quando esegui ricerche vettoriali ANN e KNN:
- Cosine: misura il coseno dell'angolo tra due vettori. Un valore minore indica una maggiore somiglianza tra i vettori.
- Prodotto scalare: calcula il coseno dell'angolo moltiplicato per il prodotto delle magnitudini dei vettori corrispondenti.
- Distanza L2 al quadrato: misura la distanza euclidea tra due vettori aggiungendo la distanza al quadrato su ogni dimensione.
Ricerca KNN
Una ricerca vettoriale KNN è il metodo di ricerca preferito quando hai bisogno di risultati esatti o vuoi aggiungere un filtro selettivo. La ricerca KNN esegue un calcolo della distanza del vettore di query con ogni embedding nel set di dati per trovare il vicino più prossimo. Le ricerche KNN in Cloud SQL forniscono un recupero perfetto. Le ricerche KNN non utilizzano un indice di vettori, quindi sono una buona opzione quando si utilizzano set di dati più piccoli.
Per eseguire una ricerca KNN, utilizza la funzione vector_distance
che accetta come input due vettori: il vettore di query (ciò che stai cercando) e un vettore candidato del tuo set di dati. Calcola la distanza tra questi due vettori.
Utilizza la funzione vector_distance in un'istruzione SELECT
. Per ulteriori informazioni, consulta
Ricerca K-Nearest Neighbor (KNN).
Se noti che KNN non ha un buon rendimento, puoi creare un indice vettoriale in un secondo momento
e continuare a utilizzare approx_distance
nella tua applicazione per le ricerche ANN.
Ricerca ANN
Una ricerca vettoriale ANN è il tipo di ricerca preferito quando l'efficienza delle query è un problema. Accelera le ricerche di somiglianza calcolando la distanza tra il vettore della query e solo una parte dei vettori nel tuo set di dati. A tal fine, Cloud SQL organizza i dati in cluster o partitizioni e poi concentra la ricerca sui cluster più vicini alla query. Le ricerche ANN requireranno indici di vettori. Questi indici danno la priorità alla velocità di ricerca rispetto al recupero perfetto. In Cloud SQL, viene utilizzato il tipo di indice TREE_SQ per le ricerche ANN.
Per eseguire una ricerca ANN, utilizza la funzione
approx_distance
con un'opzione di misurazione della distanza. Utilizzi approx_distance
in un elenco ORDER BY
o
SELECT
ed è consentita una clausola LIMIT
per limitare i risultati di ricerca. Puoi anche aggiungere una clausola WHERE
per eseguire il post-filtro dei risultati di ricerca. Per maggiori informazioni, consulta Ricerca dei vicini più vicini approssimativi (ANN).
In alcuni casi, una ricerca con reti neurali artificiali passa a una ricerca con reti K-nearest neighbor. Per ulteriori informazioni, consulta Verificare lo stato di riserva per le ricerche ANN.
Requisiti
Cloud SQL richiede di attivare gli embedding di vettori nell'istanza utilizzando il flag cloudsql_vector
prima di aggiungerli. Per maggiori informazioni, consulta Attivare e disattivare gli embedding di vettori nell'istanza.
Limitazioni
Di seguito sono riportate le limitazioni per le tabelle che hanno una colonna di embedding di vettori:
- Può esserci una sola colonna di incorporamento di vettori per tabella.
- Può essere presente un solo indice di vettore per tabella.
- Un embedding vettoriale è limitato a 16.000 dimensioni.
- La colonna di embedding del vettore non può essere una colonna generata.
- Il partizionamento a livello di tabella nelle tabelle con colonne di embedding vettoriale non è supportato.
- Le chiavi principali che utilizzano i tipi di dati
BIT
,BINARY
,VARBINARY
,JSON
,BLOB
,TEXT
o i dati spaziali non sono supportate per gli indici di vettori. Inoltre, le chiavi principali composite non possono includere nessuno di questi tipi. - Se è presente un indice di vettore, non puoi aggiungere una limitazione alla chiave primaria della tabella di base.
- Quando in una tabella è presente un indice vettoriale, non puoi eseguire alcune operazioni DDL. Per ulteriori informazioni, consulta Operazioni DDL non supportate sulle tabelle con indici vettoriali.
Di seguito sono riportate le limitazioni per le query di ricerca vettoriale:
- La funzione
approx_distance
può essere utilizzata solo in un elencoORDER BY
oSELECT
. - I predicati che coinvolgono la tabella di base possono essere utilizzati nella condizione
WHERE
in combinazione con le espressioniapprox_distance
nell'elencoORDER BY
oSELECT
. I predicati della condizioneWHERE
vengono valutati dopo la valutazione delle funzioni vettorialiapprox_distance
.
Best practice per lavorare con gli indici di vettori
Questa sezione fornisce le best practice per lavorare con gli indici di vettori. Ogni workload è diverso e potrebbe essere necessario apportare modifiche di conseguenza.
- Dopo le principali operazioni DML, è buona norma ricostruire l'indice.
- In genere, è accettabile lasciare che sia Cloud SQL a calcolare il numero di righe da utilizzare. Se hai un caso d'uso in cui vuoi specificare il numero di entità, ti consigliamo di avere almeno 100 vettori per entità per ottenere il miglior recupero.
Passaggi successivi
- Leggi la panoramica sulla ricerca di vettori su Cloud SQL.
- Scopri come generare embedding vettoriali.
- Scopri come creare indici di vettori.
- Scopri come eseguire ricerche sui vector embedding.