🚀 Essayez Zilliz Cloud, la version entièrement gérée de Milvus, gratuitement—découvrez des performances 10x plus rapides ! Essayez maintenant>>

milvus-logo
LFAI
  • Home
  • Blog
  • Augmentez le débit de lecture de votre base de données vectorielle avec des répliques en mémoire

Augmentez le débit de lecture de votre base de données vectorielle avec des répliques en mémoire

  • Engineering
August 22, 2022
Congqi Xia

Cover_image Image de couverture

Cet article est co-écrit par Congqi Xia et Angela Ni.

Avec sa sortie officielle, Milvus 2.1 s'accompagne de nombreuses nouvelles fonctionnalités destinées à faciliter la vie des utilisateurs et à améliorer leur expérience. Bien que le concept de réplique en mémoire ne soit pas nouveau dans le monde des bases de données distribuées, il s'agit d'une fonctionnalité essentielle qui peut vous aider à améliorer les performances et la disponibilité du système sans effort. Cet article explique donc ce qu'est la réplique en mémoire et pourquoi elle est importante, puis présente comment activer cette nouvelle fonctionnalité dans Milvus, une base de données vectorielle pour l'IA.

Aller à :

Avant de savoir ce qu'est une réplique en mémoire et pourquoi elle est importante, nous devons d'abord comprendre quelques concepts pertinents, notamment le groupe de répliques, la réplique en nuage, la réplique en continu, la réplique historique et le chef de nuage. L'image ci-dessous illustre ces concepts.

Replica_concepts Concepts de réplique

Groupe de répliques

Un groupe de répliques est constitué de plusieurs nœuds de requête chargés de gérer les données historiques et les répliques.

Réplique en nuage

Un réplica shard se compose d'un réplica streaming et d'un réplica historique, tous deux appartenant au même shard (c'est-à-dire au canal DML). Un groupe de répliques est constitué de plusieurs répliques. Le nombre exact de répliques d'un groupe de répliques est déterminé par le nombre de tessons d'une collection donnée.

Réplique en continu

Une réplique en continu contient tous les segments croissants du même canal DML. D'un point de vue technique, une réplique en continu ne doit être servie que par un seul nœud de requête dans une réplique.

Réplique historique

Une réplique historique contient tous les segments scellés du même canal DML. Les segments scellés d'une réplique historique peuvent être distribués sur plusieurs nœuds de requête au sein du même groupe de répliques.

Chef de tesson

Un chef de groupe est le nœud de requête qui sert la réplique en continu dans un groupe de répliques.

Qu'est-ce que la réplique en mémoire ?

L'activation des répliques en mémoire vous permet de charger les données d'une collection sur plusieurs nœuds de requête afin d'exploiter des ressources supplémentaires en termes de CPU et de mémoire. Cette fonctionnalité est très utile si vous disposez d'un ensemble de données relativement petit mais que vous souhaitez augmenter le débit de lecture et améliorer l'utilisation des ressources matérielles.

Pour l'instant, la base de données vectorielles Milvus contient une réplique pour chaque segment en mémoire. Cependant, avec les répliques en mémoire, vous pouvez avoir plusieurs répliques d'un segment sur différents nœuds d'interrogation. Cela signifie que si un nœud d'interrogation effectue une recherche sur un segment, une nouvelle demande de recherche peut être attribuée à un autre nœud d'interrogation inactif, car ce nœud d'interrogation possède une réplique du même segment.

En outre, si nous disposons de plusieurs répliques en mémoire, nous pouvons mieux faire face à la situation dans laquelle un nœud de requête tombe en panne. Auparavant, nous devions attendre que le segment soit rechargé afin de poursuivre la recherche sur un autre nœud d'interrogation. Cependant, avec la réplication en mémoire, la demande de recherche peut être renvoyée immédiatement à un nouveau nœud d'interrogation sans avoir à recharger les données.

Replication La réplication

Pourquoi les répliques en mémoire sont-elles importantes ?

L'un des principaux avantages de l'activation des répliques en mémoire est l'augmentation du QPS (query per second) et du débit. En outre, il est possible de maintenir plusieurs répliques de segments et le système est plus résistant en cas de basculement.

Activer les répliques en mémoire dans la base de données vectorielle Milvus

L'activation de la nouvelle fonctionnalité des répliques en mémoire est facile dans la base de données vectorielle Milvus. Il vous suffit de spécifier le nombre de répliques que vous souhaitez lors du chargement d'une collection (en appelant collection.load()).

Dans l'exemple suivant, nous supposons que vous avez déjà créé une collection nommée "book" et que vous y avez inséré des données. Vous pouvez alors exécuter la commande suivante pour créer deux répliques lors du chargement d' une collection de livres.

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

Vous pouvez modifier le nombre de répliques dans l'exemple de code ci-dessus pour l'adapter au mieux à votre scénario d'application. Vous pouvez ensuite effectuer directement une recherche de similarité vectorielle ou une requête sur plusieurs répliques sans exécuter de commandes supplémentaires. Toutefois, il convient de noter que le nombre maximal de répliques autorisé est limité par la quantité totale de mémoire utilisable pour exécuter les nœuds de requête. Si le nombre de répliques que vous spécifiez dépasse les limites de la mémoire utilisable, une erreur sera renvoyée lors du chargement des données.

Vous pouvez également vérifier les informations des répliques en mémoire que vous avez créées en exécutant collection.get_replicas(). Les informations relatives aux groupes de réplicas et aux nœuds de requête et shards correspondants seront renvoyées. Voici un exemple de résultat.

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]>]>

Prochaines étapes

Avec la sortie officielle de Milvus 2.1, nous avons préparé une série de blogs présentant les nouvelles fonctionnalités. En savoir plus sur cette série de blogs :

Like the article? Spread the word

Continuer à Lire