Heim Backend-Entwicklung XML/RSS-Tutorial Einführung in die neue XML-Verarbeitungsmethode VTD-XML

Einführung in die neue XML-Verarbeitungsmethode VTD-XML

Feb 28, 2017 pm 05:20 PM

Probleme

Wenn wir über die Verwendung von XML sprechen, ist der problematischste Teil normalerweise die Ausführlichkeit von XML und die Analysegeschwindigkeit von XML. Dieses Problem wird besonders gravierend, wenn große XML-Dateien verarbeitet werden müssen. Was ich hier erwähne, ist das Thema, wie die XML-Verarbeitungsgeschwindigkeit optimiert werden kann.

Wenn wir uns für die Verarbeitung von XML-Dateien entscheiden, haben wir im Allgemeinen zwei Möglichkeiten:

DOM, das W3C-Standardmodell, das XML-Strukturinformationen in Baumform erstellt und Schnittstellen und Methoden bereitstellt für das Durchqueren dieses Baumes.
SAX, ein Low-Level-Parser, führt eine elementweise Vorwärts-Leseverarbeitung durch und enthält keine Strukturinformationen.
Beide der oben genannten Optionen haben ihre eigenen Vor- und Nachteile, aber keine ist eine besonders gute Lösung. Ihre Vor- und Nachteile sind wie folgt:

DOM

Vorteile: Benutzerfreundlichkeit, Da alle XML-Strukturinformationen im Speicher vorhanden sind und die Durchquerung einfach ist und XPath unterstützt.
Nachteile: Die Parsing-Geschwindigkeit ist zu langsam, die Speichernutzung ist zu hoch (5x~10x der Originaldatei) und die Verwendung für große Dateien ist fast unmöglich.
SAX

Vorteile: Das Parsen ist schnell und die Speichernutzung hängt nicht von der Größe von XML ab (es kann durchgeführt werden, ohne dass der Speicher erhöht wird, wenn XML wächst).
Nachteile: Schlechte Benutzerfreundlichkeit, da keine Strukturinformationen vorhanden sind, nicht durchlaufen werden können und XPath nicht unterstützt wird. Wenn Sie eine Struktur benötigen, können Sie nur ein wenig lesen und ein wenig konstruieren, was die Wartbarkeit sehr schlecht macht.
Wir sehen, dass DOM und SAX im Grunde zwei gegensätzliche Extreme sind, aber keines von beiden kann die meisten unserer Anforderungen gut erfüllen. Wir müssen eine andere Verarbeitungsmethode finden. Beachten Sie, dass das Effizienzproblem mit XML kein Problem mit XML selbst ist, sondern ein Problem mit dem Parser, der XML verarbeitet, genau wie die beiden Methoden, die wir oben gesehen haben, unterschiedliche Effizienzkompromisse haben.

Denken

Wir mögen die Verwendung von DOM-ähnlichen Methoden, weil wir traversieren können, was bedeutet, dass XPath unterstützt werden kann, was die Benutzerfreundlichkeit erheblich verbessert, aber die Effizienz von DOM ist sehr gering . Wie wir bereits wissen, liegt das Effizienzproblem im Verarbeitungsmechanismus. Welche Aspekte von DOM beeinflussen also seine Effizienz? Lassen Sie uns eine umfassende Analyse durchführen:

