🚀 Testen Sie Zilliz Cloud, die vollständig verwaltete Milvus, kostenlos – erleben Sie 10x schnellere Leistung! Jetzt testen>>

milvus-logo
LFAI
  • Home
  • Blog
  • Verständnis der Konsistenzebene in der Milvus-Vektordatenbank - Teil II

Verständnis der Konsistenzebene in der Milvus-Vektordatenbank - Teil II

  • Engineering
September 13, 2022
Jiquan Long

Cover_image Cover_Bild

Dieser Artikel wurde von Jiquan Long geschrieben und von Angela Ni umgeschrieben.

Im vorherigen Blog über Konsistenz haben wir erklärt, was Konsistenz in einer verteilten Vektordatenbank bedeutet, die vier Konsistenzstufen - strong, bounded staleness, session und eventual - behandelt, die in der Milvus-Vektordatenbank unterstützt werden, und das am besten geeignete Anwendungsszenario für jede Konsistenzstufe erläutert.

In diesem Beitrag werden wir weiterhin den Mechanismus untersuchen, der es den Benutzern der Milvus-Vektordatenbank ermöglicht, flexibel die ideale Konsistenzstufe für verschiedene Anwendungsszenarien zu wählen. Wir werden auch eine grundlegende Anleitung zur Einstellung der Konsistenzstufe in der Milvus-Vektordatenbank geben.

Sprung zu:

Der zugrunde liegende Zeittick-Mechanismus

Milvus verwendet den Time-Tick-Mechanismus, um bei einer Vektorsuche oder -abfrage verschiedene Konsistenzniveaus zu gewährleisten. Time Tick ist das Wasserzeichen von Milvus, das wie eine Uhr in Milvus funktioniert und anzeigt, zu welchem Zeitpunkt sich das Milvus-System befindet. Jedes Mal, wenn eine DML-Anfrage (Data Manipulation Language) an die Milvus-Vektordatenbank gesendet wird, weist sie der Anfrage einen Zeitstempel zu. Wie in der nachstehenden Abbildung gezeigt, markiert Milvus nicht nur die eingefügten Daten mit einem Zeitstempel, sondern fügt auch in regelmäßigen Abständen Zeitmarken ein, wenn beispielsweise neue Daten in die Nachrichtenwarteschlange eingefügt werden.

timetick Zeitstempel

Nehmen wir syncTs1 in der obigen Abbildung als Beispiel. Wenn nachgeschaltete Verbraucher wie Abfrageknoten syncTs1 sehen, verstehen die Verbraucherkomponenten, dass alle Daten, die vor syncTs1 eingefügt wurden, verbraucht wurden. Mit anderen Worten, die Dateneinfügeanforderungen, deren Zeitstempelwerte kleiner als syncTs1 sind, erscheinen nicht mehr in der Nachrichtenwarteschlange.

Garantie des Zeitstempels

Wie im vorigen Abschnitt erwähnt, erhalten nachgelagerte Verbraucherkomponenten wie Abfrageknoten kontinuierlich Nachrichten über Dateneinfügeanforderungen und Zeitstempel aus der Nachrichtenwarteschlange. Jedes Mal, wenn ein Zeitstempel verbraucht wird, markiert der Abfrageknoten diesen verbrauchten Zeitstempel als nutzbare Zeit - ServiceTime und alle vor ServiceTime eingefügten Daten sind für den Abfrageknoten sichtbar.

Zusätzlich zu ServiceTime verwendet Milvus auch eine Art von Zeitstempel - Garantiezeitstempel (GuaranteeTS), um den Bedarf an verschiedenen Konsistenz- und Verfügbarkeitsniveaus für verschiedene Benutzer zu erfüllen. Dies bedeutet, dass die Benutzer der Milvus-Vektordatenbank GuaranteeTs angeben können, um den Abfrageknoten mitzuteilen, dass alle Daten vor GuaranteeTs sichtbar und beteiligt sein sollten, wenn eine Suche oder Abfrage durchgeführt wird.

Es gibt normalerweise zwei Szenarien, wenn der Abfrageknoten eine Suchanfrage in der Milvus-Vektordatenbank ausführt.

Szenario 1: Sofortige Ausführung der Suchanfrage

Wenn GuaranteeTs kleiner als ServiceTime ist, kann der Abfrageknoten die Suchanfrage sofort ausführen, wie in der folgenden Abbildung gezeigt.

