2008-11-11 10 views
2

Je comprends qu'il n'y a pas de réponse universelle au débat attribut/élément (et j'ai lu les autres questions que j'ai vues à ce sujet), mais tout aperçu de cette circonstance particulière serait grandement apprécié .Grandes parcelles XML et utilisation d'attributs ou d'éléments

Dans notre cas, nous allons recevoir de très grandes quantités de données de base et transactionnelles provenant d'un système d'enregistrement à fusionner dans notre propre base de données (à la hausse d'un concert, tous les soirs). Les informations que nous recevons est essentiellement un pour un avec les enregistrements de nos tables, donc par exemple une liste de clients serait (dans notre ancienne version):

<Custs> 
    <Cust ID="101" LongName="Large customer" ShortName="LgCust" Loc="SE"/> 
    <Cust ID="102" LongName="Small customer" ShortName="SmCust" Loc="NE"/> 
    .... 
</Custs> 

Cependant, nous avons discuté des mérites de passer à une structure qui est plus élément basé, par exemple:

<Custs> 
    <Cust ID="101"> 
    <LongName>Large Customer</LongName> 
    <ShortName>LgCust</ShortName> 
    <Loc>SE</Loc> 
    </Cust> 
    <Cust ID="102"> 
    <LongName>Small Customer</LongName> 
    <ShortName>SmCust</ShortName> 
    <Loc>NE</Loc> 
    </Cust> 
    .... 
</Custs> 

Parce que les fichiers sont si importants que je ne pense pas que nous allons utiliser un analyseur DOM pour essayer de charger en mémoire, et nous ne avoir besoin de localiser des éléments particuliers dans les fichiers. Ma question est donc la suivante: dans ce cas, un formulaire (éléments ou attributs) est-il généralement préférable à l'autre lorsque vous devez prendre en compte de grandes quantités de données et de performances?

+0

En aparté, si vous pouvez utiliser un analyseur de traction et non un analyseur SAX. Ils sont beaucoup plus faciles à travailler. Avec SAX vous devez vous soucier de sauvegarder l'état entre les rappels. –

+0

Merci pour le haut de la tête de David! – inyourcorner

Répondre

1

Si la performance est la seule exigence, je pense que vous devez aller avec les attributs, juste parce qu'il prend moins de place. Je ne vois aucun avantage pour les éléments.

+0

Nous avons fait quelques expériences avec des formats différents et de recueillir leurs résultats de performance. Finalement, nous avons décidé de rester avec les attributs. Merci pour votre contribution! – inyourcorner

1

J'ai utilisé les deux méthodes avec de très gros fichiers à la fois avec DOM et avec un lecteur ligne par ligne. Certainement, vous devez utiliser un lecteur ligne par ligne pour obtenir de bonnes performances pour les fichiers très volumineux. Au-delà de cela mon intuition est que les attributs sont plus efficaces, mais je n'ai pas de données concrètes pour soutenir cette opinion!

1

Si quelqu'un vous fournit 1 Go de données à la fois et que vous vous souciez des performances du tout, vous devriez vraiment revoir la décision d'utiliser XML comme format de transmission. Vous n'êtes pas en train d'analyser les données dans un DOM, vous n'êtes donc pas vraiment en mesure de tirer parti des avantages que le XML vous apporte (par exemple) au format CSV - en garantissant la bonne forme, la validation du schéma, la transformation, l'interrogation ...

Et maintenant vous envisagez de passer à un format où la moitié des données que vous allez traiter est un balisage. Quel genre de sens cela fait-il? Je viens de l'école de XML quand vous avez le seul outil, que vous avez un marteau, que vous avez tendance à percevoir tous les problèmes, et que même je ne le ferais pas. t utilisez XML pour cela.

+0

Comme il se trouve, nous envisageons proposer (au client) que nous emballons des données CSV réelles dans les en-têtes xml afin que nous puissions spécifier le schéma (et le garder extensible à un point) tout en profitant de ce que csv vous donne, ce qui est données brutes, maigres. Merci pour la réponse Robert – inyourcorner

1

La "méthode des attributs" est préférable si vous envisagez de valider votre fichier XML avant le traitement au moyen d'une ancienne DTD simple. Il n'y a pas de règle pour valider le contenu d'un élément dans le langage DTD mais certaines règles de base peuvent être appliquées aux valeurs d'attribut.

Si vous envisagez d'utiliser XSD ou pas de validation du tout, alors je choisirais la forme la plus lisible, qui est à mon humble avis "élément". Peu importe d'où vient le XML, la validation XML devrait être la première étape du traitement de tout code XML. Cela rend votre application plus sûre et votre code plus petit, car de nombreuses vérifications sont faites avant que votre code n'englobe les données XML. XSD devrait être le choix préféré puisque sa syntaxe permet de vérifier même les conversions de données (c.-à-d. Float, champs de date à l'intérieur du contenu de l'élément ou de l'attribut). Le con, c'est beaucoup plus complexe qu'un simple fichier DTD.

1

L'échange des données au format XML ne sont pas nécessairement mal juste parce qu'il est un grand ensemble de données.

Cependant, si vous échangez des fichiers XML vraiment grand, vous voudrez peut-être envisager de les compresser avant la transmission en utilisant zip, gzip, etc., afin de gagner du temps et de bande passante.

Si vous échangez informations base de données, considérer les informations comme le formatage des instructions SQL (et même compresser ces fichiers SQL avant d'envoyer); surtout si c'est ce que vous finissez par convertir le XML en tout cas.

Questions connexes