begin process at 2012 02 09 19:36:56
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Base de données

 > CLASSE XML ULTRA LITE

CLASSE XML ULTRA LITE


 Information sur la source

Note :
9 / 10 - par 2 personnes
9,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Base de données Classé sous :xml, librairie, simple, facile, rapide Niveau :Initié Date de création :06/01/2007 Date de mise à jour :08/01/2007 11:20:54 Vu / téléchargé :6 403 / 470

Auteur : bAzilew

Ecrire un message privé
Commentaire sur cette source (21)
Ajouter un commentaire et/ou une note

 Description

Ce code a été créé lorsque xterminhate (du site) a développé sa librairie xml. J'avais fait à l'époque quelques test sur les performance de sa librairie, et je dois dire que j'avais été plutot surpris (sur un fichier de 30Mo, l'ouverture et l'enregistrement dans un aute fichier m'avais pris 1h43 me semble t il). Entre temps quelques améliorations de son algo lui a permis de multiplier par 5 les performances :)
J'ai donc recodé rapidement sans utilisation de la stl les fonctions d'ouverture, d'enregistrements, juste pour comparer. Ce code n'est certainement pas de bonne qualité (fait très rapidement) et ne se veut pas meilleurs que le code d'xterminhate (http://www.cppfrance.com/codes/MINXL-MINIMALIST-X ML-LIBRARY-GENERATEUR-ANALYSEUR-TRAITEMENT-FLUX_31 462.aspx), mais la différence est flagrante. Etant retombé dernierement sur ce code, je lui ai rajouté quelques fonctions de base, recherche d'une clef, attribution de valeur etc ...

sur le même centrino (1.6Ghz) et un fichier de 100Mo environ (+ de 2,500,000) de clef, ce code ne necessite que 7 secondes pour ouvrir, rechercher une clef( la toute derniere pour etre dans le pire des cas) et l'enregistrer dans un autre fichier.
Si cette librairie s'avere avoir une valeur quelquonque, je lui ajouterai les fonctions qui lui manque. A vous de me dire ..

juste un detail : le nom de la classe est identique à celle d'xtermihate, je manquais d'imagination quand je l'ai ecrite.
Les algos ne sont probablement pas encore optimisé, en particulier celui de recherche. Si vous avez des idées, je serai ravis d'en discuter.

qu'en pensez vous ?  

Source

  • #include "MyXml.h"
  • int main()
  • {
  • t_xml_node * mykey = new t_xml_node("cocoon.xml") ;
  • t_xml_node * key = mykey->GetNode("ma_clef") ;
  • mykey->build_to_file("cocoon2.xml") ;
  • if(key)
  • printf("montant : %s",key->value) ;
  • delete mykey ;
  • return 0 ;
  • }
#include "MyXml.h" 

int main() 
{
t_xml_node * mykey = new t_xml_node("cocoon.xml") ;
t_xml_node * key = mykey->GetNode("ma_clef") ; 
mykey->build_to_file("cocoon2.xml") ;

if(key)
printf("montant : %s",key->value) ; 
delete mykey ; 
	
return 0 ; 
}

 Conclusion

Il existe d'autres fonctions comme GetValue(char * name) pour rechercher simplement une clef et retourner sa valeur.
Il y a aussi bcp d'autres choses à coder, mais la n'éais pas le but à l'origine. Je le ferai si ca en vaut la peinne.

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Historique

07 janvier 2007 21:35:08 :
- Il manquait les includes + quelques corrections mineurs ramenent le temps à 4 secondes pour le même travail (sur la même machine).
08 janvier 2007 11:20:54 :
Erreur dans le zip ...

 Sources du même auteur

Source avec Zip Source avec une capture CLASSE IRC MULTHI-THREAD, MULTI-SERVER .. AUTONOME AVEC HOO...

 Sources de la même categorie