execute_immediately ausführen_unmittelbar

Szenario 2: Warten bis "ServiceTime > GuaranteeTs"

Wenn GuaranteeTs größer ist als ServiceTime, müssen Abfrageknoten weiterhin Zeitticks aus der Nachrichtenwarteschlange verbrauchen. Suchanfragen können erst ausgeführt werden, wenn ServiceTime größer als GuaranteeTs ist.

wait_search wait_search

Konsistenzstufen

Daher ist GuaranteeTs in der Suchanfrage konfigurierbar, um die von Ihnen angegebene Konsistenzstufe zu erreichen. Ein GuaranteeTs mit einem großen Wert gewährleistet starke Konsistenz auf Kosten einer hohen Suchlatenz. Ein GuaranteeTs mit einem kleinen Wert verringert die Suchlatenz, aber die Sichtbarkeit der Daten ist beeinträchtigt.

GuaranteeTs in Milvus ist ein hybrides Zeitstempelformat. Und der Benutzer hat keine Ahnung von der TSO innerhalb von Milvus. Daher ist die Angabe des Wertes vonGuaranteeTs eine viel zu komplizierte Aufgabe für die Benutzer. Um den Benutzern die Mühe zu ersparen und eine optimale Benutzererfahrung zu bieten, verlangt Milvus von den Benutzern nur, dass sie die spezifische Konsistenzstufe wählen, und die Milvus-Vektordatenbank wird den Wert GuaranteeTs automatisch für die Benutzer verarbeiten. Das heißt, dass der Milvus-Benutzer nur eine der vier Konsistenzstufen auswählen muss: Strong, Bounded, Session, und Eventually. Und jede der Konsistenzstufen entspricht einem bestimmten GuaranteeTs Wert.

Die folgende Abbildung zeigt die GuaranteeTs für jede der vier Konsistenzstufen in der Milvus-Vektordatenbank.

guarantee_ts garantie_ts

Die Milvus-Vektordatenbank unterstützt vier Konsistenzstufen:

  • CONSISTENCY_STRONG GuaranteeTs ist auf denselben Wert wie der letzte Systemzeitstempel gesetzt, und Abfrageknoten warten, bis die Servicezeit auf den letzten Systemzeitstempel übergeht, um die Such- oder Abfrageanfrage zu bearbeiten.

  • CONSISTENCY_EVENTUALLY GuaranteeTs wird auf einen Wert gesetzt, der unwesentlich kleiner als der letzte Systemzeitstempel ist, um die Konsistenzprüfung zu überspringen. Abfrageknoten suchen sofort in der vorhandenen Datenansicht.

  • CONSISTENCY_BOUNDED GuaranteeTs wird auf einen Wert gesetzt, der relativ kleiner als der letzte Systemzeitstempel ist, und Abfrageknoten suchen in einer tolerierbar weniger aktualisierten Datenansicht.

  • CONSISTENCY_SESSION: Der Client verwendet den Zeitstempel des letzten Schreibvorgangs als GuaranteeTs, so dass jeder Client zumindest die von ihm selbst eingefügten Daten abrufen kann.

Wie kann man den Konsistenzgrad in Milvus einstellen?

Milvus unterstützt die Einstellung des Konsistenzniveaus bei der Erstellung einer Sammlung oder bei der Durchführung einer Suche oder Abfrage.

Um eine Vektorgleichheitssuche mit dem gewünschten Konsistenzniveau durchzuführen, setzen Sie einfach den Wert für den Parameter consistency_level entweder auf Strong, Bounded, Session oder Eventually. Wenn Sie den Wert für den Parameter consistency_level nicht setzen, ist das Konsistenzniveau standardmäßig Bounded. Das Beispiel führt eine Vektorähnlichkeitssuche mit der Konsistenz Strong durch.

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

Durchführen einer Vektorabfrage

Ähnlich wie bei der Durchführung einer Vektorähnlichkeitssuche können Sie bei der Durchführung einer Vektorabfrage den Wert für den Parameter consistency_level angeben. Das Beispiel führt eine Vektorabfrage mit der Konsistenz Strong durch.

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

Was kommt als Nächstes?

Mit der offiziellen Freigabe von Milvus 2.1 haben wir eine Reihe von Blogs vorbereitet, in denen die neuen Funktionen vorgestellt werden. Lesen Sie mehr in dieser Blogserie:

Like the article? Spread the word

Weiterlesen