Verständnis der Konsistenzebene in der Milvus-Vektordatenbank - Teil II
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
- Garantierter Zeitstempel
- Konsistenzstufen
- Wie stellt man den Konsistenzgrad in Milvus ein?
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.
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.
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
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.
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 alsGuaranteeTs
, 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.
Durchführen einer vektoriellen Ähnlichkeitssuche
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:
- Wie Sie String-Daten für Ihre Anwendungen zur Ähnlichkeitssuche nutzen können
- Verwendung von Embedded Milvus zur sofortigen Installation und Ausführung von Milvus mit Python
- Erhöhen Sie den Lesedurchsatz Ihrer Vektordatenbank mit In-Memory-Replikaten
- Verständnis der Konsistenzebene in der Milvus-Vektordatenbank
- Verständnis der Konsistenzebene in der Milvus-Vektordatenbank (Teil II)
- Wie gewährleistet die Milvus-Vektor-Datenbank die Datensicherheit?
- Der zugrunde liegende Zeittick-Mechanismus
- Garantie des Zeitstempels
- Konsistenzstufen
- Wie kann man den Konsistenzgrad in Milvus einstellen?
- Was kommt als Nächstes?
On This Page
Try Managed Milvus for Free
Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.
Get StartedLike the article? Spread the word