GESTION DE FICHIER ET DOSSIER + AUTRES par shinji63
Source avec une capture CONVERTISSEUR par smartties
Source avec Zip CREATION D'UN FICHIER DBF (EN C) par Stanel
Source avec Zip STRUCTURE DES FICHIERS DBF par Stanel
Source avec Zip Source avec une capture GESTION DES ENTREES/ SORTIES AVEC CODEBARRE par YvaddavY

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture TROUVER LES NOMBRES PREMIERS INFÉRIEURS À UNE LIMITE DONNÉE par angrevol
Source avec Zip COMPRESSER SES SAUVEGARDES SMSBACKUPRESTORE (ANDROID) EN C A... par ThalLab
Source avec Zip [C++][W IN]LIBRAIRIE HTTP par nipepsinicolas
Source avec Zip EASYLIB WIN32 C++ POUR DU PROTOTYPAGE RAPIDE par gourky
Source avec Zip Source avec une capture MORPION C++ (AVEC AFFICHAGE TEXTE PAS MAL), ET UNE SORTE D'I... par GUIGUI35400

Commentaires et avis

Commentaire de shenron666 le 07/01/2007 15:13:11

dommage que tu n'utilises pas la stl, ce n'est pas ça qui ralenti le code à ce point mais l'utilisation qu'on en fait
réessaierais-tu avec la stl pour voir si tu arrives à un résultat probant ?

bonne initiative en tout cas, ton code m'intéresse, les fichiers de config en xml c'est le top et comme ils peuvent devenir gros il vaut mieux une lib rapide ;-)

Commentaire de bAzilew le 07/01/2007 15:46:58

Effectivement, le code produit n'est pas complètement portable, d'autant que j'ai utilisé des trucs propre à Windows me semble t il. Mais je ne pense pas que la différence de vitesse entre les deux libs ne puisse  venir que  de l'algo en lui même, mais plutôt du très grand nombre d'allocation mémoire effectuée dans un gros fichier. Je vais réfléchir à une approche différente comme ne décoder le fichier qu'en stockant les clef + attribut + valeurs dans la même "variable" et ne faire le décodage final qu'au moment de la recherche ou de l'extraction d'une valeur. Mais ds ce cas, c'est la recherche d'une clef qui va prendre du temps. Dans l'exemple présent, la recherche est extrêmement rapide. Il est aussi possible de rendre le code portable,  et ne faire qu'une interface avec la stl, au moment de retourner la valeur. Je ne vois pas trop l'interet d'utiliser la stl pour tout l'algo.  
Je me demande à quel niveau de performance les autres libs xml se positionnent si qqn a déjà fait un essai sur un fichier contenant + de 2,5M de clef, j'aimerai bien savoir ;))

Commentaire de BruNews le 07/01/2007 15:51:57 administrateur CS

Fichiers de config en xml, pourrais-tu nous expliquer en quoi c'est le top ???
Hors passage d'infos entre OS différents ou weberie, je ne vois pas l'intérêt de ralentir un prog avec du parsing texte comparé au quasi instantané obtenu par des structures binaires.

Commentaire de shenron666 le 07/01/2007 17:40:40

editer un fichier texte est autrement plus facile que d'éditer un fichier binaire, et quand il s'agit de décrire une GUI, le xml est un parfait descripteur

Commentaire de BruNews le 07/01/2007 18:00:15 administrateur CS

editer, mais quand un prog doit-il éditer sa config ??? Il la lit et la réécrit si besoin, en Ko si binaire au lieu des Mo nécessaires au xml avec traduc des valeurs binaires en ascii et autres joyeusetés qui occupent nos CPUs et disques inutilment.
Faut se méfier des modes, elles passeront, j'en ai connu tellement reléguées aux oubliettes de l'informatique.

Commentaire de bAzilew le 07/01/2007 20:17:16

Personellement, je n'utilise que très rarement le xml pour des fichiers de config ... Il est clair que des structures binaires sont 1001 fois plus adaptées, en tous cas, coté programme.
Mais c'est tout de même bien pratique, quand un utilisateur doit metre les main à l'interieur, s'il n'y a pas de gui pour modifier la config.

Même pour le web, ce n'est pas super. Ca permet à l'homme d'y mettre ses main et comprendre, mais àpart ca, ca fait surtout perdre un max de place sur les dd. Utiliser le xml en base de donnée, je trouve ca absurde. Et pourtant, je suis tombé ces derniers temps sur un prog (concurent) qui ne se servait que de ca, pour stocker ses bases clients etc ... les fichiers atteignaient les 100Mo.

Quelque part, ca me fait plaisir que d'autres n'en pensent pas moin, je me suis toujours dit que le xml devait être util, pour les "autres"..

