Quelle est la meilleure / manière correcte / la plus efficace pour stocker une série de données en XML

StackOverflow https://stackoverflow.com/questions/2979157

  •  24-10-2019
  •  | 
  •  

Question

J'ai une application qui permet de stocker une série de valeurs (float) dans un fichier XML. Il pourrait y avoir plus de 100.000 valeurs, donc je suis intéressé à garder la taille vers le bas, mais je veux aussi les fichiers soient facilement accessibles par des tiers.

Il semble y avoir différentes méthodes me ouvrent aussi loin que le codage des données dans le fichier XML:

1.

<data>
  <value>12.34</value>
  <value>56.78</value>
  ...
  <value>90.12</value>
</data>

2.

<data>
  <value v="12.34"/>
  <value v="56.78"/>
  ...
  <value v="90.12"/>
</data> 

3.

<data>12.34
56.78
  ...
90.12
</data> 

4.

<data>12.34, 56.78, ... 90.12</data> 

et il y a probablement plus de variations aussi bien.

Je suis juste curieux de connaître les inconvénients (le cas échéant) à chacune de ces approches. Certains peuvent ne pas être conforme par exemple.

Était-ce utile?

La solution

Je ne pense pas qu'il y ait une « meilleure » façon de le faire. Lisez mon commentaire ci-dessus pour des solutions de rechange. Mais si vous êtes accroché sur XML, puis aller avec tout ce qui fonctionne pour vous. Personnellement, je préfère quelque chose comme ça

<data>
   <item key="somekey1" value="somevalue1" />
   <item key="somekey2" value="somevalue2" />
   <item key="somekey3" value="somevalue3" />
</data>

Tout simplement parce qu'il est agréable et facile à lire, et conserve les balises plus petites.

EDIT:

Rappelez-vous, les moins de caractères sont dans votre XML, plus il sera. (Encore une fois, pourquoi je suggère JSON), donc si vous pouvez l'obtenir agréable et serré, par tous les moyens le faire.

<d>
   <i k="somekey1" v="somevalue1" />
   <i k="somekey2" v="somevalue2" />
   <i k="somekey3" v="somevalue3" />
</d>

EDIT:

En outre, je sais que vous n'avez pas demandé, mais je pensais que je vous montrer ce que JSON ressemblerait

   [{ "key": "somevalue1", "value": "somevalue1"},
    { "key": "somevalue2", "value": "somevalue2"}]

Autres conseils

sémantiquement, il n'y a pas de « différence » entre 1 et 2. De même, il n'y a pas de différence entre 3 et 4, sauf que l'on est délimité. A noter également que les espaces est / peut être ignorée en XML, donc si vous avez lu # 3, il peut bien arriver comme « une longue ligne » sans retour à la ligne qui les sépare.

En ce qui concerne ce qui est mieux, il est à votre application, et comment vous prévoyez d'utiliser les données.

La version sérialisée (avec chaque numéro dans son propre élément) donne à l'utilisateur accesss « direct » aux numéros individuels.

Utilisation du délimité « blob » exige que les utilisateurs d'analyser eux-mêmes, donc cela dépend de quel type d'interface que vous êtes désireux de fournir.

En outre, la technique du « blob » tend à empêcher le XML d'être « transmis en continu », puisque vous aurez un élément énorme, plutôt qu'un tas de petits éléments. Cela peut avoir un impact important de la mémoire.

En ce qui concerne la taille du fichier, il peut être utile de savoir que vous compressez ces données, les finales, les tailles compressées seront probablement très proches les uns des autres, quelle que soit la technique. J'sais si cette propriété est importante ou non.

Les deux premières formes sont à preferrable les deux derniers, le premier étant le meilleur. Les deux derniers, il faudrait lire le contenu des données et le fractionnement avant vous pouvez l'utiliser. Les deux premiers, cependant, vous permettent d'énumérer les données sur et utiliser uniquement la pièce ou des pièces dont vous avez besoin à un moment donné. Cependant, la seconde forme intègre la valeur dans une autre couche par l'intermédiaire d'un attribut, ce qui le rend moins souhaitable que la première (condition qu'il n'y ait pas d'autres éléments / attributs pour chaque point de données particulier).

Si les seules données de votre fichier processus sera toujours que les valeurs flottantes, ne pas utiliser XML. Utilisez uniquement un fichier texte avec une valeur dans chaque ligne. Ce sera beaucoup plus rapide à lire et à écrire et ne sera même pas un peu moins d'auto-descriptif que les échantillons XML que vous avez écrit.

XML peut être une exigence, pour un cas d'exemple dans lequel vous utiliserez ce fichier XML de différentes applications / systèmes / utilisateurs avec culture différente (TR, EN, FR). Certains écrivent flotte avec « » (12.34) alors que certains les écrire avec '' (12,34). Un analyseur XML va gérer ce genre de choses pour vous tous. Donc, si XML est une exigence, 3ème et 4ème échantillons que vous écriviez sont totalement absents du point de XML. En pratique, ils ne sont pas différents que d'utiliser un fichier texte à l'exception de l'analyseur XML lent en service.

1er et 2e échantillons vous ont écrit seulement une différence subtile dans le sens / interprétation. Première implique que les données réelles vous présente est 12,34, et il est une « valeur ». Deuxièmement implique qu'il ya une « valeur » et les données « v » qui y sont associées est 12,34.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top