Auf den meisten heutigen Plattformen, die auf der Technologie virtueller Maschinen (gehostet oder ein ähnlicher Mechanismus) basieren, ist die Erstellung und Zerstörung von Objekten eine zeitaufwändige Aufgabe (es lohnt sich). Da die Garbage Collection sehr zeitaufwändig ist, ist die große Anzahl der im DOM-Mechanismus verwendeten Objekterstellungs- und -zerstörungsvorgänge zweifellos einer der Gründe, die seine Effizienz beeinträchtigen (dies führt zu zu vielen Garbage Collections).
Jedes Objekt verfügt über zusätzliche 32 Bit zum Speichern seiner Speicheradresse. Wenn es eine große Anzahl von Objekten wie DOM gibt, sind diese zusätzlichen Kosten nicht gering.
Das Hauptproblem bei der Effizienz, das die beiden oben genannten Probleme verursacht, besteht darin, dass sowohl DOM als auch SAX extraktive Parsing-Modi sind. Dieser Parsing-Modus erfordert zwangsläufig eine große Anzahl von Erstellungs- (Zerstörungs-)Objekten für DOM und SAX, was zu Effizienzproblemen führt. Das sogenannte extraktive Parsen bedeutet, dass beim Parsen von XML, DOM oder SAX ein Teil der Originaldatei (im Allgemeinen eine Zeichenfolge) extrahiert und dann im Speicher analysiert und erstellt wird (die Ausgabe besteht natürlich aus einem oder mehreren Objekten). Nehmen Sie DOM als Beispiel. DOM analysiert jedes Element, jedes Attribut, jeden Verarbeitungsbefehl, jeden Kommentar usw. in ein Objekt und gibt ihm eine Struktur. Dies ist das sogenannte extraktive Parsen.
Ein weiteres Problem, das durch das Problem der Extraktivierung verursacht wird, ist die Aktualisierungseffizienz in DOM (SAX unterstützt keine Aktualisierung, daher werden wir es überhaupt nicht erwähnen), jedes Mal, wenn wir Änderungen vornehmen müssen, müssen wir nur Folgendes tun Aktualisieren Sie dann die Informationen des Objekts. Beachten Sie, dass es sich bei dieser Analyse um eine vollständige Analyse handelt, das heißt, dass die Originaldatei nicht verwendet wird, sondern das DOM-Modell direkt vollständig in eine XML-Zeichenfolge analysiert wird. Mit anderen Worten: DOM unterstützt keine inkrementelle Aktualisierung (inkrementelle Aktualisierung).
Ein weiteres „kleines“ Problem, das möglicherweise nicht bemerkt wird, ist die Codierung von XML. Unabhängig davon, welche Analysemethode verwendet wird, muss sie in der Lage sein, die Codierung von XML zu verarbeiten, dh die Decodierung beim Lesen und beim Schreiben. beim Codieren. Ein weiteres Effizienzproblem bei DOM besteht darin, dass, wenn ich nur eine kleine Änderung an einem großen XML vornehmen möchte, zunächst die gesamte Datei dekodiert und dann die Struktur erstellt werden muss. Unsichtbar ist es ein weiterer Kostenfaktor.
Lassen Sie uns das Problem zusammenfassen: Das Effizienzproblem von DOM liegt hauptsächlich in seinem extraktiven Analysemodus (dasselbe gilt für SAX, das das gleiche Problem hat). kann überwunden werden. Wenn ein Effizienzengpass vorliegt, ist es denkbar, dass die XML-Verarbeitungseffizienz weiter verbessert wird. Wenn die Benutzerfreundlichkeit und Verarbeitungseffizienz von XML erheblich verbessert werden, werden der Anwendungsbereich und das Anwendungsmodell von XML weiter sublimiert, und möglicherweise werden viele wunderbare Dinge entstehen, an die noch nie zuvor gedacht wurde.

Der Ausweg

VTD-XML ist die Antwort, die nach Überlegungen zu den oben genannten Problemen gegeben wurde. Aufgrund seines hervorragenden Mechanismus ist es eine gute Lösung. zu vermeiden) löst die verschiedenen oben angesprochenen Probleme und bringt „nebenbei“ auch andere nicht-extraktive Vorteile mit sich, wie schnelles Parsen und Durchlaufen, XPath-Unterstützung, inkrementelle Aktualisierung usw. Ich habe hier einen Datensatz, der von der offiziellen Website von VTD-XML stammt:

Die Parsing-Geschwindigkeit von VTD-XML beträgt das 1,5- bis 2,0-fache der von SAX (mit NULL-Content-Handler). Mit NULL bedeutet der Inhaltshandler, dass keine zusätzliche Verarbeitungslogik in die SAX-Analyse eingefügt wird, was die maximale Geschwindigkeit von SAX darstellt.
Die Speichernutzung von VTD-XML beträgt das 1,3- bis 1,5-fache der des ursprünglichen XML (der 1,0-fache Teil ist das ursprüngliche XML und der 0,3- bis 0,5-fache Teil ist der von VTD-XML belegte Teil). Die Speichernutzung des DOM beträgt das 1,3- bis 1,5-fache der des ursprünglichen XML und das 5- bis 10-fache von XML. Wenn beispielsweise die Größe einer XML-Datei 50 MB beträgt, liegt der von VTD-XML belegte Speicher zwischen 65 MB und 75 MB, während der von DOM belegte Speicher zwischen 250 MB und 500 MB liegt. Die Verwendung von DOM zur Verarbeitung großer XML-Dateien basierend auf diesen Daten ist nahezu unmöglich.
Sie finden es vielleicht unglaublich, ist es wirklich möglich, einen XML-Parser zu erstellen, der einfacher zu verwenden als DOM und schneller als SAX ist? Ziehen Sie keine voreiligen Schlüsse, werfen wir einen Blick auf die Prinzipien von VTD-XML!