Commentaire de bAzilew le 07/01/2007 20:22:14

soit dit en passant, des "amuse CPU" comme tu aime le dire, il y en a dans bcp de mode ...

Commentaire de BruNews le 07/01/2007 20:31:20 administrateur CS

C'est clair et je ne me gratte pas pour le dire.

Commentaire de shenron666 le 08/01/2007 00:28:40

"editer, mais quand un prog doit-il éditer sa config ???"
depuis quand il n'y a que des programmeurs sur les projets ?
s'il faut écrire un editeur pour modifier une interface on a pas fini, c'est beaucoup plus simple s'il s'agit d'un fichier texte
le tout binaire n'est pas la bonne solution pour l'avenir

sur le disque c'est compressé (zip ou autre)
et c'est décompressé par le programme à la lecture
et puis avec les espaces de stockage qu'on a aujourd'hui, on va pas chilare pour 100Mo ou même 1Go
les données que je traite avec des parsers au boulot sont en ascii (je choisi pas mais ça m'arrange) et on commence à s'approcher des 20Go

enfin, vous n'avez peut-etre pas cette vision là vu que vous n'en avez pas besoin

Commentaire de bAzilew le 08/01/2007 01:09:52

J'en ai besoin, y compris au bureau, parce que bcp de gens aiment suivre les modes, et qu'ils faut le reconnaitre, elle ont aussi leurs avantage.
Par exemple l'irc, ca fait 15 ans qu'on l'utilise, et pourtant, il y a des façons plus efficaces de communiquer entre un programme et un serveur qu'en utilisant un language trop humain pour être rapide. mais on l'utilise toujours ...
Si chaque logiciel, utilise sa petite soupe plutot qu'utiliser un "standard", on a 15000 formats, et au moment ou on veut connecter les choses entre elles, on s'appercoit qu'on aurait peut être gagné du temps à en faire perdre à son cpu au début. pour revenir au xml, l'editer c'est facile, on utilise le wordpad, par exemple, et même un profane peut le modifier sans soucis. Si il y avait un standard binaire (il y en a surement des tonnes ..) accompagné de son editeur, disont un xmlpad .. il devient aussi facil pour n'importe qui de modifier son petit fichier de config, et le format reste adapté. Le probleme ce n'est pas les 100Mo d'ascii sur des disque dur contement croissant, c'est que 1000x 100Mo plus le temps consacré à l'analyser ca devient critique.
Qd les systemes deviennent complexe, le manque d'optimisation de toutes les petites briques qui les composes en font des machines à gaz lourdes et peut efficientes. Il faut considerer tout ca de façon plus globale.  
C'est pas pour rien si un jour les dizaines de .ini de c:\windows se sont transformé en base de registre ... editeur simple, tout le monde  gagne et ce n'est qu'un exemple.


Commentaire de Arnotic le 08/01/2007 08:45:30 administrateur CS

Le ZIP ne contient qu'un client IRC. Je ne vois aucune trace de ta classe permettant de parser le XML. Est-ce normal ?

Commentaire de bAzilew le 08/01/2007 10:32:35

oOOops, je me suis trompé de zip. C'est revenu dans l'ordre :)

Commentaire de Naloj le 08/01/2007 23:43:27

Le poids est un faux argument contre le XML: ses redondances balises et attributs se compressent très bien du fait qu'elles deviennent automatiquement des mots de la compression Huffman : http://fr.wikipedia.org/wiki/Compression_de_donn%C3%A9es
Je partage la position que c'est un descripteur de donnée très pratique. A la FAC, on l'utilise pour décrire des listes d'objets dans les environnements de jeux, et toute sorte de chose. En ce moment, je m'en sert sur un projet libre de jeu 2D pour décrire des types de terrains, l'avantage de la verbosité du XML est sa simplicité de compréhension pour les utilisateurs qui pourront le modifier et ajouter des terrains eux-même.
Enfin, moi je trouve ça bien pratique.

Commentaire de Arnotic le 09/01/2007 00:56:14 administrateur CS

Donc si tu es obligé de compressé pour gagner de la place ; à la lecture il faut que tu décompresses --> conclusion la décompression te bouffe du temps et du CPU pour rien. Idem lorsque tu dois fermer le fichier ou il faut que tu le compresse.
C'est bien ce qu'on dit c'est un amuse CPU.

