Comprendre les modèles de cohérence pour les bases de données vectorielles
Les systèmes distribués pour vos applications de recherche vectorielle deviennent indispensables, qu’il s’agisse de l’évolutivité et de la tolérance aux pannes ou de l’amélioration des performances et de l’accessibilité mondiale. Les principes fondamentaux qui font des systèmes distribués l’épine dorsale d’applications résilientes et performantes nous obligent à prendre en compte les compromis entre cohérence, disponibilité et latence.
Par exemple, la cohérence est essentielle pour certains cas d’utilisation de la recherche vectorielle dans votre application distribuée. Ne serait-ce pas agaçant si vous interrogiez des données que vous vous attendiez à trouver, mais qui n’étaient pas là ? Cela se produirait si vos données n’étaient pas cohérentes sur toutes les répliques que vous avez dans vos systèmes distribués. En surface, cela semble simple. Bien sûr, mes données devraient être là après que je les y ai mises et que je les ai répliquées sur plusieurs nœuds. Mais quand devraient-elles être là ? Comment vous en assurez-vous ?
En réponse au problème de cohérence, la base de données vectorielle entièrement distribuée Milvus offre une cohérence réglable. Milvus dispose d’une architecture unique qui vous permet de faire évoluer la manière dont vous écrivez vos données et de garantir la cohérence sans avoir à utiliser d’outils supplémentaires. Tirant parti d’une infrastructure distribuée, Milvus est un système pub-sub faiblement couplé, ce qui signifie que la cohérence peut être facilement gérée et ajustée via des horodatages.
Dans cet article, nous examinerons :
Qu’est-ce que la cohérence ?
- Exigences de cohérence des bases de données vectorielles
Cohérence, disponibilité et partitions
Quels niveaux de cohérence Milvus offre-t-il ?
Cohérence éventuelle
Cohérence de session
Cohérence bornée
Cohérence forte
Résumé de la compréhension de la cohérence pour les bases de données vectorielles
Qu’est-ce que la cohérence ?
L’une des définitions de la cohérence est « l’atteinte d’un niveau de performance qui ne varie pas beaucoup en qualité au fil du temps ». En ce qui concerne la cohérence pour votre base de données distribuée, elle vous fournit les données les plus exactes et les plus à jour que vous demandez. C’est pourquoi Milvus offre la possibilité de « régler » votre cohérence en fonction du degré de fraîcheur requis pour les données auxquelles vous souhaitez accéder.
Différents types de bases de données ont des exigences de cohérence supplémentaires. Par exemple, les bases de données non relationnelles ont souvent des exigences « éventuelles » ou ACID (atomicité, cohérence, isolation et durabilité) assouplies. Vous pouvez obtenir des données partiellement mises à jour lorsque vous travaillez avec des bases de données NoSQL.
D’autre part, les bases de données SQL conformes à ACID comme Postgres ont des exigences de cohérence différentes. Ces bases de données garantissent que vous ne récupérerez pas de données partiellement mises à jour en imposant la cohérence au niveau d’une modification. Ainsi, lorsque vous interrogez, vous devez attendre que toute votre modification ait lieu pour récupérer les données issues de cette modification.
Exigences de cohérence des bases de données vectorielles
Pendant ce temps, les bases de données vectorielles ont des exigences de cohérence différentes de celles des bases de données relationnelles ou non relationnelles. Vous pouvez avoir des données valides avant même qu’une modification par lot ne soit entièrement terminée. Cependant, vous ne pouvez pas avoir de données partiellement mises à jour. Les bases de données vectorielles fonctionnent selon le théorème PACELC. C’est exactement ce que fait Milvus grâce à sa configuration pub-sub. Chaque ligne est « publiée » via le pipeline d’écriture et « souscrite » par les nœuds nécessaires. Cette configuration vous permet de rechercher ou d’interroger Milvus et d’obtenir des résultats en fonction des différences d’horodatage.
Cohérence, disponibilité et partitions (CAP)
Le théorème CAP est un concept d’informatique qui affirme qu’il existe un compromis entre cohérence, disponibilité et tolérance au partitionnement. Vous ne pouvez choisir que deux des trois. Lorsqu’il y a une partition réseau, vous devez choisir entre disponibilité et cohérence. Un système qui exige une forte disponibilité des données nécessite des répliques, ce qui rend la cohérence plus difficile.
Le théorème PACELC est une extension du théorème CAP. C’est le théorème CAP + else + latence + cohérence. Il affirme que vous n’avez pas besoin de vous préoccuper des compromis entre disponibilité et cohérence dans un système sans partitions réseau. Cependant, vous devez tout de même choisir entre latence et cohérence, car vous devez attendre que les données se synchronisent.
Quels niveaux de cohérence Milvus offre-t-il ?
Milvus offre quatre niveaux de cohérence différents. Du moins cohérent au plus cohérent, ce sont : Eventual, Session, Bounded et Strong. La cohérence éventuelle signifie que vous êtes prêt à attendre jusqu’à ce que « ... quand cela arrivera » se produise. La cohérence forte signifie que vous voulez inclure toutes les données au moment où vous envoyez la requête. Session et Bounded se situent entre les deux. Examinons cela de plus près.
Pouvez-vous deviner quels emojis représentent quels niveaux ?
Cohérence éventuelle
La cohérence éventuelle (ou « Eventually ») signifie que les données finiront par être cohérentes sur toutes les répliques. Nous utilisons la cohérence éventuelle lorsque nous accordons plus d’importance à la vitesse d’une application qu’au fait d’avoir les données les plus à jour ou des requêtes reproductibles. Pour Milvus, ce type de cohérence signifie que nous mettons en œuvre l’exigence de cohérence en ignorant la vérification de l’horodatage lors de la lecture.
Un exemple de cas d’utilisation de ce type de niveau de cohérence pourrait être la récupération d’avis sur des produits. La plupart des utilisateurs ne liront pas tous les avis sur un produit, donc obtenir les avis les plus récents n’est pas d’une grande importance. Si vous souhaitez créer une collection avec ce niveau de cohérence, le code ci-dessous montre comment créer une collection avec une cohérence de niveau « Eventually » dans Milvus. Il est important de noter que consistency_level attend le mot-clé « Eventually ».
Cohérence de session
La cohérence de session signifie que chaque session est au moins à jour sur la base de ses propres écritures. Une session peut avoir plusieurs répliques, c’est donc le premier compromis latence-cohérence. Nous utilisons la cohérence de session lorsque nous n’avons besoin d’enregistrer notre état qu’une seule fois par session. Milvus met en œuvre ce type de cohérence en définissant l’horodatage requis sur l’heure de la dernière écriture.
En pratique, vous pouvez utiliser la cohérence de session lorsque vous avez besoin que chaque instance client-serveur ait une cohérence des données. Un exemple est un serveur de jeu vidéo. Vous ne voulez pas laisser les joueurs faire des glitches infinis, vous devez donc garantir la cohérence à l’intérieur de chaque instance ou session. Le code ci-dessous montre comment effectuer une recherche vectorielle en utilisant un niveau de cohérence « Session ».
Cohérence bornée
La cohérence bornée (ou obsolescence bornée) est un cran « plus cohérente » que la cohérence de session. Avec la cohérence de niveau « Session », les autres instances, ou sessions, sont traitées comme éventuellement cohérentes. L’obsolescence bornée force chaque instance et réplique à se synchroniser dans un certain délai.
Un exemple d’obsolescence bornée pourrait être un moteur de recommandation de vidéos. Les utilisateurs n’auront pas besoin des dernières vidéos immédiatement, mais devraient les voir bientôt. Les modifications d’un utilisateur devraient également se propager rapidement en dehors de sa session. Le code ci-dessous montre comment rechercher dans Milvus avec une exigence de cohérence bornée.
Cohérence forte
La cohérence forte rend les données disponibles au moment où vous les insérez. Bien sûr, cette cohérence s’accompagne d’un compromis de latence : nous devons attendre que le système change. En pratique, Milvus met en œuvre cette cohérence en définissant l’horodatage de lecture requis sur la dernière mise à jour du système. Cela porte notre latence de recherche à un minimum de 200 ms.
Un exemple de cohérence forte pourrait être la détection de fraude. Si quelqu’un utilise votre compte bancaire à des fins frauduleuses, vous devez le savoir et l’arrêter immédiatement. Les applications qui nécessitent une configuration de type lecture après écriture ont besoin d’une cohérence forte. Le code ci-dessous montre comment interroger une collection (recherche filtrée sans vecteurs) avec une exigence de cohérence forte.
Résumé de la compréhension de la cohérence pour les bases de données vectorielles
La cohérence des données est l’un des éléments les plus importants à prendre en compte lors de la création de votre application distribuée. Chaque application a besoin de données, et toutes les données ont besoin de certaines exigences de cohérence. En ce qui concerne les données vectorielles, nous devons évaluer la cohérence des données par rapport aux exigences de cohérence basées sur les lignes.
Conformément à ces exigences, Milvus propose quatre niveaux de cohérence basés sur l’horodatage des données. Notez que cela n’est possible que pour la cohérence basée sur les lignes et n’est pas implémenté dans les bases de données SQL ou NoSQL. Les quatre niveaux de cohérence, du plus au moins cohérent, sont forte, bornée, session et éventuelle.
La cohérence forte garantit que nous disposons de toutes les données les plus à jour disponibles dans l’ensemble du système (presque) immédiatement. Ce niveau de cohérence est atteint en mettant à jour l’horodatage avec l’horodatage de la dernière insertion, ce qui garantit que nous pouvons interroger toutes les données insérées jusqu’au moment de la requête.
La cohérence bornée garantit que nous disposons de toutes les données les plus à jour dans l’ensemble du système dans un délai fixe. La cohérence bornée définit l’horodatage à vérifier dans une certaine période à partir de la requête. De cette façon, nous disposons de toutes les données dans une période bornée. La cohérence bornée est le paramètre par défaut dans Milvus.
La cohérence de session garantit que nous disposons de toutes les données les plus à jour dans la session actuelle sur laquelle nous travaillons. Milvus atteint ce niveau de cohérence en définissant l’horodatage de chaque instance sur la dernière fois où cette instance a inséré des données. De cette façon, nous disposons de toutes les données insérées dans (au moins) l’instance que nous utilisons.
Enfin, la cohérence éventuelle (mot-clé « Eventually ») garantit qu’à terme, les données de l’ensemble du système seront toutes cohérentes. Les données peuvent proliférer et sont synchronisées vers les réplicas au rythme qui convient. Bien que nous fassions un compromis sur une partie de la cohérence des données, nous obtenons en retour une meilleure disponibilité et de meilleures performances. En pratique, ce niveau de cohérence ne prend pas longtemps. Milvus implémente la cohérence éventuelle en ignorant la vérification de l’horodatage et en exécutant immédiatement les recherches ou les requêtes.
Continuer à lire

My Wife Wanted Dior. I Spent $600 on Claude Code to Vibe-Code a 2M-Line Database Instead.
Write tests, not code reviews. How a test-first workflow with 6 parallel Claude Code sessions turns a 2M-line C++ codebase into a daily shipping pipeline.

Why and How to Migrate from Self-Hosted Milvus to Zilliz Cloud
A simple, step-by-step guide to migrating from Milvus to Zilliz Cloud. Learn both endpoint and backup methods for a smooth, scalable vector database migration.

Why Teams Are Migrating from Weaviate to Zilliz Cloud — and How to Do It Seamlessly
Explore how Milvus scales for large datasets and complex queries with advanced features, and discover how to migrate from Weaviate to Zilliz Cloud.