Grundprinzip

Wie die meisten guten Produkte ist das Prinzip von VTD-XML nicht kompliziert, aber sehr clever. Um den Zweck der Nichtextraktion zu erreichen, wird die ursprüngliche XML-Datei im Binärmodus unverändert in den Speicher eingelesen, ohne sie überhaupt zu dekodieren. Anschließend wird die Position jedes Elements in diesem Byte-Array analysiert und einige Informationen aufgezeichnet werden für diese gespeicherten Datensätze ausgeführt. Wenn der XML-Inhalt extrahiert werden muss, werden die Position und andere Informationen im Datensatz verwendet, um das ursprüngliche Byte-Array zu dekodieren und eine Zeichenfolge zurückzugeben. Das scheint alles einfach zu sein, aber dieser einfache Prozess weist mehrere Leistungsdetails auf und verbirgt mehrere potenzielle Funktionen. Beschreiben wir zunächst jedes Leistungsdetail:

Um eine übermäßige Objekterstellung zu vermeiden, hat VTD-XML beschlossen, den ursprünglichen numerischen Typ als Datensatztyp zu verwenden, sodass kein Heap erforderlich ist. Der Aufzeichnungsmechanismus von VTD-XML heißt VTD (Virtual Token Descriptor). VTD löst den Leistungsengpass in der Tokenisierungsphase, was ein sehr cleverer und durchdachter Ansatz ist. VTD ist ein numerischer Typ mit einer Länge von 64 Bit, der Informationen wie die Startposition (Offset), die Länge (Length), die Tiefe (Tiefe) und den Token-Typ (Type) jedes Elements aufzeichnet.
Beachten Sie, dass VTD eine feste Länge hat (offiziell wurde die Verwendung von 64 Bit beschlossen). Da die Länge fest ist, ist es beim Lesen, Abfragen und anderen Vorgängen äußerst effizient , das heißt Arrays, eine effiziente Struktur, die zum Organisieren von VTDs verwendet werden kann, reduzieren Leistungsprobleme, die durch die große Verwendung von Objekten verursacht werden, erheblich.
Die Superleistung von VTD (keine Übertreibung) besteht darin, dass es einfach eine baumförmige Datenstruktur wie XML in eine Operation für ein Byte-Array umwandeln kann. Jede Operation, die Sie sich für ein Byte-Array vorstellen können, kann auf alle angewendet werden XML. Dies liegt daran, dass das eingelesene XML binär ist (Byte-Array) und VTD die Position jedes Elements und andere Zugriffsinformationen aufzeichnet. Wenn wir die zu bedienende VTD finden, müssen wir nur Informationen wie Offset und Länge verwenden Operation auf dem ursprünglichen Byte-Array, oder Sie können direkt auf der VTD arbeiten. Wenn ich beispielsweise ein Element in einem großen XML finden und löschen möchte, muss ich nur die VTD dieses Elements finden (die Traversal-Methode wird später besprochen), diese VTD aus dem VTD-Array löschen und dann verwenden alle Schreiben Sie die VTD einfach in ein anderes Byte-Array. Da die gelöschte VTD den Speicherort des zu löschenden Elements markiert, wird dieses Element nicht im neu geschriebenen Byte-Array angezeigt. Verwenden Sie VTD, um das neue Byte-Array zu schreiben das Byte-Array, und seine Effizienz ist ziemlich hoch. Dies ist das sogenannte inkrementelle Update.
In Bezug auf die Traversal-Methode von VTD-XML wird LC (Location Cache) verwendet, bei dem es sich einfach um eine baumförmige Tabellenstruktur handelt, die standardmäßig mit VTD basierend auf seiner Tiefe erstellt wurde. Der Eintrag von LC ist ebenfalls ein 64-Bit langer numerischer Typ. Die ersten 32 Bit stellen den Index einer VTD dar, und die letzten 32 Bit stellen den Index des ersten untergeordneten Elements dieser VTD dar. Mit diesen Informationen können Sie jede Position berechnen, die Sie erreichen möchten. Informationen zu bestimmten Durchquerungsmethoden finden Sie im Artikel auf der offiziellen Website. Es ist verständlich, dass VTD-XML, das auf dieser Traversierungsmethode basiert, andere Operationsschnittstellen als DOM hat, und diese Traversierungsmethode von VTD-XML kann Sie in den wenigsten Schritten an den Ort bringen, den Sie benötigen. Die Traversierungsleistung ist sehr hervorragend.