Commentaire de Naloj le 09/01/2007 07:27:01

oui, mais alors dans ce cas à part le binaire, y'a plus d'idéal :S. Question fichier de config, ça doit rester raisonnable en taille même sans compression.
Une norme de XML binaire est aussi en cours d'élaboration par le W3C: le XBC. Je ne sais pas ce que ça peut donner mais c'est intéressant.

Commentaire de bAzilew le 09/01/2007 11:53:56

http://www.w3.org/TR/xbc-properties/
Fichtre, une librairie pour le xbc se code déjà moin à l'aveugle.. c'est autrement plus complexe que le xml :)

Commentaire de bAzilew le 09/01/2007 12:01:09

à quand la petite note ? ;)

Commentaire de shenron666 le 09/01/2007 22:45:56

Arnotic > "la décompression te bouffe du temps et du CPU pour rien"
bah non, pas pour rien ^^
et puis ton CPU, il est là pour faire quelque chose XD
tes arguments sont tout aussi applicables à une image au format PNG / JPEG ou autre
pourquoi ne pas utiliser du RAW brut ? ;-)

de toute façon, le choix entre pratique (xml) et rapide (binaire) a toujours été et restera un choix (discutable ou non) à faire dans une application

et même si le format xml c'est du texte à la base, rien n'empêche de créer un dictionnaire de clefs binaires au chargement (une sorte de compilation) comme le font les langages de script (LUA par exemple est utilisé par World of Warcraft pour les interfaces)

à force d'économiser votre "temps cpu" il va finir par s'ennuyer ^^ (joke)

Commentaire de xterminhate le 13/02/2008 11:44:31

Bonjour bAzilew,

C'est sympa de m'avoir cité dans ton projet.

Bonne continuation :-)

Xterminhate.

Commentaire de FredArmoni le 29/04/2009 12:28:16 administrateur CS

Bonjour,
a priori il y a un petit effet indésirable sur les balises xml autofermantes du type    
<Part id="R0001" Manufacturer="MG" Code="24231" Name="Multi9 C60N 4P 32A C" />

Commentaire de FredArmoni le 29/04/2009 12:36:35 administrateur CS

Et en plus simple :
<test/>
plante aussi ...

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Quelle lib pour lire avi?? [ par satellite34 ] salut!Je programme un tit player avi tout simple sous wxWIDGETS.Quelle librairie utiliser pour lire les avi??Une librairie simple et document&#233;e s boucle plus rapide que simple déclaration [ par zozizozu ] Bonjour, et excusez la sotise de ma question, mais est-ce qu'une boucle est plus rapide qu'une simple déclaration successive de ses items?En gros, est editeur xml simple [ par noura5101 ] bonjour,j'ai besoin d'un exemple d'un code d 'editeur pour generer des fichiers XML ;ajout des noeud,supprimer noeud,changer les valeurs des attributs y aurait il un converter simple qui transformerait un fichier csv en fichier XML [ par petguet ] Bonjour, y aurait il un converter tres simple qui traduirait un fichier csv en fichier XML. Merci d avance Tableau deux dimensions: remplissage rapide des lignes [ par skudFred ] Hello à tous, Une question je pense très simple pour vous spécialistes du C++ [^^happy17] ! J'ai un tableau de int à deux dimensions : int tab[10][8 Windows Form et Fmod ( Linker ) [ par Juj34130 ] Bonjour, je souhaiterai inclure la librairie fmodex a mon projet fait avec visual c++ 2005 express avec windows form. Le problème, c'est que je n'arr C / Equation différentielle [ par Zorld ] Bonjour à tous, voulant simuler dans un programme quelques lois simples de la mecanique du point j'aurais bien besoin d'une librairie sachant resoudre Comment faire un double enregistrement [ par HardinLTyler ] Bonjour à tous! J'aimerais avoir vos idées sur comment faire un double enregistrement automatique applicable sur toute la suite Office, par simple en demande info librairie de cryptographie [ par fainardi83 ] bonjour je travaille actuellement sur un projet utilisant les librairies de cryptographie, je souhaite utiliser soit la librairie polarSSL soit libcr


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,326 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales