Maison développement back-end Tutoriel XML/RSS Introduction à la méthode de traitement XML émergente VTD-XML

Introduction à la méthode de traitement XML émergente VTD-XML

Feb 28, 2017 pm 05:20 PM

Problèmes

Habituellement, lorsque nous mentionnons l'utilisation de XML, la partie la plus gênante est la verbosité du XML et la vitesse d'analyse du XML. Ce problème devient particulièrement grave lorsque de gros fichiers XML doivent être traités. Ce que je mentionne ici est la manière d'optimiser la vitesse de traitement XML.

Lorsque nous choisissons de traiter des fichiers XML, nous avons généralement deux options :

DOM, qui est le modèle standard du W3C, qui construit les informations structurelles XML sous forme d'arborescence, qui fournit des interfaces et des méthodes. pour parcourir cet arbre.
SAX, un analyseur de bas niveau, effectue un traitement direct élément par élément en lecture seule et ne contient pas d'informations structurelles.
Les deux options ci-dessus ont leurs propres avantages et inconvénients, mais aucune n'est une solution particulièrement bonne. Leurs avantages et inconvénients sont les suivants :

DOM

Avantages : Facilité d'utilisation, car toutes les informations sur la structure XML existent en mémoire et le parcours est simple, prenant en charge XPath.
Inconvénients : la vitesse d'analyse est trop lente, l'utilisation de la mémoire est trop élevée (5x~10x du fichier d'origine) et il est presque impossible de l'utiliser pour des fichiers volumineux.
SAX

Avantages : l'analyse est rapide et l'utilisation de la mémoire n'est pas liée à la taille du XML (cela peut être effectué sans augmenter la mémoire à mesure que XML se développe).
Inconvénients : Mauvaise convivialité car il n'y a pas d'informations structurelles, elles ne peuvent pas être parcourues et ne prennent pas en charge XPath. Si vous avez besoin d'une structure, vous ne pouvez lire qu'un peu et construire un peu, ce qui rend la maintenabilité très mauvaise.
Nous pouvons voir que DOM et SAX sont fondamentalement deux extrêmes opposés, mais aucun des deux ne peut bien répondre à la plupart de nos exigences. Nous devons trouver une autre méthode de traitement. Notez que le problème d'efficacité avec XML n'est pas un problème avec XML lui-même, mais un problème avec l'analyseur qui traite XML, tout comme les deux méthodes que nous avons vues ci-dessus ont des compromis d'efficacité différents.

Réflexion

Nous aimons utiliser des méthodes de type DOM car nous pouvons parcourir, ce qui signifie que XPath peut être pris en charge, ce qui améliore considérablement la facilité d'utilisation, mais l'efficacité du DOM est très faible . Comme nous le savons déjà, le problème d’efficacité réside dans le mécanisme de traitement. Alors, quels aspects du DOM affectent son efficacité ? Faisons une dissection complète :

Dans la plupart des plates-formes actuelles basées sur la technologie des machines virtuelles (hébergées ou tout autre mécanisme similaire), la création et la destruction d'objets sont un travail qui prend du temps (cela vaut la peine de le faire (qui prend beaucoup de temps au Garbage Collection), le grand nombre de créations et de destructions d'objets utilisées dans le mécanisme DOM est sans aucun doute l'une des raisons qui affecte son efficacité (cela entraînera trop de Garbage Collections).
Chaque objet disposera de 32 bits supplémentaires pour stocker son adresse mémoire. Lorsqu'il existe un grand nombre d'objets comme DOM, ce coût supplémentaire n'est pas négligeable.
Le principal problème d'efficacité à l'origine des deux problèmes ci-dessus est que DOM et SAX sont tous deux des modes d'analyse extractive. Ce mode d'analyse est destiné à nécessiter un grand nombre d'objets de création (destruction) pour DOM et SAX, provoquant des problèmes d'efficacité. L'analyse dite extractive signifie que lors de l'analyse XML, DOM ou SAX extraira une partie du fichier original (généralement une chaîne), puis l'analysera et le construira en mémoire (la sortie est naturellement un ou plusieurs objets). Prenons DOM comme exemple. DOM analysera chaque élément, attribut, instruction PRocessing, commentaire, etc. dans un objet et lui donnera une structure. C'est ce qu'on appelle l'analyse extractive.
Un autre problème causé par le problème de l'extraction est l'efficacité des mises à jour. Dans DOM (SAX ne prend pas en charge les mises à jour, nous n'en parlerons donc pas du tout), chaque fois que nous devons apporter des modifications, tout ce que nous avons à faire est de le faire. mettez à jour les informations de l'objet. Ensuite, analysez la chaîne XML. Notez que cette analyse est une analyse complète, c'est-à-dire que le fichier d'origine n'est pas utilisé, mais le modèle DOM est directement ré-analysé complètement dans une chaîne XML. En d'autres termes, DOM ne prend pas en charge la mise à jour incrémentielle (mise à jour incrémentielle).
Un autre "petit" problème qui peut ne pas être remarqué est le codage du XML. Quelle que soit la méthode d'analyse utilisée, elle doit être capable de gérer le codage du XML, c'est-à-dire le décodage lors de la lecture et l'écriture lors de l'écriture. lors du codage. Un autre problème d'efficacité avec DOM est que lorsque je souhaite uniquement apporter une petite modification à un fichier XML volumineux, il doit d'abord décoder l'intégralité du fichier, puis construire la structure. Invisiblement, c'est une autre dépense.
Résumons le problème. En termes simples, le problème d'efficacité du DOM réside principalement dans son mode d'analyse extractive (il en va de même pour SAX, qui a le même problème). Cela a déclenché une série de problèmes connexes. peut être surmonté S'il existe un goulot d'étranglement en matière d'efficacité, il est alors concevable que l'efficacité du traitement XML soit encore améliorée. Si la facilité d'utilisation et l'efficacité du traitement de XML sont grandement améliorées, alors la portée et le modèle d'application de XML seront encore sublimés, et peut-être que de nombreuses choses merveilleuses auxquelles on n'aurait jamais pensé auparavant seront produites.

La solution

VTD-XML est la réponse donnée après avoir réfléchi aux problèmes ci-dessus. C'est un analyseur XML non extractif. En raison de son excellent mécanisme, c'est une bonne solution (. à éviter ) résout les différents problèmes soulevés ci-dessus, et apporte également « accessoirement » d'autres avantages non extractifs, tels qu'une analyse et un parcours rapides, la prise en charge de XPath, la mise à jour incrémentielle, etc. J'ai ici un ensemble de données, tirées du site officiel de VTD-XML :

La vitesse d'analyse de VTD-XML est 1,5x ~ 2,0x celle de SAX (avec gestionnaire de contenu NULL). Avec le gestionnaire de contenu NULL, cela signifie qu'aucune logique de traitement supplémentaire n'est insérée dans l'analyse SAX, ce qui correspond à la vitesse maximale de SAX.
L'utilisation de la mémoire de VTD-XML est 1,3x~1,5x celle du XML d'origine (la partie 1,0x est le XML d'origine et la partie 0,3x~0,5x est la partie occupée par VTD-XML), tandis que l'utilisation de la mémoire du DOM est de 1,3 à 1,5 fois celle du XML d'origine, 5 à 10 fois celle du XML. Par exemple, si la taille d'un XML est de 50 Mo, alors la mémoire occupée par VTD-XML sera comprise entre 65 Mo et 75 Mo, tandis que la mémoire occupée par DOM sera comprise entre 250 Mo et 500 Mo. Utiliser le DOM pour traiter de gros fichiers XML basés sur ces données est une option presque impossible.
Vous trouverez peut-être cela incroyable, est-il vraiment possible de créer un analyseur XML plus facile à utiliser que DOM et plus rapide que SAX ? Ne vous précipitez pas pour conclure, jetons un œil aux principes de VTD-XML !

Principe de base

Comme la plupart des bons produits, le principe du VTD-XML n'est pas compliqué, mais très astucieux. Afin d'atteindre l'objectif de non-extraction, il lit le fichier XML original dans la mémoire inchangé en mode binaire, sans même le décoder, puis analyse la position de chaque élément sur ce tableau d'octets et enregistre certaines opérations de traversée ultérieures. sont effectuées sur ces enregistrements enregistrés Si le contenu XML doit être extrait, la position et d'autres informations dans l'enregistrement sont utilisées pour décoder le tableau d'octets d'origine et renvoyer une chaîne. Tout cela semble simple, mais ce processus simple comporte plusieurs détails de performances et cache plusieurs capacités potentielles. Décrivons d'abord chaque détail de performance :

Afin d'éviter une création excessive d'objets, VTD-XML a décidé d'utiliser le type numérique d'origine comme type d'enregistrement, afin que le tas ne soit pas nécessaire. Le mécanisme d'enregistrement de VTD-XML est appelé VTD (Virtual Token Descriptor). VTD résout le goulot d'étranglement des performances lors de l'étape de tokenisation, ce qui est vraiment une approche intelligente et réfléchie. VTD est un type numérique de 64 bits qui enregistre des informations telles que la position de départ (décalage), la longueur (longueur), la profondeur (profondeur) et le type de jeton (type) de chaque élément.
Notez que VTD est de longueur fixe (il a été officiellement décidé d'utiliser 64 bits). Le but est d'améliorer les performances. Parce que la longueur est fixe, elle est extrêmement efficace (O(1)) lors de la lecture, des requêtes et d'autres opérations. , c'est-à-dire que VTD peut être organisé en utilisant une structure efficace telle que des tableaux, ce qui réduit considérablement les problèmes de performances causés par l'utilisation massive d'objets.
Le super pouvoir de VTD (sans aucune exagération) est qu'il peut simplement transformer une structure de données arborescente telle que XML en une opération sur un tableau d'octets, n'importe quelle opération que vous pouvez imaginer sur un tableau d'octets. Tout peut être appliqué à XML. En effet, le XML lu est binaire (tableau d'octets) et le VTD enregistre l'emplacement de chaque élément et d'autres informations d'accès. Lorsque nous trouvons le VTD à utiliser, nous n'avons besoin que d'utiliser des informations telles que le décalage et la longueur. opération sur le tableau d'octets d'origine, ou vous pouvez opérer directement sur le VTD. Par exemple, si je veux rechercher un élément dans un grand XML et le supprimer, il me suffit alors de trouver le VTD de cet élément (la méthode de traversée sera discutée plus tard), de supprimer ce VTD du tableau VTD, puis d'utiliser all Écrivez simplement le VTD dans un autre tableau d'octets. Étant donné que le VTD supprimé marque l'emplacement de l'élément à supprimer, cet élément n'apparaîtra pas dans le tableau d'octets nouvellement écrit. Utilisez VTD pour écrire le nouveau Le tableau d'octets est en fait une copie de. le tableau d'octets, et son efficacité est assez élevée. C'est ce qu'on appelle la mise à jour incrémentielle.
Concernant la méthode de traversée de VTD-XML, elle utilise LC (Location Cache), qui est simplement une structure de table arborescente construite avec VTD en fonction de sa profondeur en standard. L'entrée de LC est également un type numérique de 64 bits. Les 32 premiers bits représentent l'index d'un VTD et les 32 derniers bits représentent l'index du premier enfant de ce VTD. Vous pouvez utiliser ces informations pour calculer n'importe quelle position que vous souhaitez atteindre. Pour les méthodes de traversée spécifiques, veuillez vous référer à l'article sur le site officiel. Il est compréhensible que VTD-XML basé sur cette méthode de parcours ait des interfaces de fonctionnement différentes de celles du DOM, et cette méthode de parcours de VTD-XML peut vous amener à l'endroit dont vous avez besoin en un minimum d'étapes, les performances de parcours sont très exceptionnelles.

Résumé

Comme vous pouvez le voir ci-dessus, VTD-XML a des fonctionnalités fascinantes, et maintenant la version 1.5 a ajouté la prise en charge de XPath (tant qu'il peut être parcouru, il peut prendre en charge XPath , ce n'est qu'une question de temps :-)), sa praticité a dépassé la portée de ce que nous imaginons aujourd'hui. Un autre super pouvoir de VTD-XML est que, sur la base de sa méthode de traitement actuelle, il peut pleinement prendre en charge le futur standard Binary XML et pousser l'application de XML à un niveau supérieur grâce à la binaryisation ! C'est ce que j'attends avec impatience maintenant ! :-)

Cependant, VTD-XML a encore de nombreux domaines qui doivent être améliorés et perfectionnés, et cet aspect mérite nos efforts et nos discussions.

Ce qui précède est l'introduction de la méthode de traitement XML émergente VTD-XML. Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois (www.php.cn) !


Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Puis-je ouvrir un fichier XML à l'aide de PowerPoint ? Puis-je ouvrir un fichier XML à l'aide de PowerPoint ? Feb 19, 2024 pm 09:06 PM

Les fichiers XML peuvent-ils être ouverts avec PPT ? XML, Extensible Markup Language (Extensible Markup Language), est un langage de balisage universel largement utilisé dans l'échange et le stockage de données. Comparé au HTML, XML est plus flexible et peut définir ses propres balises et structures de données, rendant le stockage et l'échange de données plus pratiques et unifiés. PPT, ou PowerPoint, est un logiciel développé par Microsoft pour créer des présentations. Il fournit un moyen complet de

Utiliser Python pour fusionner et dédupliquer des données XML Utiliser Python pour fusionner et dédupliquer des données XML Aug 07, 2023 am 11:33 AM

Utilisation de Python pour fusionner et dédupliquer des données XML XML (eXtensibleMarkupLanguage) est un langage de balisage utilisé pour stocker et transmettre des données. Lors du traitement de données XML, nous devons parfois fusionner plusieurs fichiers XML en un seul ou supprimer les données en double. Cet article explique comment utiliser Python pour implémenter la fusion et la déduplication de données XML, et donne des exemples de code correspondants. 1. Fusion de données XML Lorsque nous avons plusieurs fichiers XML, nous devons les fusionner

Filtrage et tri des données XML à l'aide de Python Filtrage et tri des données XML à l'aide de Python Aug 07, 2023 pm 04:17 PM

Implémentation du filtrage et du tri des données XML à l'aide de Python Introduction : XML est un format d'échange de données couramment utilisé qui stocke les données sous forme de balises et d'attributs. Lors du traitement de données XML, nous devons souvent filtrer et trier les données. Python fournit de nombreux outils et bibliothèques utiles pour traiter les données XML. Cet article explique comment utiliser Python pour filtrer et trier les données XML. Lecture du fichier XML Avant de commencer, nous devons lire le fichier XML. Python possède de nombreuses bibliothèques de traitement XML,

Convertir des données XML au format CSV en Python Convertir des données XML au format CSV en Python Aug 11, 2023 pm 07:41 PM

Convertir des données XML en Python au format CSV XML (ExtensibleMarkupLanguage) est un langage de balisage extensible couramment utilisé pour le stockage et la transmission de données. CSV (CommaSeparatedValues) est un format de fichier texte délimité par des virgules couramment utilisé pour l'importation et l'exportation de données. Lors du traitement des données, il est parfois nécessaire de convertir les données XML au format CSV pour faciliter l'analyse et le traitement. Python est un puissant

Importer des données XML dans une base de données à l'aide de PHP Importer des données XML dans une base de données à l'aide de PHP Aug 07, 2023 am 09:58 AM

Importation de données XML dans la base de données à l'aide de PHP Introduction : Pendant le développement, nous devons souvent importer des données externes dans la base de données pour un traitement et une analyse ultérieurs. En tant que format d'échange de données couramment utilisé, XML est souvent utilisé pour stocker et transmettre des données structurées. Cet article explique comment utiliser PHP pour importer des données XML dans une base de données. Étape 1 : analyser le fichier XML Tout d'abord, nous devons analyser le fichier XML et extraire les données requises. PHP propose plusieurs façons d'analyser XML, la plus couramment utilisée étant l'utilisation de Simple

Python implémente la conversion entre XML et JSON Python implémente la conversion entre XML et JSON Aug 07, 2023 pm 07:10 PM

Python implémente la conversion entre XML et JSON Introduction : Dans le processus de développement quotidien, nous devons souvent convertir des données entre différents formats. XML et JSON sont des formats d'échange de données courants. En Python, nous pouvons utiliser diverses bibliothèques pour réaliser une conversion mutuelle entre XML et JSON. Cet article présentera plusieurs méthodes couramment utilisées, avec des exemples de code. 1. Pour convertir XML en JSON en Python, nous pouvons utiliser le module xml.etree.ElementTree

Gestion des erreurs et des exceptions en XML à l'aide de Python Gestion des erreurs et des exceptions en XML à l'aide de Python Aug 08, 2023 pm 12:25 PM

Gestion des erreurs et des exceptions dans XML à l'aide de Python XML est un format de données couramment utilisé pour stocker et représenter des données structurées. Lorsque nous utilisons Python pour traiter XML, nous pouvons parfois rencontrer des erreurs et des exceptions. Dans cet article, je vais vous présenter comment utiliser Python pour gérer les erreurs et les exceptions dans XML, et fournir un exemple de code pour référence. Utilisez l'instruction try-sauf pour détecter les erreurs d'analyse XML Lorsque nous utilisons Python pour analyser XML, nous pouvons parfois rencontrer des

Python analyse les caractères spéciaux et les séquences d'échappement en XML Python analyse les caractères spéciaux et les séquences d'échappement en XML Aug 08, 2023 pm 12:46 PM

Python analyse les caractères spéciaux et les séquences d'échappement en XML XML (eXtensibleMarkupLanguage) est un format d'échange de données couramment utilisé pour transférer et stocker des données entre différents systèmes. Lors du traitement de fichiers XML, vous rencontrez souvent des situations contenant des caractères spéciaux et des séquences d'échappement, qui peuvent provoquer des erreurs d'analyse ou une mauvaise interprétation des données. Par conséquent, lors de l’analyse de fichiers XML à l’aide de Python, nous devons comprendre comment gérer ces caractères spéciaux et ces séquences d’échappement. 1. Caractères spéciaux et

See all articles