Zusammenfassung

Wie Sie oben sehen können, verfügt VTD-XML über faszinierende Funktionen, und jetzt hat Version 1.5 Unterstützung für XPath hinzugefügt (solange es durchlaufen werden kann, kann es XPath unterstützen). ist eine Frage der Zeit :-)), seine Praktikabilität hat den Rahmen dessen, was wir uns heute vorstellen, überschritten. Eine weitere Superleistung von VTD-XML besteht darin, dass es basierend auf seiner aktuellen Verarbeitungsmethode den zukünftigen binären XML-Standard vollständig unterstützen und die Anwendung von XML durch Binary auf ein höheres Niveau bringen kann! Darauf freue ich mich jetzt! :-)

Allerdings gibt es bei VTD-XML noch viele Bereiche, die verbessert und perfektioniert werden müssen, und dieser Aspekt ist unserer Bemühungen und Diskussion wert.

Das Obige ist die Einführung der neuen XML-Verarbeitungsmethode VTD-XML. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website (www.php.cn)!


Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Wie man alles in Myrise freischaltet
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Kann ich eine XML-Datei mit PowerPoint öffnen? Kann ich eine XML-Datei mit PowerPoint öffnen? Feb 19, 2024 pm 09:06 PM

Können XML-Dateien mit PPT geöffnet werden? XML, Extensible Markup Language (Extensible Markup Language), ist eine universelle Auszeichnungssprache, die häufig im Datenaustausch und in der Datenspeicherung verwendet wird. Im Vergleich zu HTML ist XML flexibler und kann eigene Tags und Datenstrukturen definieren, wodurch die Speicherung und der Austausch von Daten komfortabler und einheitlicher werden. PPT oder PowerPoint ist eine von Microsoft entwickelte Software zum Erstellen von Präsentationen. Es bietet eine umfassende Möglichkeit

Verwendung von Python zum Zusammenführen und Deduplizieren von XML-Daten Verwendung von Python zum Zusammenführen und Deduplizieren von XML-Daten Aug 07, 2023 am 11:33 AM

Verwenden von Python zum Zusammenführen und Deduplizieren von XML-Daten XML (eXtensibleMarkupLanguage) ist eine Auszeichnungssprache, die zum Speichern und Übertragen von Daten verwendet wird. Bei der Verarbeitung von XML-Daten müssen wir manchmal mehrere XML-Dateien zu einer zusammenführen oder doppelte Daten entfernen. In diesem Artikel wird erläutert, wie Sie mit Python die Zusammenführung und Deduplizierung von XML-Daten implementieren und entsprechende Codebeispiele angeben. 1. XML-Daten zusammenführen Wenn wir mehrere XML-Dateien haben, müssen wir sie zusammenführen

XML-Daten mit Python filtern und sortieren XML-Daten mit Python filtern und sortieren Aug 07, 2023 pm 04:17 PM

Implementieren des Filterns und Sortierens von XML-Daten mit Python Einführung: XML ist ein häufig verwendetes Datenaustauschformat, das Daten in Form von Tags und Attributen speichert. Bei der Verarbeitung von XML-Daten müssen wir die Daten häufig filtern und sortieren. Python bietet viele nützliche Tools und Bibliotheken zum Verarbeiten von XML-Daten. In diesem Artikel wird erläutert, wie Sie mit Python XML-Daten filtern und sortieren. Lesen der XML-Datei Bevor wir beginnen, müssen wir die XML-Datei lesen. Python verfügt über viele XML-Verarbeitungsbibliotheken.

