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

milvus-logo
LFAI

HomeBlogsSteigern Sie den Lesedurchsatz Ihrer Vektordatenbank mit In-Memory-Replikaten

Steigern Sie den Lesedurchsatz Ihrer Vektordatenbank mit In-Memory-Replikaten

  • Engineering
August 22, 2022
Congqi Xia

Cover_image Cover_Bild

Dieser Artikel wurde gemeinsam von Congqi Xia und Angela Ni verfasst.

Mit der offiziellen Freigabe von Milvus 2.1 werden viele neue Funktionen eingeführt, die für mehr Komfort und eine bessere Benutzererfahrung sorgen. Obwohl das Konzept der In-Memory-Replik in der Welt der verteilten Datenbanken nichts Neues ist, handelt es sich dabei um eine wichtige Funktion, mit der Sie die Systemleistung steigern und die Systemverfügbarkeit mühelos verbessern können. In diesem Beitrag wird daher erklärt, was eine In-Memory-Replik ist und warum sie wichtig ist. Außerdem wird erläutert, wie diese neue Funktion in Milvus, einer Vektordatenbank für KI, aktiviert werden kann.

Springe zu:

Bevor wir erfahren, was ein In-Memory-Replikat ist und warum es wichtig ist, müssen wir zunächst einige relevante Konzepte verstehen, darunter Replikatgruppe, Shard-Replikat, Streaming-Replikat, historisches Replikat und Shard-Leader. Die folgende Abbildung veranschaulicht diese Konzepte.

Replica_concepts Replikat_Konzepte

Replikatgruppe

Eine Replikatgruppe besteht aus mehreren Abfrageknoten, die für die Verarbeitung historischer Daten und Replikate zuständig sind.

Shard-Replikat

Ein Shard-Replikat besteht aus einem Streaming-Replikat und einem historischen Replikat, die beide zum selben Shard gehören (d. h. DML-Kanal). Mehrere Shard-Replikate bilden eine Replikatgruppe. Die genaue Anzahl der Shard-Replikate in einer Replikatgruppe wird durch die Anzahl der Shards in einer bestimmten Sammlung bestimmt.

Streaming-Replikat

Ein Streaming-Replikat enthält alle wachsenden Segmente desselben DML-Kanals. Technisch gesehen sollte ein Streaming-Replikat nur von einem Abfrageknoten in einem Replikat bedient werden.

Historisches Replikat

Ein historisches Replikat enthält alle versiegelten Segmente aus demselben DML-Kanal. Die versiegelten Segmente eines historischen Replikats können auf mehrere Abfrageknoten innerhalb derselben Replikatgruppe verteilt werden.

Shard-Leader

Ein Shard-Leader ist der Abfrageknoten, der das Streaming-Replikat in einem Shard-Replikat bedient.

Was ist eine In-Memory-Replik?

Die Aktivierung von In-Memory-Replikaten ermöglicht es Ihnen, Daten in einer Sammlung auf mehrere Abfrageknoten zu laden, so dass Sie zusätzliche CPU- und Speicherressourcen nutzen können. Diese Funktion ist sehr nützlich, wenn Sie einen relativ kleinen Datensatz haben, aber den Lesedurchsatz erhöhen und die Nutzung der Hardwareressourcen verbessern möchten.

Die Milvus-Vektordatenbank hält derzeit eine Replik für jedes Segment im Speicher. Mit speicherinternen Replikaten können Sie jedoch mehrere Replikationen eines Segments auf verschiedenen Abfrageknoten haben. Das heißt, wenn ein Abfrageknoten eine Suche in einem Segment durchführt, kann eine eingehende neue Suchanfrage einem anderen, nicht aktiven Abfrageknoten zugewiesen werden, da dieser Abfrageknoten eine Replikation genau desselben Segments besitzt.

Wenn wir außerdem mehrere speicherinterne Replikationen haben, können wir besser mit der Situation umgehen, dass ein Abfrageknoten ausfällt. Früher musste man warten, bis das Segment neu geladen war, um die Suche auf einem anderen Abfrageknoten fortzusetzen. Mit der In-Memory-Replikation kann die Suchanfrage jedoch sofort an einen neuen Abfrageknoten gesendet werden, ohne dass die Daten erneut geladen werden müssen.

Replication Replikation

Warum sind In-Memory-Replikationen wichtig?

Einer der wichtigsten Vorteile der Aktivierung von In-Memory-Replikationen ist die Steigerung der Gesamt-QPS (Abfrage pro Sekunde) und des Durchsatzes. Außerdem können mehrere Segmentreplikate verwaltet werden, und das System ist bei einem Failover widerstandsfähiger.

Aktivieren von In-Memory-Replikaten in der Milvus-Vektordatenbank

Die Aktivierung der neuen Funktion der In-Memory-Replikate ist in der Milvus-Vektordatenbank mühelos möglich. Alles, was Sie tun müssen, ist, die Anzahl der gewünschten Replikate beim Laden einer Sammlung anzugeben (d.h. collection.load() aufrufen).

Im folgenden Beispiel-Tutorial gehen wir davon aus, dass Sie bereits eine Sammlung mit dem Namen "Buch" erstellt und Daten in diese eingefügt haben. Dann können Sie den folgenden Befehl ausführen, um beim Laden einer Buchsammlung zwei Replikate zu erstellen.

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

Sie können die Anzahl der Replikate im obigen Beispielcode flexibel ändern, um sie an Ihr Anwendungsszenario anzupassen. Dann können Sie direkt eine Vektorähnlichkeitssuche oder -abfrage auf mehreren Replikaten durchführen, ohne zusätzliche Befehle ausführen zu müssen. Es ist jedoch zu beachten, dass die maximal zulässige Anzahl von Replikaten durch die Gesamtmenge des nutzbaren Speichers für die Abfrageknoten begrenzt ist. Wenn die Anzahl der Replikate, die Sie angeben, die Grenzen des nutzbaren Speichers überschreitet, wird beim Laden der Daten ein Fehler ausgegeben.

Sie können auch die Informationen der von Ihnen erstellten speicherinternen Replikate überprüfen, indem Sie collection.get_replicas() ausführen. Es werden die Informationen der Replikatgruppen und der entsprechenden Abfrageknoten und Shards zurückgegeben. Im Folgenden finden Sie ein Beispiel für die Ausgabe.

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

Was kommt als Nächstes?

Mit der offiziellen Veröffentlichung 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