Milvus
Zilliz
  • Home
  • Blog
  • JSON Shredding in Milvus: 88,9x schnellere JSON-Filterung mit Flexibilität

JSON Shredding in Milvus: 88,9x schnellere JSON-Filterung mit Flexibilität

  • Engineering
December 04, 2025
Jack Zhang

Moderne KI-Systeme produzieren mehr halbstrukturierte JSON-Daten als je zuvor. Kunden- und Produktinformationen werden zu einem JSON-Objekt komprimiert, Microservices geben bei jeder Anfrage JSON-Protokolle aus, IoT-Geräte streamen Sensormesswerte in leichtgewichtigen JSON-Payloads, und die heutigen KI-Anwendungen standardisieren zunehmend JSON für strukturierte Ausgaben. Das Ergebnis ist eine Flut von JSON-ähnlichen Daten, die in Vektordatenbanken fließen.

Traditionell gibt es zwei Möglichkeiten, JSON-Dokumente zu verarbeiten:

  • Jedes JSON-Feld wird in einem festen Schema vordefiniert und ein Index erstellt: Dieser Ansatz liefert eine solide Abfrageleistung, ist aber starr. Sobald sich das Datenformat ändert, löst jedes neue oder geänderte Feld eine weitere Runde mühsamer DDL-Aktualisierungen und Schemamigrationen aus.

  • Speichern Sie das gesamte JSON-Objekt als eine einzige Spalte (sowohl der JSON-Typ als auch das dynamische Schema in Milvus verwenden diesen Ansatz): Diese Option bietet eine ausgezeichnete Flexibilität, allerdings auf Kosten der Abfrageleistung. Jede Abfrage erfordert ein JSON-Parsing zur Laufzeit und oft einen vollständigen Tabellenscan, was zu einer Latenz führt, die mit wachsendem Datensatz ansteigt.

Früher war dies ein Dilemma zwischen Flexibilität und Leistung.

Mit der neu eingeführten JSON Shredding-Funktion in Milvus ist dies nicht mehr der Fall.

Mit der Einführung von JSON Shredding erreicht Milvus jetzt eine schemafreie Flexibilität mit der Leistung einer spaltenbasierten Speicherung, wodurch große semi-strukturierte Daten endlich sowohl flexibel als auch abfragefreundlich werden.

Wie JSON Shredding funktioniert

JSON Shredding beschleunigt JSON-Abfragen durch die Umwandlung von zeilenbasierten JSON-Dokumenten in einen hochoptimierten spaltenbasierten Speicher. Milvus bewahrt die Flexibilität von JSON für die Datenmodellierung und optimiert gleichzeitig automatisch die spaltenbasierte Speicherung, was den Datenzugriff und die Abfrageleistung erheblich verbessert.

Um spärliche oder seltene JSON-Felder effizient zu handhaben, verfügt Milvus auch über einen invertierten Index für gemeinsame Schlüssel. All dies geschieht für die Benutzer transparent: Sie können JSON-Dokumente wie gewohnt einfügen und es Milvus überlassen, die optimale Speicher- und Indexierungsstrategie intern zu verwalten.

Wenn Milvus JSON-Rohdatensätze mit unterschiedlichen Formen und Strukturen empfängt, analysiert es jeden JSON-Schlüssel auf die Häufigkeit seines Auftretens und die Stabilität seines Typs (ob sein Datentyp in allen Dokumenten gleich ist). Auf der Grundlage dieser Analyse wird jeder Schlüssel in eine von drei Kategorien eingeteilt:

  • Getippte Schlüssel: Schlüssel, die in den meisten Dokumenten vorkommen und immer den gleichen Datentyp haben (z. B. alle Ganzzahlen oder alle Zeichenketten).

  • Dynamische Schlüssel: Schlüssel, die häufig vorkommen, aber unterschiedliche Datentypen haben (z. B. manchmal eine Zeichenkette, manchmal eine ganze Zahl).

  • Gemeinsame Schlüssel: Schlüssel, die selten, spärlich oder verschachtelt sind und unter einen konfigurierbaren Häufigkeitsschwellenwert fallen.