Konvertieren Sie XML-Daten in Python in das CSV-Format Konvertieren Sie XML-Daten in Python in das CSV-Format Aug 11, 2023 pm 07:41 PM

Konvertieren Sie XML-Daten in Python in das CSV-Format. XML (ExtensibleMarkupLanguage) ist eine erweiterbare Auszeichnungssprache, die häufig zur Datenspeicherung und -übertragung verwendet wird. CSV (CommaSeparatedValues) ist ein durch Kommas getrenntes Textdateiformat, das häufig für den Datenimport und -export verwendet wird. Bei der Datenverarbeitung ist es manchmal erforderlich, XML-Daten zur einfachen Analyse und Verarbeitung in das CSV-Format zu konvertieren. Python ist mächtig

Importieren Sie XML-Daten mit PHP in die Datenbank Importieren Sie XML-Daten mit PHP in die Datenbank Aug 07, 2023 am 09:58 AM

Importieren von XML-Daten in die Datenbank mit PHP Einführung: Während der Entwicklung müssen wir häufig externe Daten zur weiteren Verarbeitung und Analyse in die Datenbank importieren. Als häufig verwendetes Datenaustauschformat wird XML häufig zum Speichern und Übertragen strukturierter Daten verwendet. In diesem Artikel wird erläutert, wie Sie mit PHP XML-Daten in eine Datenbank importieren. Schritt 1: XML-Datei analysieren Zuerst müssen wir die XML-Datei analysieren und die erforderlichen Daten extrahieren. PHP bietet mehrere Möglichkeiten zum Parsen von XML. Die am häufigsten verwendete davon ist die Verwendung von Simple

Python implementiert die Konvertierung zwischen XML und JSON Python implementiert die Konvertierung zwischen XML und JSON Aug 07, 2023 pm 07:10 PM

Python implementiert die Konvertierung zwischen XML und JSON. Einführung: Im täglichen Entwicklungsprozess müssen wir häufig Daten zwischen verschiedenen Formaten konvertieren. XML und JSON sind gängige Datenaustauschformate. In Python können wir verschiedene Bibliotheken zum Konvertieren zwischen XML und JSON verwenden. In diesem Artikel werden mehrere häufig verwendete Methoden mit Codebeispielen vorgestellt. 1. Um XML in Python in JSON zu konvertieren, können wir das Modul xml.etree.ElementTree verwenden

Behandeln von Fehlern und Ausnahmen in XML mit Python Behandeln von Fehlern und Ausnahmen in XML mit Python Aug 08, 2023 pm 12:25 PM

Behandeln von Fehlern und Ausnahmen in XML mit Python XML ist ein häufig verwendetes Datenformat zum Speichern und Darstellen strukturierter Daten. Wenn wir Python zum Verarbeiten von XML verwenden, können manchmal Fehler und Ausnahmen auftreten. In diesem Artikel werde ich die Verwendung von Python zur Behandlung von Fehlern und Ausnahmen in XML vorstellen und einige Beispielcodes als Referenz bereitstellen. Verwenden Sie Try-Exception-Anweisungen, um XML-Parsing-Fehler abzufangen. Wenn wir Python zum Parsen von XML verwenden, können manchmal Fehler auftreten

Python analysiert Sonderzeichen und Escape-Sequenzen in XML Python analysiert Sonderzeichen und Escape-Sequenzen in XML Aug 08, 2023 pm 12:46 PM

Python analysiert Sonderzeichen und Escape-Sequenzen in XML. XML (eXtensibleMarkupLanguage) ist ein häufig verwendetes Datenaustauschformat, das zum Übertragen und Speichern von Daten zwischen verschiedenen Systemen verwendet wird. Bei der Verarbeitung von XML-Dateien kommt es häufig vor, dass Sonderzeichen und Escape-Sequenzen enthalten sind, die zu Analysefehlern oder einer Fehlinterpretation der Daten führen können. Daher müssen wir beim Parsen von XML-Dateien mit Python verstehen, wie mit diesen Sonderzeichen und Escape-Sequenzen umgegangen wird. 1. Sonderzeichen und

See all articles