milvus-logo
LFAI
Home
  • FAQs

Leistung FAQ

Wie stellt man nlist und nprobe für IVF-Indizes ein?

Die Einstellung von nlist ist szenariospezifisch. Als Faustregel gilt, dass der empfohlene Wert von nlist 4 × sqrt(n) ist, wobei n die Gesamtzahl der Entitäten in einem Segment ist.

Die Größe der einzelnen Segmente wird durch den Parameter datacoord.segment.maxSize bestimmt, der standardmäßig auf 512 MB eingestellt ist. Die Gesamtzahl der Entitäten in einem Segment n kann geschätzt werden, indem datacoord.segment.maxSize durch die Größe der einzelnen Entitäten dividiert wird.

Die Einstellung von nprobe ist spezifisch für den Datensatz und das Szenario und beinhaltet einen Kompromiss zwischen Genauigkeit und Abfrageleistung. Wir empfehlen, den idealen Wert durch wiederholtes Experimentieren zu finden.

Die folgenden Diagramme zeigen die Ergebnisse eines Tests, der mit dem sift50m-Datensatz und dem IVF_SQ8-Index durchgeführt wurde und bei dem die Abruf- und Abfrageleistung verschiedener nlist/nprobe -Paare verglichen wurde.

Accuracy test Genauigkeits-Test Performance testLeistungs-Test

Warum dauern Abfragen auf kleineren Datensätzen manchmal länger?

Abfrageoperationen werden auf Segmenten durchgeführt. Indizes verringern die Zeit, die für die Abfrage eines Segments benötigt wird. Wenn ein Segment nicht indiziert wurde, greift Milvus auf eine Brute-Force-Suche in den Rohdaten zurück, was die Abfragezeit drastisch erhöht.

Daher dauert die Abfrage eines kleinen Datensatzes (einer Sammlung) in der Regel länger, da kein Index erstellt wurde. Der Grund dafür ist, dass die Größe der Segmente nicht den von rootCoord.minSegmentSizeToEnableindex festgelegten Schwellenwert für die Indexerstellung erreicht hat. Rufen Sie create_index() auf, um Milvus zu zwingen, Segmente zu indizieren, die den Schwellenwert erreicht haben, aber noch nicht automatisch indiziert wurden, was die Abfrageleistung erheblich verbessert.

Welche Faktoren beeinflussen die CPU-Auslastung?

Die CPU-Auslastung steigt, wenn Milvus Indizes aufbaut oder Abfragen ausführt. Im Allgemeinen ist die Indexerstellung CPU-intensiv, außer bei Verwendung von Annoy, das auf einem einzigen Thread läuft.

Bei der Ausführung von Abfragen wird die CPU-Auslastung durch nq und nprobe beeinflusst. Wenn nq und nprobe klein sind, ist die Gleichzeitigkeit gering und die CPU-Auslastung bleibt niedrig.

Wirkt sich das gleichzeitige Einfügen von Daten und Suchen auf die Abfrageleistung aus?

Einfügevorgänge sind nicht CPU-intensiv. Da jedoch neue Segmente möglicherweise noch nicht den Schwellenwert für den Indexaufbau erreicht haben, greift Milvus auf eine Brute-Force-Suche zurück, was die Abfrageleistung erheblich beeinträchtigt.

Der Parameter rootcoord.minSegmentSizeToEnableIndex bestimmt den Schwellenwert für die Indexerstellung für ein Segment und ist standardmäßig auf 1024 Zeilen eingestellt. Siehe Systemkonfiguration für weitere Informationen.

Kann die Indizierung eines VARCHAR-Feldes die Löschgeschwindigkeit verbessern?

Die Indizierung eines VARCHAR-Feldes kann die "Delete By Expression"-Operationen beschleunigen, allerdings nur unter bestimmten Bedingungen:

  • INVERTED Index: Dieser Index hilft bei IN oder == Ausdrücken auf VARCHAR-Feldern mit nicht primären Schlüsseln.
  • Trie-Index: Dieser Index hilft bei Präfix-Abfragen (z.B. LIKE prefix%) auf nicht-primären VARCHAR-Feldern.

Die Indizierung eines VARCHAR-Feldes führt jedoch nicht zu einer Beschleunigung:

  • Löschen nach IDs: Wenn das VARCHAR-Feld der Primärschlüssel ist.
  • Unverbundene Ausdrücke: Wenn das VARCHAR-Feld nicht Teil des Löschausdrucks ist.

Haben Sie noch Fragen?

Sie können:

  • Schauen Sie sich Milvus auf GitHub an. Sie können Fragen stellen, Ideen austauschen und anderen helfen.
  • Treten Sie unserem Slack-Kanal bei, um Unterstützung zu erhalten und sich mit unserer Open-Source-Community auszutauschen.

Übersetzt vonDeepL

Tabelle der Inhalte

Try Managed Milvus for Free

Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.

Get Started
Feedback

War diese Seite hilfreich?