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

Java Discussion :

Solution miracle anti-doublon


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Avatar de Gueritarish
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2007
    Messages
    1 800
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2007
    Messages : 1 800
    Par défaut Solution miracle anti-doublon
    Bonjour,

    Alors que j'explique un peu mon appli... Je parse un fichier XML pour pouvoir insérer en base de donnée les paramètres présent dans les balises. Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <balise mere>
    	<balise fille [attributs]>
    		parametres
    	</balise fille>
    </balise mere>
    Bon, le parsing du fichier se passe très bien. Ensuite, ce qu'il faut savoir, c'est que je travaille sur des fichiers assez volumineux (de l'ordre de 500 000 lignes ). J'utilise SAX pour parser le fichier (normal).
    Donc, mon soucis serait de vérifier la présence de doublon dans les paramètres à insérer en base... Sans faire de SELECT, et sans utiliser trop de mémoire
    C'est pour ça que je mets "solution miracle".
    Pour l'instant, ma méthode consiste à partir du postulat que les balises devraient être ordonnées et donc j'utilise un Set que je ré-initialise quand je change de groupe de balises. Puisque j'utilise un Set, il n'y a pas de doublon à l'ajout. Donc, je regarde si le groupe de paramètres a été ajouté ou pas.

    J'espère avoir été clair. Sinon, n'hésitez pas à demander des précisions.

    Voilà, je suis réceptif à vos idées/conseils/propositions/canard laqué...
    ++
    Gueritarish

  2. #2
    Membre expérimenté Avatar de Seb19
    Homme Profil pro
    Concepteur SOA
    Inscrit en
    Septembre 2005
    Messages
    217
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Concepteur SOA

    Informations forums :
    Inscription : Septembre 2005
    Messages : 217
    Par défaut
    Citation Envoyé par Gueritarish Voir le message
    Donc, mon soucis serait de vérifier la présence de doublon dans les paramètres à insérer en base... Sans faire de SELECT, et sans utiliser trop de mémoire
    Bonjour, et pourquoi ne pas mettre une contrainte d'unicité sur les paramètres au niveau de la base de données. Il te suffiera ensuite de gérer le code retour du double insert.

  3. #3
    Membre Expert
    Avatar de Gueritarish
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2007
    Messages
    1 800
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2007
    Messages : 1 800
    Par défaut
    Citation Envoyé par Seb19 Voir le message
    Bonjour, et pourquoi ne pas mettre une contrainte d'unicité sur les paramètres au niveau de la base de données. Il te suffiera ensuite de gérer le code retour du double insert.
    Le problème c'est que je n'ai pas le droit de toucher à l'architecture des tables dans la base de donnée...

  4. #4
    Membre expérimenté Avatar de Seb19
    Homme Profil pro
    Concepteur SOA
    Inscrit en
    Septembre 2005
    Messages
    217
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Concepteur SOA

    Informations forums :
    Inscription : Septembre 2005
    Messages : 217
    Par défaut
    Dans ce cas, tu pourrais peut être utiliser une Hashtable dans laquelle tu stockerais tes données avant l'insertion en base, avec les méthodes containsValue et containsKey pour éviter les doublons.

  5. #5
    Membre Expert
    Avatar de Gueritarish
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2007
    Messages
    1 800
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2007
    Messages : 1 800
    Par défaut
    Citation Envoyé par Seb19 Voir le message
    Dans ce cas, tu pourrais peut être utiliser une Hashtable dans laquelle tu stockerais tes données avant l'insertion en base, avec les méthodes containsValue et containsKey pour éviter les doublons.
    En fait, c'est ce que je faisais, mais je me retrouve avec un OutOfMemoryError à la 15 000ème requêtes d'ajout de balise du même "groupe" en base ...
    C'est pour ça que j'étais passé par les Set... Mais bon, ça marche pas non plus.

    En tout cas, merci de tes réponses ^^

    ++
    Gueritarish

  6. #6
    Membre Expert

    Homme Profil pro
    Architecte logiciel
    Inscrit en
    Novembre 2006
    Messages
    1 252
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte logiciel
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 252
    Par défaut
    Tu devrais utiliser un set, dans lequel tu stockes non pas la valeur mais l'empreinte (hash) de cette valeur. Ce qui te fera gagner de la mémoire.

    Reste à gérer les faux positifs lors d'une collision. Là, à moins de recourir à un select...

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

Discussions similaires

  1. [AJAX] Boucle for in anti doublons
    Par laurentg2003 dans le forum AJAX
    Réponses: 9
    Dernier message: 20/02/2010, 15h04
  2. Réponses: 1
    Dernier message: 12/03/2009, 10h41
  3. Méthode anti doublons - logique de programmation / langage SQL ?
    Par polothentik dans le forum Langage SQL
    Réponses: 6
    Dernier message: 16/04/2008, 10h53
  4. Réponses: 18
    Dernier message: 27/08/2007, 16h11
  5. Anti doublons MySQL
    Par FoX_McClouD dans le forum Outils
    Réponses: 4
    Dernier message: 30/04/2006, 23h56

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