Milvus behandelt jede Kategorie anders, um die Effizienz zu maximieren:

  • Typisierte Schlüssel werden in speziellen, stark typisierten Spalten gespeichert.

  • Dynamische Schlüssel werden auf der Grundlage des tatsächlichen Werttyps, der zur Laufzeit beobachtet wird, in dynamische Spalten eingeordnet.

  • Sowohl typisierte als auch dynamische Spalten werden in Arrow/Parquet-Spaltenformaten gespeichert, um ein schnelles Scannen und eine hochgradig optimierte Abfrageausführung zu ermöglichen.

  • Gemeinsam genutzte Schlüssel werden in einer kompakten binären JSON-Spalte zusammengefasst, die von einem invertierten Index für gemeinsam genutzte Schlüssel begleitet wird. Dieser Index beschleunigt die Abfrage von Feldern mit geringer Häufigkeit, indem er irrelevante Zeilen frühzeitig ausschneidet und die Suche auf die Dokumente beschränkt, die den abgefragten Schlüssel enthalten.

Diese Kombination aus adaptiver spaltenförmiger Speicherung und invertierter Indexierung bildet den Kern des JSON-Shredding-Mechanismus von Milvus und ermöglicht sowohl Flexibilität als auch hohe Leistung im großen Maßstab.

Der gesamte Arbeitsablauf ist unten dargestellt:

Nachdem wir nun die Grundlagen der Funktionsweise von JSON Shredding kennengelernt haben, wollen wir uns die Schlüsselfunktionen genauer ansehen, die diesen Ansatz sowohl flexibel als auch leistungsstark machen.

Shredding und Kolumnarisierung

Wenn ein neues JSON-Dokument geschrieben wird, zerlegt Milvus es und reorganisiert es in eine optimierte spaltenförmige Speicherung:

  • Typisierte und dynamische Schlüssel werden automatisch identifiziert und in speziellen Spalten gespeichert.

  • Wenn das JSON verschachtelte Objekte enthält, generiert Milvus automatisch pfadbasierte Spaltennamen. Zum Beispiel kann ein name Feld innerhalb eines user Objekts mit dem Spaltennamen /user/name gespeichert werden.

  • Gemeinsam genutzte Schlüssel werden zusammen in einer einzigen, kompakten binären JSON-Spalte gespeichert. Da diese Schlüssel nur selten vorkommen, erstellt Milvus für sie einen invertierten Index, der eine schnelle Filterung ermöglicht und es dem System erlaubt, schnell die Zeilen zu finden, die den angegebenen Schlüssel enthalten.

Intelligentes Spaltenmanagement

Milvus zerlegt JSON nicht nur in Spalten, sondern fügt durch dynamisches Spaltenmanagement eine zusätzliche Intelligenzschicht hinzu, die sicherstellt, dass JSON Shredding flexibel bleibt, wenn sich die Daten weiterentwickeln.

  • Spalten werden nach Bedarf erstellt: Wenn neue Schlüssel in eingehenden JSON-Dokumenten auftauchen, gruppiert Milvus automatisch Werte mit demselben Schlüssel in einer eigenen Spalte. Dadurch bleiben die Leistungsvorteile der spaltenbasierten Speicherung erhalten, ohne dass die Benutzer im Voraus Schemata entwerfen müssen. Milvus ermittelt auch den Datentyp neuer Felder (z. B. INTEGER, DOUBLE, VARCHAR) und wählt ein effizientes Spaltenformat für sie aus.

  • Jeder Schlüssel wird automatisch verarbeitet: Milvus analysiert und verarbeitet jeden Schlüssel im JSON-Dokument. Dies gewährleistet eine breite Abfrageabdeckung, ohne dass die Benutzer gezwungen sind, Felder im Voraus zu definieren oder Indizes zu erstellen.

Abfrage-Optimierung

