IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Format d'échange (XML, JSON...) Java Discussion :

Vitesse contre place en mémoire [SAX]


Sujet :

Format d'échange (XML, JSON...) Java

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 42
    Points : 31
    Points
    31
    Par défaut Vitesse contre place en mémoire
    Bonjour à tous !

    Je dois réaliser en java un editeur XML, c´est à dire quelque chose qui puis lire et ecrire des informations, qui ont un format précis (et toujours le meme), dans des fichiers au format XML.
    En gros c´est une espece de base de données au format XML où chaque fichier représente une table.

    Le probleme est que ces fichiers devraient faire plusieurs mega, rendant pratiquement impossible l´utilisation d´un parser DOM (qui charge tout le fichier XML en memoire) . J ai donc pensé a un parser SAX (qui genere un evenement pour chque tag, je crois bien).

    Seulement, la question que je me pose est celle de la vitesse : en effet l´utilisateur doit pouvoir rechercher un enregistrement parmi des milliers et a chaque recherche, on va devoir re-lire une bonne partie du fichier XML pour tomber sur le bon enregistrement.

    J´ai donc pense a essayer de mettre en place un espece d´index, où je stockerai en memoire, pour chaque n° d´enregistrement, la position (en octets) dans le fichier XML, histoire d´avoir un acces direct sans avoir pour autant à garder tout le fichier XML en memoire.

    Qu´en pensez vous ?
    Y´a t´il une solution plus simple ?
    Sinon comment implementer ca en Java ??? (en gros ! je ne vous demande pas de faire le boulot a ma place mais plutot quelles sont les grandes lignes a suivre)

    Merci d´avance

    Denis

  2. #2
    Membre régulier
    Inscrit en
    Avril 2003
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 52
    Points : 78
    Points
    78
    Par défaut
    Si ton fichier XML a une forme tabulaire et qu'il a toujours la même forme, met tout dans une base de données, travaille avec ça, puis refabrique ton fichier XML lors de la sauvegarde.

    De plus il existe des bases de données qui ont une sortie XML.

  3. #3
    Membre du Club
    Inscrit en
    Mars 2002
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 50
    Points : 58
    Points
    58
    Par défaut
    Salut,

    ces liens peuvent peut-etre t'aider :
    http://www.xmldb.org/resources.html
    http://xml.apache.org/xindice

    Seb

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 42
    Points : 31
    Points
    31
    Par défaut
    Merci cést cool, mais en fait, dans la boite ou je bosse, ils utilisent des programmes d´export Acces -> XML ou Oracle -> XML, et justement le but de mon projet, c´est de faire un editeur qui travaille directement sur le XML.

    Quelqu´un qurait un autre solution ?

  5. #5
    Membre à l'essai
    Inscrit en
    Mars 2003
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 15
    Points : 13
    Points
    13
    Par défaut
    En collaboration avec le projet Xindice tu peux utiliser Yab, qui est une interface pour la DB ainsi qu'un éditeur de fichiers XML qui sont dans la DB http://www.cs.put.poznan.pl/dweiss/i...ex.xml?lang=en
    Xindice et Yab sont en open source, tu peux donc les adapter à tes besoins.
    On en apprend tous les jours... mais pas aux autres!

  6. #6
    Membre régulier
    Inscrit en
    Avril 2003
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 52
    Points : 78
    Points
    78
    Par défaut
    Citation Envoyé par Dinaïz
    Merci cést cool, mais en fait, dans la boite ou je bosse, ils utilisent des programmes d´export Acces -> XML ou Oracle -> XML, et justement le but de mon projet, c´est de faire un editeur qui travaille directement sur le XML.

    Quelqu´un qurait un autre solution ?
    Si c'est directement sur le XML, il faut le prendre comme un fichier plat, et l'éditer de façon classique, avec une sorte de buffer pour éviter de charger tout le fichier en mémoire.

    Finalement on arrive à une solution où l'utilisateur voit le fichier XML quasi-directement. swing.text serait bien adapté.

    Peut être voudras-tu "bloquer" l'édition de certaines zones (balises par ex) ? swing.text sait très bien gérer les autorisations d'édition en fonction de la position du curseur, et tu peux même remplacer les "tags" par des "logos".

    Cela dit, c'est un gros boulot. Rien, absolument rien n'est simple avec swing.text.

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 81
    Points : 96
    Points
    96
    Par défaut Re: [Java, XML et SAX] Vitesse contre place en mémoire
    Citation Envoyé par Dinaïz
    Je dois réaliser en java un editeur XML, c´est à dire quelque chose qui puis lire et ecrire des informations, qui ont un format précis (et toujours le meme), dans des fichiers au format XML.
    En gros c´est une espece de base de données au format XML où chaque fichier représente une table.
    Petit préambule, je te conseille de lire mes réponses aux messages [Debutant][JBDC] dev d une application et [Débutant][JDBC]java mysql. Elles n'apportent pas vraiment de réponses à ton problème mais parle de solutions fonctionnelles : MySQL, SQLite... Hélas ce ne sont pas des SGBD capables de gérer des bases XML en natif.

    Le probleme est que ces fichiers devraient faire plusieurs mega, rendant pratiquement impossible l´utilisation d´un parser DOM (qui charge tout le fichier XML en memoire) . J ai donc pensé a un parser SAX (qui genere un evenement pour chque tag, je crois bien).
    En effet dans le cas d'une base XML et non plus pas d'un simple petit ficheir XML, il vaut mieux opter pour SAX. Cependant il ne s'agit que d'un parseur, ça ne résoud en rien ton problème de devoir gérer une base XML : insertions, mises à jour, suppressions...

    Seulement, la question que je me pose est celle de la vitesse : en effet l´utilisateur doit pouvoir rechercher un enregistrement parmi des milliers et a chaque recherche, on va devoir re-lire une bonne partie du fichier XML pour tomber sur le bon enregistrement.

    J´ai donc pense a essayer de mettre en place un espece d´index, où je stockerai en memoire, pour chaque n° d´enregistrement, la position (en octets) dans le fichier XML, histoire d´avoir un acces direct sans avoir pour autant à garder tout le fichier XML en memoire.
    Le travail que tu décris est celui d'un SGBD. Le langage SQL permet de commander le SGBD et de faire des recherches, d'insérer des enregistrements, de les mettre à jour ou encore de les supprimer. Pour optimiser les traitements les SGBD utilisent différentes techniques, dont l'utilisation d'index.

    Donc d'après moi le plus simple est d'utiliser un SGBD capable de gérer en natif une base XML. Je commence tout juste à m'intéresser au sujet mais Xindice ne semble être qu'une base native XML et non pas un SGBD. Ce qu'il faut c'est un SGBD qui exploite certaines technologies XML (XPath par exemple) pour gérer la base XML efficacement. Tu trouveras d'autres SBGD ou bases dans la catégorie XML dababases de Google. Pour l'instant je me cantonne à utiliser MySQL et SQLite. MySQL en PHP et SQLite en C/C++. Vu que je me remets à Java, je n'ai pas encore vraiment besoin d'un SGBD et pour l'instant j'ai plutôt dans l'idée d'utiliser SQLite....

    Si j'étais toi, je m'orienterais vers Xindice, il doit bien exister des technologies connexes pour gérer cette base, après je ne sais pas trop si parler de base plutôt que de SGBD est un abus de langage ou une référence au jargon XML. Dans ma liste j'ai aussi la base Berkeley de Sleepycat, c'est plus qu'une base XML, c'est un SGBD qui supporte la gestion d'une base XML, utilisation d'XPath, d'index... À titre d'exemple cette base est embarqué à TortoiseSVN. Tu pourrais demander aux auteurs ce qui les a poussé à choisir ce SGBD plutôt qu'un autre.

    J'espère trouver du temps pour continuer mes recherches, que ceux qui ont une certaine expérience sur ces sujets n'hésitent pas se manifester .

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Place en mémoire
    Par thtghgh dans le forum MATLAB
    Réponses: 10
    Dernier message: 31/05/2009, 17h31
  2. place en mémoire d'un programme
    Par clampin dans le forum Débuter
    Réponses: 1
    Dernier message: 17/11/2008, 17h35
  3. [AJAX] Que faire contre les fuites mémoires (memory leaks)
    Par cassy dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 21/08/2007, 16h50
  4. comment réserver 1 plus grande place en mémoire ?
    Par jack_hunt dans le forum MFC
    Réponses: 10
    Dernier message: 30/06/2005, 16h08
  5. mysql bouffe de la place en mémoire !
    Par iubito dans le forum Installation
    Réponses: 9
    Dernier message: 05/11/2003, 16h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo