🚀 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
  • Comprendre le niveau de cohérence dans la base de données vectorielles Milvus - Partie II

Comprendre le niveau de cohérence dans la base de données vectorielles Milvus - Partie II

  • Engineering
September 13, 2022
Jiquan Long

Cover_image Image de couverture

Cet article est écrit par Jiquan Long et transcrit par Angela Ni.

Dans le blog précédent sur la cohérence, nous avons expliqué la connotation de la cohérence dans une base de données vectorielle distribuée, couvert les quatre niveaux de cohérence - forte, staleness limitée, session et éventuelle - pris en charge dans la base de données vectorielle Milvus, et expliqué le scénario d'application le mieux adapté à chaque niveau de cohérence.

Dans cet article, nous continuerons à examiner le mécanisme qui permet aux utilisateurs de la base de données vectorielle Milvus de choisir le niveau de cohérence idéal pour différents scénarios d'application. Nous fournirons également un tutoriel de base sur la manière de régler le niveau de cohérence dans la base de données vectorielle Milvus.

Aller à :

Le mécanisme de tic-tac temporel sous-jacent

Milvus utilise le mécanisme de time tick pour garantir différents niveaux de cohérence lors d'une recherche vectorielle ou d'une requête. Time Tick est le filigrane de Milvus qui agit comme une horloge dans Milvus et indique à quel moment le système Milvus se trouve. Chaque fois qu'une requête en langage de manipulation de données (DML) est envoyée à la base de données vectorielles Milvus, un horodatage est attribué à la requête. Comme le montre la figure ci-dessous, lorsque de nouvelles données sont insérées dans la file d'attente des messages par exemple, Milvus marque non seulement un horodatage sur ces données insérées, mais insère également des tics temporels à intervalles réguliers.

timetick timetick

Prenons l'exemple de syncTs1 dans la figure ci-dessus. Lorsque les consommateurs en aval, tels que les nœuds de requête, voient syncTs1, les composants consommateurs comprennent que toutes les données insérées avant syncTs1 ont été consommées. En d'autres termes, les demandes d'insertion de données dont les valeurs d'horodatage sont inférieures à syncTs1 n'apparaîtront plus dans la file d'attente des messages.

Garantie d'horodatage

Comme indiqué dans la section précédente, les composants consommateurs en aval, tels que les nœuds de requête, obtiennent en permanence des messages de demandes d'insertion de données et des informations temporelles à partir de la file d'attente des messages. Chaque fois qu'un time tick est consommé, le nœud d'interrogation marque ce time tick consommé comme le temps utilisable - ServiceTime et toutes les données insérées avant ServiceTime sont visibles pour le nœud d'interrogation.

Outre ServiceTime, Milvus adopte également un type d'horodatage - l'horodatage de garantie (GuaranteeTS) pour répondre aux besoins des différents utilisateurs en matière de cohérence et de disponibilité. Cela signifie que les utilisateurs de la base de données vectorielles Milvus peuvent spécifier GuaranteeTs afin d'informer les nœuds d'interrogation que toutes les données antérieures à GuaranteeTs doivent être visibles et intervenir lors d'une recherche ou d'une interrogation.

Il existe généralement deux scénarios lorsque le nœud de recherche exécute une demande de recherche dans la base de données vectorielles Milvus.

Scénario 1 : Exécution immédiate de la demande de recherche

Comme le montre la figure ci-dessous, si GuaranteeTs est plus petit que ServiceTime, les nœuds de requête peuvent exécuter la requête de recherche immédiatement.

execute_immediately execute_immediately

Scénario 2 : attendre jusqu'à ce que "ServiceTime > GuaranteeTs" (temps de service > temps de garantie)

Si GuaranteeTs est plus grand que ServiceTime, les nœuds de recherche doivent continuer à consommer le time tick de la file d'attente des messages. Les demandes de recherche ne peuvent pas être exécutées tant que ServiceTime n'est pas supérieur à GuaranteeTs.

wait_search wait_search

Niveaux de cohérence

Par conséquent, GuaranteeTs est configurable dans la requête de recherche pour atteindre le niveau de cohérence que vous avez spécifié. Une valeur élevée de GuaranteeTs garantit une cohérence élevée au prix d'une latence de recherche importante. Et un GuaranteeTs avec une petite valeur réduit la latence de recherche mais la visibilité des données est compromise.

GuaranteeTs Milvus est un format d'horodatage hybride. Et l'utilisateur n'a aucune idée de l'OST à l'intérieur de Milvus. Par conséquent, la spécification de la valeur deGuaranteeTs est une tâche beaucoup trop compliquée pour les utilisateurs. Afin d'épargner les utilisateurs et de leur offrir une expérience optimale, Milvus demande uniquement aux utilisateurs de choisir le niveau de cohérence spécifique, et la base de données vectorielle Milvus traitera automatiquement la valeur GuaranteeTs pour les utilisateurs. En d'autres termes, l'utilisateur de Milvus n'a qu'à choisir parmi les quatre niveaux de cohérence : Strong, Bounded, Session, et Eventually. Chaque niveau de cohérence correspond à une certaine valeur de GuaranteeTs.

La figure ci-dessous illustre le site GuaranteeTs pour chacun des quatre niveaux de cohérence de la base de données vectorielle Milvus.

guarantee_ts garantie_ts

La base de données vectorielles Milvus prend en charge quatre niveaux de cohérence :

  • CONSISTENCY_STRONGLa base de données vectorielle Milvus prend en charge quatre niveaux de cohérence : GuaranteeTs est défini sur la même valeur que le dernier horodatage du système, et les nœuds de requête attendent que le temps de service passe au dernier horodatage du système pour traiter la demande de recherche ou de requête.

  • CONSISTENCY_EVENTUALLY GuaranteeTs Les nœuds d'interrogation attendent que le temps de service atteigne le dernier horodatage du système pour traiter la demande de recherche ou d'interrogation. Les nœuds de requête effectuent une recherche immédiate dans la vue des données existantes.

  • CONSISTENCY_BOUNDED GuaranteeTs est fixé à une valeur relativement plus petite que le dernier horodatage du système, et les nœuds d'interrogation effectuent une recherche sur une vue de données tolérément moins mise à jour.

  • CONSISTENCY_SESSION: Le client utilise l'horodatage de la dernière opération d'écriture comme GuaranteeTs afin que chaque client puisse au moins récupérer les données qu'il a lui-même insérées.

Comment régler le niveau de cohérence dans Milvus ?

Milvus prend en charge le réglage du niveau de cohérence lors de la création d'une collection ou de l'exécution d'une recherche ou d'une requête.

Pour effectuer une recherche de similarité vectorielle avec le niveau de cohérence souhaité, il suffit de définir la valeur du paramètre consistency_level comme étant soit Strong, Bounded, Session, ou Eventually. Si vous ne définissez pas la valeur du paramètre consistency_level, le niveau de cohérence sera Bounded par défaut. L'exemple ci-dessous effectue une recherche de similarité vectorielle avec le niveau de cohérence Strong.

results = collection.search(
        data=[[0.1, 0.2]], 
        anns_field="book_intro", 
        param=search_params, 
        limit=10, 
        expr=None,
        consistency_level="Strong"
)

Effectuer une requête vectorielle

Comme pour la recherche de similarités vectorielles, vous pouvez spécifier la valeur du paramètre consistency_level lors de l'exécution d'une requête vectorielle. L'exemple effectue une recherche vectorielle avec la cohérence Strong.

res = collection.query(
  expr = "book_id in [2,4,6,8]", 
  output_fields = ["book_id", "book_intro"],
  consistency_level="Strong"
)

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