Sobald die Daten in den richtigen Spalten reorganisiert sind, wählt Milvus den effizientesten Ausführungspfad für jede Abfrage:

  • Direkte Spaltenscans für getippte und dynamische Schlüssel: Wenn eine Abfrage auf ein Feld abzielt, das bereits in eine eigene Spalte aufgeteilt wurde, kann Milvus diese Spalte direkt scannen. Dadurch wird die Gesamtmenge der zu verarbeitenden Daten reduziert und die SIMD-beschleunigte Spaltenberechnung für eine noch schnellere Ausführung genutzt.

  • Indizierte Suche für gemeinsame Schlüssel: Wenn die Abfrage ein Feld umfasst, das nicht in eine eigene Spalte verschoben wurde - typischerweise ein seltener Schlüssel - wertet Milvus sie anhand der Spalte mit dem gemeinsamen Schlüssel aus. Der auf dieser Spalte aufgebaute invertierte Index ermöglicht es Milvus, schnell zu erkennen, welche Zeilen den angegebenen Schlüssel enthalten, und den Rest zu überspringen, was die Leistung für Felder mit geringer Häufigkeit erheblich verbessert.

  • Automatische Metadatenverwaltung: Milvus verwaltet kontinuierlich globale Metadaten und Wörterbücher, so dass Abfragen auch dann präzise und effizient bleiben, wenn sich die Struktur der eingehenden JSON-Dokumente im Laufe der Zeit verändert.

Leistungsvergleiche

Wir haben einen Benchmark entwickelt, um die Abfrageleistung der Speicherung des gesamten JSON-Dokuments als einzelnes Rohfeld mit der Verwendung der neu veröffentlichten JSON Shredding-Funktion zu vergleichen.

Testumgebung und Methodik

  • Hardware: 1-Kern/8-GB-Cluster

  • Datensatz: 1 Million Dokumente aus JSONBench

  • Methodik: Messung von QPS und Latenz über verschiedene Abfragemuster hinweg

Ergebnisse: Eingetippte Schlüssel

Bei diesem Test wurde die Leistung bei der Abfrage eines in den meisten Dokumenten vorhandenen Schlüssels gemessen.

Abfrage-AusdruckQPS (ohne Schreddern)QPS (mit Zerkleinerung)Leistungssteigerung
json['time_us'] > 08.69287.533x
json['kind'] == 'commit'8.42126.114.9x

Ergebnisse: gemeinsam genutzte Schlüssel

Dieser Test konzentrierte sich auf die Abfrage von spärlichen, verschachtelten Schlüsseln, die in die Kategorie "shared" fallen.

Abfrage AusdruckQPS (ohne Schreddern)QPS (mit Zerkleinerung)Leistungssteigerung
json['identity']['seq'] > 04.3338588.9x
json['identity']['did'] == 'xxxxx'7.635246.3x

Abfragen mit geteilten Schlüsseln zeigen die dramatischsten Verbesserungen (bis zu 89× schneller), während Abfragen mit getippten Schlüsseln konsistente 15-30× Geschwindigkeitssteigerungen liefern. Insgesamt profitiert jeder Abfragetyp von JSON Shredding, mit deutlichen Leistungssteigerungen in allen Bereichen.

Testen Sie es jetzt

Ganz gleich, ob Sie mit API-Protokollen, IoT-Sensordaten oder sich schnell entwickelnden Anwendungs-Payloads arbeiten, JSON Shredding bietet Ihnen die seltene Möglichkeit, sowohl Flexibilität als auch hohe Leistung zu erhalten.

Die Funktion ist ab sofort verfügbar und Sie sind herzlich eingeladen, sie jetzt auszuprobieren. Weitere Details finden Sie in diesem Dokument.

Haben Sie Fragen oder möchten Sie eine Funktion des neuesten Milvus genauer kennenlernen? Treten Sie unserem Discord-Kanal bei oder stellen Sie Fragen auf GitHub. Sie können auch eine 20-minütige Einzelsitzung buchen, um Einblicke, Anleitung und Antworten auf Ihre Fragen über die Milvus Office Hours zu erhalten.

    Try Managed Milvus for Free

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

    Get Started

    Like the article? Spread the word

    Weiterlesen