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

milvus-logo
LFAI
  • Home
  • Blog
  • Aumentate il throughput di lettura del database vettoriale con le repliche in memoria

Aumentate il throughput di lettura del database vettoriale con le repliche in memoria

  • Engineering
August 22, 2022
Congqi Xia

Cover_image Immagine di copertina

Questo articolo è stato scritto da Congqi Xia e Angela Ni.

Con il suo rilascio ufficiale, Milvus 2.1 è dotato di molte nuove funzionalità per offrire comodità e una migliore esperienza d'uso. Sebbene il concetto di replica in-memory non sia una novità per il mondo dei database distribuiti, si tratta di una funzionalità fondamentale che può aiutare a incrementare le prestazioni e la disponibilità del sistema in modo semplice. Per questo motivo, questo post si propone di spiegare cos'è la replica in-memory e perché è importante, per poi introdurre come abilitare questa nuova funzionalità in Milvus, un database vettoriale per l'AI.

Vai a:

Prima di capire che cos'è la replica in-memory e perché è importante, è necessario comprendere alcuni concetti rilevanti, tra cui gruppo di replica, replica di shard, replica in streaming, replica storica e leader di shard. L'immagine seguente illustra questi concetti.

Replica_concepts Concetti di replica

Gruppo di replica

Un gruppo di replica è costituito da più nodi di query responsabili della gestione dei dati storici e delle repliche.

Replica shard

Una replica shard consiste in una replica streaming e in una replica storica, entrambe appartenenti allo stesso shard (cioè al canale DML). Più repliche shard costituiscono un gruppo di repliche. Il numero esatto di repliche shard in un gruppo di repliche è determinato dal numero di shard in una raccolta specifica.

Replica in streaming

Una replica in streaming contiene tutti i segmenti in crescita dello stesso canale DML. Tecnicamente, una replica in streaming dovrebbe essere servita da un solo nodo di query in una replica.

Replica storica

Una replica storica contiene tutti i segmenti sigillati dello stesso canale DML. I segmenti sigillati di una replica storica possono essere distribuiti su diversi nodi di query all'interno dello stesso gruppo di replica.

Leader dello shard

Uno shard leader è il nodo di query che serve la replica in streaming in una replica shard.

Che cos'è la replica in-memory?

L'abilitazione delle repliche in-memory consente di caricare i dati di una raccolta su più nodi di query, in modo da sfruttare le risorse extra di CPU e memoria. Questa funzione è molto utile se si dispone di un insieme di dati relativamente piccolo ma si desidera aumentare la velocità di lettura e migliorare l'utilizzo delle risorse hardware.

Per il momento, il database vettoriale Milvus conserva in memoria una replica per ogni segmento. Tuttavia, con le repliche in memoria, è possibile avere più repliche di un segmento su diversi nodi di interrogazione. Ciò significa che se un nodo di interrogazione sta conducendo una ricerca su un segmento, una nuova richiesta di ricerca in arrivo può essere assegnata a un altro nodo di interrogazione inattivo, poiché questo nodo di interrogazione ha una replica esattamente dello stesso segmento.

Inoltre, se disponiamo di più repliche in memoria, possiamo affrontare meglio la situazione in cui un nodo di query si blocca. Prima dovevamo aspettare che il segmento venisse ricaricato per poter continuare la ricerca su un altro nodo di query. Tuttavia, con la replica in-memory, la richiesta di ricerca può essere inviata immediatamente a un nuovo nodo di query senza dover ricaricare i dati.

Replication La replica

Perché le repliche in-memory sono importanti?

Uno dei vantaggi più significativi dell'abilitazione delle repliche in-memory è l'aumento del QPS (query per secondo) e del throughput complessivo. Inoltre, è possibile mantenere più repliche di segmento e il sistema è più resiliente in caso di failover.

Abilitazione delle repliche in-memory nel database vettoriale Milvus

Abilitare la nuova funzione delle repliche in-memory è facile nel database vettoriale Milvus. È sufficiente specificare il numero di repliche che si desidera quando si carica una collezione (cioè chiamando collection.load()).

Nell'esempio seguente, supponiamo di aver già creato una collezione denominata "libro" e di avervi inserito dei dati. Si può quindi eseguire il seguente comando per creare due repliche quando si carica un insieme di libri.

from pymilvus import Collection
collection = Collection("book")      # Get an existing collection.
collection.load(replica_number=2) # load collection as 2 replicas

È possibile modificare in modo flessibile il numero di repliche nell'esempio di codice sopra riportato, per adattarlo al meglio al proprio scenario applicativo. È quindi possibile eseguire direttamente una ricerca o una query di somiglianza vettoriale su più repliche senza eseguire altri comandi. Tuttavia, va notato che il numero massimo di repliche consentito è limitato dalla quantità totale di memoria utilizzabile per eseguire i nodi della query. Se il numero di repliche specificato supera i limiti della memoria utilizzabile, verrà restituito un errore durante il caricamento dei dati.

È inoltre possibile verificare le informazioni delle repliche in memoria create eseguendo collection.get_replicas(). Verranno restituite le informazioni dei gruppi di repliche e dei corrispondenti nodi di query e shard. Di seguito è riportato un esempio di output.

Replica groups:
- Group: <group_id:435309823872729305>, <group_nodes:(21, 20)>, <shards:[Shard: <channel_name:milvus-zong-rootcoord-dml_27_435367661874184193v0>, <shard_leader:21>, <shard_nodes:[21]>, Shard: <channel_name:milvus-zong-rootcoord-dml_28_435367661874184193v1>, <shard_leader:20>, <shard_nodes:[20, 21]>]>
- Group: <group_id:435309823872729304>, <group_nodes:(25,)>, <shards:[Shard: <channel_name:milvus-zong-rootcoord-dml_28_435367661874184193v1>, <shard_leader:25>, <shard_nodes:[25]>, Shard: <channel_name:milvus-zong-rootcoord-dml_27_435367661874184193v0>, <shard_leader:25>, <shard_nodes:[25]>]>

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