begin process at 2010 02 10 00:19:08
  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é :5 401 / 421

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

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
Source avec Zip Source avec une capture QT4 ET MYSQL par lemda
Source avec Zip Source avec une capture [WXWIDGETS] WXSQLITE+ 0.1 ALPHA - EXPLORATEUR DE FICHIER DE ... par fredcl

 Sources en rapport avec celle ci

Source avec Zip EASYLIB WIN32 C++ POUR DU PROTOTYPAGE RAPIDE par gourky
Source avec Zip Source avec une capture CLIENT IRC SIMPLE AVEC DEV-CPP par TeniX
Source avec Zip CODEUR DE HUFFMAN par webis
Source avec Zip Source avec une capture MORPION C++ (AVEC AFFICHAGE TEXTE PAS MAL), ET UNE SORTE D'I... par GUIGUI35400
Source avec Zip MINI RSA (CRYPTAGE ASYMÉTRIQUE) par gaspos

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 tri alphabétique ultra rapide de chaines de caractères de longueur variable [ par mslider ] -- Bonjour, je sais que c'est un forum dédié au C mais je vais parler de pascal. En effet je connais bien ce langage et je l'ai utilisé pour trier a HELP: Utiliser la librairie LIBBMP pour charger une image BMP [ par biloy ] Bonsoir, Après y avoir passé une bonne partie de l'après midi et de la soirée, je n'ai absolument pas compris l'utilisation de cette librairie (LIBBMP link librairie eclipse c++ [ par bumbob ] Bonjour a tous, je débute dans l'utilisation d'Eclipse 3.4. Je suis sous fedora 11, je code en c++ Je souhaite linker une librairie (sisl) de la meme Simple example OpenMP qui plante [ par uriot ] Bonjour, J'essaye un example simple d'utilisation de openMP sous windows et ca plante juste aprés la ligne std::cout << "start thread.\n" Je ne comp supprimer un sub_tag [ par aymen87 ] Bonjour je suis en train de parcourir un fichier xml en utilisation la lib du xml. je veux supprimer un sous_tag en utilisant la function xmlFreeNode Algorithme le plus rapide [ par cogno ] Bonjour les amis, je cherche l'algorithme le plus rapide en C++ pour obtenir de la fonction suivante inline int fonction (char* a) { } les résult


Nos sponsors


Sondage...

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

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 : 0,640 sec (4)

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