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

JDBC Java Discussion :

JDBC + import + performance


Sujet :

JDBC Java

  1. #1
    bfb
    bfb est déconnecté
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 44
    Points : 28
    Points
    28
    Par défaut JDBC + import + performance
    Bonjour,
    Ma question porte sur la performance pour des insertions, les donnees provenant d'un fichier texte. Pour simplifier je dois faire par ligne de mon fichier, deux requetes insert, et mon fichier comporte beaucoup de ligne. Le resultat est que le temps d'execution de tous mes imports est long, voire tres long. Est ce que quelqu'un aurait une idee pour rendre plus performant ces insertions. (BD : oracle)
    Moi j'ai pense à utiliser le sql loader, soit charger un fichier plat directement, mais je ne sait pas trop comment ca fonctionne et si on peut l'utiliser avec JDBC. De plus, je ne sais pas si ca me fera gagner vraiment en performance.

    Des idées ?

    Merci par avance

  2. #2
    Membre habitué Avatar de Oui-Oui MB
    Homme Profil pro
    Architecte technique
    Inscrit en
    Avril 2005
    Messages
    111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Avril 2005
    Messages : 111
    Points : 127
    Points
    127
    Par défaut
    Tu peux utiliser un PreparedStatement pour préparer ta requête général et puis dans la boucle tu fais juste des setXXX() et un executeUpdate.

    Sinon tu peux peut-être utiliser l'outil d'importation de donnée d'Oracle (je sais plus le nom). Je pense qu'on peut spécifier en paramètres comment sont encodées les données.
    Que la Schtuche soit avec vous !!!

  3. #3
    Membre chevronné
    Homme Profil pro
    Dév. Java & C#
    Inscrit en
    Octobre 2002
    Messages
    1 413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Dév. Java & C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 413
    Points : 1 993
    Points
    1 993
    Par défaut
    Utilise la classe PreparedStatement en collaboration avec la méthode addBatch(). Un truc est d'initialisé "Fetch Size" avec une valeur d'environ 500.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    con.setAutoCommit(false);      // If some fail, we want to rollback the rest
    PreparedStatement stmt = con.prepareStatement(
                             "INSERT INTO CUSTOMERS VALUES (?,?,?)");
    stmt.setFetchSize(500); /* Fais quelques essais pour trouver la valeur optimale */
    stmt.setInt(1,1);
    stmt.setString(2, "J Smith");
    stmt.setString(3, "617 555-1323");
    stmt.addBatch();
     
    stmt.setInt(1,2);
    stmt.setString(2, "A Smith");
    stmt.setString(3, "617 555-1132");
    stmt.addBatch();
     
    int[] upCounts = stmt.executeBatch();
    con.commit();
    Bien le bonjour chez vous
    Jowo

  4. #4
    bfb
    bfb est déconnecté
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 44
    Points : 28
    Points
    28
    Par défaut
    merci pour cette reponse.
    J'avais oublie de preciser que j'utilise deja PreparedStatement. Par contre pour l'outil d'importation de donnees d'oracle ne serait ce pas SQL Loader. C'est justement ca que je regardais et je voulais savoir si on pouvait l'utiliser a partir de JDBC car ces inserts seront effectues par les utilisateurs eux meme. Et je voulais savoir si c'etait vraiment un gain de performance.

    merci

  5. #5
    bfb
    bfb est déconnecté
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 44
    Points : 28
    Points
    28
    Par défaut
    merci jowo,

    je ne connaissais pas la methode addBatch() je vais me renseigner la dessus pour voir ce que c'est peut etre que ca va ameliorer mes temps d'executions

  6. #6
    Membre chevronné
    Homme Profil pro
    Dév. Java & C#
    Inscrit en
    Octobre 2002
    Messages
    1 413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Dév. Java & C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 413
    Points : 1 993
    Points
    1 993
    Par défaut
    Citation Envoyé par bfb
    merci jowo,

    je ne connaissais pas la methode addBatch() je vais me renseigner la dessus pour voir ce que c'est peut etre que ca va ameliorer mes temps d'executions
    N'oublie pas FetchSize qui permet d'"optimiser" la communication entre ton client et la base de données. J'ai effectué des tests avec différentes valeurs de FetchSize, j'ai eu des améliorations allant jusqu'à 20%.
    Bien le bonjour chez vous
    Jowo

  7. #7
    bfb
    bfb est déconnecté
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 44
    Points : 28
    Points
    28
    Par défaut
    ok par contre moi je recuperais a chaque fois la valeur de ma clé auto genere quand je faisais un insert pour pouvoir inserer a la suite dans une seconde table. Comment je peux recuperer toutes les valeurs auto genere cette fois ci?

    merci par avance

  8. #8
    bfb
    bfb est déconnecté
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 44
    Points : 28
    Points
    28
    Par défaut
    j'ai teste et effectivement il y a un bon gain de performance avec la add batch. Merci, le seul hic c'est que j'aurais aime recuperer comme je l'ai dis dans mon message precedent les cles auto generees. Personne n'au eu besoin de ca??

  9. #9
    Membre chevronné
    Homme Profil pro
    Dév. Java & C#
    Inscrit en
    Octobre 2002
    Messages
    1 413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Dév. Java & C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 413
    Points : 1 993
    Points
    1 993
    Par défaut
    Alors tu as besoin de la méthode executeUpdate et de la méthode getResultSet()

    Mais je crois que tu vas perdre en performance...
    Bien le bonjour chez vous
    Jowo

  10. #10
    bfb
    bfb est déconnecté
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 44
    Points : 28
    Points
    28
    Par défaut
    oui si je passe par ca je perds beaucoup, bon je vais devoir me resoudre a faire une requete select max et me debrouiller avec ca.

Discussions similaires

  1. [JDBC] Import package Oracle
    Par kicoe dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 20/01/2008, 22h59
  2. Réponses: 9
    Dernier message: 31/01/2006, 23h42
  3. [8i] Performance import
    Par Débéa dans le forum Oracle
    Réponses: 7
    Dernier message: 17/12/2005, 13h12
  4. [JDBC-ORACLE] Pb de performances énygmatique
    Par VinceTlse dans le forum Oracle
    Réponses: 8
    Dernier message: 04/11/2005, 18h50
  5. [JDBC][connexion persistante] performances avec JDBC
    Par nawac dans le forum Connexion aux bases de données
    Réponses: 6
    Dernier message: 06/05/2003, 11h37

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