🚀 Prova Zilliz Cloud, la versione completamente gestita di Milvus, gratuitamente—sperimenta prestazioni 10 volte più veloci! Prova Ora>>

milvus-logo
LFAI
  • Home
  • Blog
  • Comprendere il livello di consistenza nel database dei vettori Milvus - Parte II

Comprendere il livello di consistenza nel database dei vettori Milvus - Parte II

  • Engineering
September 13, 2022
Jiquan Long

Cover_image 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 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 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.

execute_immediately 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.

wait_search 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.

guarantee_ts 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 come GuaranteeTs, 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.

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:

Like the article? Spread the word

Continua a Leggere