Comprendere il livello di consistenza nel database dei vettori Milvus - Parte II
Immagine di copertina
Questo articolo è stato scritto da Jiquan Long e trascritto da Angela Ni.
Nel precedente blog sulla consistenza, abbiamo spiegato qual è la connotazione della consistenza in un database vettoriale distribuito, abbiamo trattato i quattro livelli di consistenza - forte, bounded staleness, di sessione ed eventuale - supportati nel database vettoriale Milvus e abbiamo spiegato lo scenario applicativo più adatto a ciascun livello di consistenza.
In questo post continueremo a esaminare il meccanismo che consente agli utenti del database vettoriale Milvus di scegliere in modo flessibile il livello di consistenza ideale per vari scenari applicativi. Inoltre, forniremo un tutorial di base su come sintonizzare il livello di consistenza nel database vettoriale Milvus.
Vai a:
- Il meccanismo di spunta temporale sottostante
- Timestamp di garanzia
- Livelli di consistenza
- Come regolare il livello di coerenza in Milvus?
Il meccanismo di time tick sottostante
Milvus utilizza il meccanismo del time tick per garantire diversi livelli di coerenza quando si effettua una ricerca vettoriale o un'interrogazione. Il Time Tick è la filigrana di Milvus che agisce come un orologio in Milvus e indica in quale punto del tempo si trova il sistema Milvus. Ogni volta che viene inviata una richiesta di linguaggio di manipolazione dei dati (DML) al database dei vettori di Milvus, questo assegna un timestamp alla richiesta. Come mostrato nella figura seguente, quando vengono inseriti nuovi dati nella coda dei messaggi, Milvus non solo segna un timestamp sui dati inseriti, ma inserisce anche dei tick temporali a intervalli regolari.
timetick
Prendiamo come esempio syncTs1
nella figura precedente. Quando i consumatori a valle, come i nodi di interrogazione, vedono syncTs1
, i componenti del consumatore capiscono che tutti i dati inseriti prima di syncTs1
sono stati consumati. In altre parole, le richieste di inserimento dati i cui valori di timestamp sono inferiori a syncTs1
non appariranno più nella coda dei messaggi.
Garanzia del timestamp
Come menzionato nella sezione precedente, i componenti di consumo a valle, come i nodi di interrogazione, ottengono continuamente messaggi di richieste di inserimento dati e tick temporali dalla coda di messaggi. Ogni volta che un time tick viene consumato, il nodo di interrogazione segna questo time tick consumato come tempo di servizio - ServiceTime
e tutti i dati inseriti prima di ServiceTime
sono visibili al nodo di interrogazione.
Oltre a ServiceTime
, Milvus adotta anche un tipo di timestamp - timestamp di garanzia (GuaranteeTS
) per soddisfare l'esigenza di vari livelli di coerenza e disponibilità da parte di diversi utenti. Ciò significa che gli utenti del database vettoriale di Milvus possono specificare GuaranteeTs
per informare i nodi di interrogazione che tutti i dati precedenti a GuaranteeTs
devono essere visibili e coinvolti quando viene effettuata una ricerca o un'interrogazione.
Quando il nodo di interrogazione esegue una richiesta di ricerca nella banca dati vettoriale Milvus, si presentano di solito due scenari.
Scenario 1: Esecuzione immediata della richiesta di ricerca
Come mostrato nella figura seguente, se GuaranteeTs
è più piccolo di ServiceTime
, i nodi di interrogazione possono eseguire la richiesta di ricerca immediatamente.
eseguire_immediatamente
Scenario 2: Attendere fino a "ServiceTime > GuaranteeTs".
Se GuaranteeTs
è maggiore di ServiceTime
, i nodi di interrogazione devono continuare a consumare time tick dalla coda dei messaggi. Le richieste di ricerca non possono essere eseguite finché ServiceTime
non è maggiore di GuaranteeTs
.
attendere_ricerca
Livelli di coerenza
Pertanto, GuaranteeTs
è configurabile nella richiesta di ricerca per ottenere il livello di consistenza specificato dall'utente. Un GuaranteeTs
con un valore elevato garantisce una forte consistenza al costo di un'elevata latenza di ricerca. Un GuaranteeTs
con un valore piccolo riduce la latenza di ricerca, ma compromette la visibilità dei dati.
GuaranteeTs
in Milvus è un formato timestamp ibrido. E l'utente non ha idea del TSO all'interno di Milvus. Pertanto, specificare il valore diGuaranteeTs
è un compito troppo complicato per gli utenti. Per risparmiare agli utenti e offrire loro un'esperienza ottimale, Milvus richiede solo che gli utenti scelgano il livello di coerenza specifico e il database vettoriale di Milvus gestirà automaticamente il valore di GuaranteeTs
per gli utenti. In altre parole, l'utente di Milvus deve solo scegliere tra i quattro livelli di coerenza: Strong
, Bounded
, Session
, e Eventually
. A ciascun livello di consistenza corrisponde un determinato valore di GuaranteeTs
.
La figura seguente illustra il valore GuaranteeTs
per ciascuno dei quattro livelli di consistenza del database vettoriale Milvus.
garanzia_ts
Il database vettoriale Milvus supporta quattro livelli di consistenza:
CONSISTENCY_STRONG
GuaranteeTs
è impostato sullo stesso valore dell'ultimo timestamp del sistema e i nodi di interrogazione attendono che il tempo di servizio proceda fino all'ultimo timestamp del sistema per elaborare la richiesta di ricerca o di interrogazione.CONSISTENCY_EVENTUALLY
GuaranteeTs
è impostato su un valore insignificante rispetto all'ultimo timestamp del sistema per saltare il controllo di coerenza. I nodi di interrogazione effettuano immediatamente una ricerca sulla vista dati esistente.CONSISTENCY_BOUNDED
GuaranteeTs
è impostato su un valore relativamente più piccolo dell'ultimo timestamp di sistema e i nodi di query effettuano la ricerca su una vista dati meno aggiornata.CONSISTENCY_SESSION
: Il client utilizza il timestamp dell'ultima operazione di scrittura comeGuaranteeTs
, in modo che ogni client possa almeno recuperare i dati inseriti da solo.
Come si regola il livello di consistenza in Milvus?
Milvus supporta la regolazione del livello di consistenza durante la creazione di una collezione o l'esecuzione di una ricerca o di una query.
Eseguire una ricerca di similarità vettoriale
Per effettuare una ricerca di similarità vettoriale con il livello di consistenza desiderato, è sufficiente impostare il valore del parametro consistency_level
come Strong
, Bounded
, Session
, o Eventually
. Se non si imposta il valore del parametro consistency_level
, il livello di consistenza sarà Bounded
per default. L'esempio esegue una ricerca di similarità vettoriale con consistenza Strong
.
results = collection.search(
data=[[0.1, 0.2]],
anns_field="book_intro",
param=search_params,
limit=10,
expr=None,
consistency_level="Strong"
)
Eseguire una query vettoriale
Analogamente all'esecuzione di una ricerca di similarità vettoriale, è possibile specificare il valore del parametro consistency_level
quando si esegue una query vettoriale. L'esempio esegue una query vettoriale con la consistenza Strong
.
res = collection.query(
expr = "book_id in [2,4,6,8]",
output_fields = ["book_id", "book_intro"],
consistency_level="Strong"
)
Il prossimo passo
Con il rilascio ufficiale di Milvus 2.1, abbiamo preparato una serie di blog che introducono le nuove funzionalità . Per saperne di più, leggete questa serie di blog:
- Come utilizzare i dati delle stringhe per potenziare le applicazioni di ricerca per similaritÃ
- Utilizzo di Milvus incorporato per installare ed eseguire immediatamente Milvus con Python
- Aumentare la velocità di lettura del database vettoriale con le repliche in memoria
- Capire il livello di consistenza nel database vettoriale Milvus
- Capire il livello di consistenza del database vettoriale Milvus (parte II)
- In che modo il database vettoriale Milvus garantisce la sicurezza dei dati?
- Il meccanismo di time tick sottostante
- Garanzia del timestamp
- Livelli di coerenza
- Come si regola il livello di consistenza in Milvus?
- Il prossimo passo
On This Page
Try Managed Milvus for Free
Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.
Get StartedLike the article? Spread the word