XML (Extensible Markup Language) est devenu la norme pour la représentation et l'échange de données dans les applications Web. Avec le développement rapide d'Internet, en particulier l'utilisation généralisée du commerce électronique, des services Web et d'autres applications, les données de type XML sont devenues la norme. devenir le formulaire de données courant actuel. Par conséquent, la technologie de gestion des données XML, en particulier la technologie de requête de données XML, est devenue un point chaud de recherche actuel.
Par rapport aux données relationnelles, XML présente divers avantages, mais son plus gros inconvénient est son efficacité. Car dans un fichier de données relationnelles, le nom du champ des données ne doit apparaître qu'une seule fois, tandis que dans le fichier de données XML, le nom de l'élément apparaîtra à plusieurs reprises, ce qui affectera certainement l'efficacité de la requête. Afin d'améliorer autant que possible l'efficacité des requêtes XML, il est nécessaire de fournir une fonction d'indexation pour le type XML.
Le World Wide Web Consortium a identifié XPath2.0 et XQuery1.0 comme normes recommandées le 23 janvier 2007, mettant ainsi fin à la concurrence précédente entre les différents langages de requête. Sur la base de cette norme, en plus des fabricants traditionnels, diverses institutions de recherche scientifique ont proposé des implémentations de XPath et XQuery (il y en a plus d'une douzaine mentionnées dans la littérature), avec différents modèles de stockage, différents algorithmes de requête et méthodes d'optimisation. Dans ce contexte, Dameng Database Company a également proposé son propre modèle de moteur de requête XML basé sur sa propre stratégie de développement. Actuellement, le moteur de requête XML de Dameng est en cours de développement intense, et l'établissement d'index efficaces pour les données XML est un facteur important affectant XML. performances des requêtes de données. Sur la base d'une analyse approfondie de la technologie d'indexation des produits de base de données existants, une structure d'index plus raisonnable est conçue pour le moteur de requête XML Dameng afin que le moteur puisse atteindre des performances optimales.
Introduction à la technologie d'indexation XML
Actuellement, les recherches des gens sur XML sont principalement divisées en deux aspects. L'une est une base de données native pour le stockage, l'interrogation et la gestion de données semi-structurées telles que XML. Les données et métadonnées sont entièrement exprimées dans des structures XML et n'ont rien à voir avec le format de stockage de données sous-jacent (tel qu'un modèle objet, un modèle relationnel). , etc.). L'autre est la conversion mutuelle entre celle-ci et la base de données relationnelle, en utilisant la technologie mature de la base de données relationnelle pour traiter les données XML. Cette dernière direction ayant une signification plus pratique, elle est devenue le centre de la recherche XML.
En plus de la solution de stockage, la technologie d'indexation est également l'un des facteurs les plus importants dans la détermination d'un système de base de données. Si aucune structure d'index n'est construite pour les documents XML, toute requête portant sur des données XML risque de parcourir l'intégralité de l'arborescence du document. À mesure que l'ensemble de données XML augmente, cette surcharge est intolérable. Par conséquent, la recherche sur la technologie des index XML a une grande valeur théorique et pratique.
Bien que la technologie d'indexation traditionnelle soit relativement mature après une accumulation à long terme, ce type de technologie d'indexation est principalement basée sur des valeurs (plutôt que sur des modèles avec certaines relations) Le La fonction de localisation des enregistrements de données ne prête pas beaucoup d'attention à la relation logique entre les enregistrements de données ; la fonctionnalité de base de la requête de données XML est d'extraire des données conformes au modèle sur la base de l'entrée des caractéristiques du modèle (relations structurelles décrites sous forme de données régulières). expressions de chemin).Par conséquent, XML Le contenu principal de l'indexation est de concevoir des techniques adaptées à la correspondance de modèles.
Classification d'index XML
Index XML basé sur le chemin
L'index basé sur le chemin est basé sur les informations de chemin des nœuds dans la structure arborescente XML et adopte une certaine méthode de réduction afin que la structure arborescente réduite ne conserve que des informations de chemin différentes, et il n'y aura pas deux fichiers avec le même chemin .les nœuds. Les index proposés incluent : l'index DataGuides, l'index Index Fabric, l'Adaptive Path Index for XML Data (APEX)
L'index Dataguides est un résumé structurel du chemin raffiné commençant à partir du nœud racine. Les chemins de chaîne formés par la concaténation des étiquettes de bord ne sont décrits qu'une seule fois dans Dataguides. Les guides de données réduisent le nombre de nœuds requis lors du parcours des requêtes de chemin et sont efficaces pour parcourir les documents XML à partir de la racine. Cependant, les requêtes de chemin contenant des caractères génériques ou les requêtes de chemin avec l'axe descendant ou auto défini dans la norme XPath nécessitent plusieurs opérations de connexion, ce qui entraîne une faible efficacité des requêtes et une redondance des données.
Écrivez ensuite le fichier objet Java TestLob.java sur ces deux grands champs, en définissant le type comme champs d'attribut CLOB et BLOB comme types String et byte[] respectivement, le cas échéant to CLOB gère les types de texte volumineux, il correspond donc au type String en Java. BLOB gère certains fichiers volumineux qui ne sont pas strictement définis et sont stockés dans un format de flux binaire, laissez-le donc utiliser le type byte[], puis définissez le. Getteurs de ces deux attributs respectivement et de la méthode Setter, le code pertinent est le suivant :
L'index Dataguides est un résumé structurel du chemin affiné à partir du nœud racine. Les chemins de chaîne formés par la concaténation des étiquettes de bord ne sont décrits qu'une seule fois dans Dataguides. Les guides de données réduisent le nombre de nœuds requis lors du parcours des requêtes de chemin et sont efficaces pour parcourir les documents XML à partir de la racine. Cependant, les requêtes de chemin contenant des caractères génériques ou les requêtes de chemin avec l'axe descendant ou auto défini dans la norme XPath nécessitent plusieurs opérations de connexion, ce qui entraîne une faible efficacité des requêtes et une redondance des données.
Index Fabric est une structure d'index développée sur l'arbre Patricia Trie. Il encode chaque chemin de marque vers chaque nœud d'élément avec une chaîne, puis insère ces valeurs codées dans l'arbre Patricia Trie, convertissant ainsi la requête de. Données XML selon le chemin d'accès à la requête de chaîne. Lors de l'interrogation, encodez d'abord le chemin de la requête sous forme de chaîne, puis recherchez-le dans l'arborescence d'index. L'avantage de l'index Index Fabric est qu'il stocke les informations de structure hiérarchique des données XML, gère uniformément la récupération des données XML avec des informations de schéma et sans schéma, et réduit le temps requis pour l'interrogation et la mise à jour des données XML liées à la hiérarchie plutôt que à la La longueur de la clé d'index est liée. L'inconvénient de l'index Index Fabric est qu'il perd la relation structurelle entre les nœuds d'éléments, car il ne conserve que les informations des nœuds d'éléments avec des valeurs de texte. Par conséquent, à l'instar des index DataGuides, les index Index Fabric ne sont pas efficaces pour gérer les expressions de requête de correspondance partielle avec des axes descendants ou auto définis dans la norme XPath
pour cette raison, APEX [14] introduit des informations qui dépendent de la distribution des requêtes de données XML : les nœuds d'étiquette correspondant aux instructions de requête XML fréquentes sont enregistrés à l'avance dans une structure de hachage. Sa fonction est similaire à celle du Cache : lorsqu'une nouvelle requête nécessite un traitement, il recherche d'abord dans la table de hachage pour voir s'il existe un ensemble de nœuds satisfaisant. Mais il est moins efficace pour les expressions de requête avec des valeurs d'éléments ou des valeurs d'attribut.
Index basé sur des nœuds
L'index basé sur des nœuds décompose essentiellement les données XML en unités de données Collecte d'enregistrements et sauvegarde les informations de localisation de l'unité dans les données XML de l'enregistrement. Contrairement aux index basés sur les chemins, les index basés sur les nœuds brisent la restriction selon laquelle les nœuds doivent être trouvés via des chemins d'étiquette et décomposent les données XML en enregistrements de nœuds sous une forme canonique. Parce qu'il enregistre les informations de localisation des nœuds et peut être bien intégré dans les systèmes de gestion de bases de données relationnelles matures, il s'agit actuellement de l'index le plus largement utilisé.
Selon les différentes méthodes de codage des informations de localisation, les index basés sur les nœuds peuvent généralement être divisés dans les catégories suivantes :
1. Index basé sur le préfixe
L'index basé sur le préfixe est principalement un index généré sur la base de l'encodage Dewey[12] dans le document [13]. utilise également une méthode similaire et donne une méthode de compression ORDPATH, qui a été appliquée à l'organisation des index de SQL Server 2005.
L'idée de base du codage de préfixe est d'utiliser directement le codage du nœud parent d'un nœud comme préfixe du codage de nœud . Pour l'encodage des préfixes, pour déterminer si un nœud v est un descendant d'un autre nœud u, il suffit de déterminer si le code de u est le préfixe du code de v. Une propriété importante des index de codage de préfixe est leur ordre dans le dictionnaire : pour tout nœud u dans le sous-arbre enraciné au nœud r, son codage de préfixe c(u) est supérieur (inférieur à) son sous-arbre frère de gauche (sous-arbre frère de droite). de tous les nœuds dans . Par conséquent, les index basés sur des préfixes peuvent non seulement prendre en charge efficacement le calcul des relations d'inclusion, mais également prendre en charge efficacement le calcul des relations de position du document.
2. Index basé sur le codage d'intervalle
Pour l'index de codage d'intervalle, chaque nœud de l'arbre T est donné. un code d'intervalle [début, fin], qui satisfait : le code d'intervalle d'un nœud contient le code d'intervalle de ses nœuds descendants. En d'autres termes, le nœud u dans l'arbre T est l'ancêtre du nœud v si et seulement si début (u).
Le premier schéma de codage d'intervalle est le codage Dietz. Chaque nœud de l'arbre T se voit attribuer un numéro de séquence de parcours pré-ordre et un numéro de séquence de parcours post-ordre. Puisqu'un nœud ancêtre u dans l'arbre T doit apparaître avant (après) son nœud descendant v dans le parcours pré-ordre (traversée post-ordre), donc les nœuds u et v sont des relations ancêtre/descendant, ssi PRe(u)
Un autre exemple typique d'index codé par intervalle est l'index XISS, qui attribue à chaque nœud une paire de nombres, où l'ordre est étendu. Encodage de pré-ordre, la taille est la plage de descendants. du nœud. Pour tout nœud X et Y dans une arborescence de documents, si et seulement si order(x)
L'index XISS décompose l'instruction de requête d'origine en sous-expressions. Implémentez ensuite la requête pour ces sous-expressions respectivement, et enfin joignez ces résultats intermédiaires pour obtenir l'ensemble de résultats de la requête. Cela permet de mieux prendre en charge les instructions de requête contenant des caractères génériques. Cependant, il obtient le résultat final de la requête après avoir concaténé chaque résultat intermédiaire. Bien qu’une telle méthode puisse effectivement résoudre tous les problèmes de caractères génériques, la concaténation de tels résultats intermédiaires risque de prendre beaucoup de temps, en particulier pour les expressions simples avec des chemins longs.
Comparaison de deux mécanismes d'indexation
L'indexation basée sur le chemin est principalement basée sur la stratégie de fusion de nœuds, à travers nœuds, etc. En utilisant des techniques telles que la valence et l'équivalence de chemin, nous pouvons obtenir une structure d'index beaucoup plus petite que le document original. Sa structure est toujours en forme d'arborescence, donc lors du traitement des requêtes, nous devons toujours parcourir l'intégralité de l'index. arbre pour obtenir les résultats. Les index basés sur le chemin peuvent très bien prendre en charge les requêtes d'expression de chemin simple, mais pour les expressions de chemin régulières, cela ne fonctionne pas très bien.
L'index basé sur les nœuds indexe chaque nœud grâce à la technologie de codage. La relation structurelle entre les nœuds peut être déterminée en temps constant grâce au codage. Il peut bien prendre en charge les expressions de chemin régulier, mais pour les expressions de chemin long, en particulier lorsque la requête produit de nombreux résultats intermédiaires. , l'opération de jointure de l'index de nœud est coûteuse.
L'indexation basée sur le chemin et l'indexation basée sur les nœuds ont chacune leurs propres avantages et inconvénients, mais elles peuvent se compléter. À l'heure actuelle, dans les applications pratiques, l'indexation basée sur les nœuds est plus largement utilisée et la recherche est relativement mature. Par conséquent, les recherches de Dameng Company sur la structure des index XML se concentrent principalement sur l'indexation basée sur les nœuds et apportent des améliorations appropriées en référence à l'indexation basée sur les chemins. .
Ce qui précède est le contenu de la technologie de requête de données XML qui est devenue un sujet de recherche brûlant aujourd'hui. Pour plus de contenu connexe, veuillez prêter attention au site Web chinois PHP (www.php.cn) !