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 :

Méthode la plus rapide


Sujet :

JDBC Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Mai 2005
    Messages
    95
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 95
    Par défaut Méthode la plus rapide
    Bonjour,
    je dois faire un programme qui envoie selectionne beaucoup de ligne de base de donnée pgSQL( 30 000 ) et les enregistrent dans une autre base de donnée MySQL, et cela plusieurs fois par jour.
    Je voudrais savoir quel est la méthode la plus rapide, car il faut que mon programme ne traine pas !

    J'ai fait 4 méthodes :
    - La premier enregistre une ligne des quelle est lu
    - la second fait pareil mais utilise un preparedStatement
    - la troisieme récolte les elements dans une list puis les enregistre par un preparedStatement
    - enfin la 4eme modifie le commit et envoi toutes les requetes d'un coup.

    Pour les tester j'ai enregistrer dans le une variable le getTime() avant lexecution puis apres l'execution et je les ai soustrait, mais les résultats sont pas terribles car les méthodes mettent jamais le meme temps pour s executer.
    Donc si vous saviez laquelle est la plus optimiser pour ce que je veut faire sa serai bien pour moi !
    Sinon si vous avez d autres idée plus rapide hésite pas !

    Merci

  2. #2
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,

    Citation Envoyé par dondano
    Pour les tester j'ai enregistrer dans le une variable le getTime() avant lexecution puis apres l'execution et je les ai soustrait, mais les résultats sont pas terribles car les méthodes mettent jamais le meme temps pour s executer.
    Tu pourrais détailler un peu plus ?
    Quel est le temps du traitement avec chaque solution ?

    a++

  3. #3
    Membre expérimenté Avatar de wace
    Inscrit en
    Septembre 2003
    Messages
    224
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 224
    Par défaut
    J'ai une question bête (une fois de plus je sais )
    Mais pourquoi tu utilise du Java pour faire ca ?!?
    Selectionner des enregistrements d'une base et les enregistrer dans une autre base ... je suis desolé mais je ne vois pas ce que Java fait la dedans ... à moins qu'il y ai un traitement des enregistrements entre les deux mais ca tu ne l'as pas dit !!!

  4. #4
    Membre confirmé
    Inscrit en
    Mai 2005
    Messages
    95
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 95
    Par défaut
    Citation Envoyé par wace
    J'ai une question bête (une fois de plus je sais )
    Mais pourquoi tu utilise du Java pour faire ca ?!?
    Selectionner des enregistrements d'une base et les enregistrer dans une autre base ... je suis desolé mais je ne vois pas ce que Java fait la dedans ... à moins qu'il y ai un traitement des enregistrements entre les deux mais ca tu ne l'as pas dit !!!
    Sur la suite du programme il y aura des traitements, c'est juste la premiere partie

  5. #5
    Membre confirmé
    Inscrit en
    Mai 2005
    Messages
    95
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 95
    Par défaut
    J'ai un probleme lorsque je tente de faire 300 000 insertions j'ai des outofmemory sur mes 4 méthodes !

    Voici une de mes méthodes :
    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
     
    	public static ResultSet resultat;	
    	public static Connection connexion;
    	static {
    		FunctionMySQL.resultat = null;	
    		FunctionMySQL.connexion = null;
    		String driver = "com.mysql.jdbc.Driver";
    		try {
    	        Class.forName(driver).newInstance();
    			connexion = DriverManager.getConnection("jdbc:mysql://localhost/maBase","root","");
     
    	    } catch (InstantiationException e) {
    	        e.printStackTrace();
    	    } catch (IllegalAccessException e) {
    	        e.printStackTrace();
    	    } catch (ClassNotFoundException e) {
    	        System.err.println("pb lors du chargement "+e);
    	        e.printStackTrace();
    	    } catch (SQLException e) {
    	        throw new RuntimeException("Impossible de charger cette classe");
    	    }
     
    	}	
    	public void preparedStatementWithList(){
    		ResultSet select;
    		try {
    			select = FunctionPgSQL.select("SELECT * FROM log;");
    	        Date d= new Date();	
    	        long debut = d.getTime();
    	        List<List> list = new ArrayList<List>();
    			while(select.next()){
    				List<String> ligne = new ArrayList<String>();
    				ligne.add(select.getString(2));
    				ligne.add(select.getString(3));
    				list.add(ligne);
    			}
    			FunctionMySQL.insertWithPrepareStatement("INSERT INTO test(nom,prenom) VALUES( ?,?)", list);
    		    Date d2= new Date();		
    		    long fin = d2.getTime();
    			System.out.println("preparedStatementWithList durée :" + (fin - debut));
    		} catch (SQLException e3) {
    		   System.err.println("Probleme SQL " + e3);
    		}
    	}
     
    	public static void insertWithPrepareStatement(String request,List<List> list) {
    		try {
    			PreparedStatement preparedStatement = connexion.prepareStatement(request);
    			for (ListIterator it = list.listIterator(); it.hasNext();){
    				List<String> ligne = (List<String>) it.next();
    				for (ListIterator ligneListe = ligne.listIterator(); ligneListe.hasNext();){
    					preparedStatement.setString(1,(String) ligneListe.next());
    					preparedStatement.setString(2,(String) ligneListe.next());
    					preparedStatement.executeUpdate();
    				}
    			}
    		} catch (SQLException e) {
    			e.printStackTrace();
    		}
    	}
    Vous ne voyez pas d ou cela peut provenir ??
    Merci

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Août 2006
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2006
    Messages : 49
    Par défaut
    Pour ta première question, je conseille la 3e solution doublé d'un executebatch. et bien sur l'auto-commit désactivé.

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    18
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : Canada

    Informations forums :
    Inscription : Mars 2007
    Messages : 18
    Par défaut
    Citation Envoyé par dondano
    J'ai un probleme lorsque je tente de faire 300 000 insertions j'ai des outofmemory sur mes 4 méthodes !

    Vous ne voyez pas d ou cela peut provenir ??
    Probablement du fait que tu tente de faire 300 000 insertions

    Tu peux faire un test en affichant quelque chose à l'écran juste après la boucle qui lit de la base de données et qui insère les données dans ta liste.

    Tu peux augmenter la taille du heap en passant des paramètres à la machine virtuelle :

    -Xmn100M -Xms500M

    Où 100M est la taille initiale et 500M est la taille maximale.

  8. #8
    Membre confirmé
    Inscrit en
    Mai 2005
    Messages
    95
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 95
    Par défaut
    J'ai fait les tests sur 2 000 enregistrement et cela tourne autour de 900 millisecondes de moyennes ( 5 tests par méthode )

    Je suis en train de faire les meme tests avec 100 000 lignes... Le résultat devrai etre plus parlant je pense...

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 09/01/2010, 23h07
  2. Réponses: 1
    Dernier message: 03/01/2010, 14h36
  3. [XL-2003] Méthode la plus rapide pour vérifier des conditions sur trois colonnes
    Par neiluj26 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 24/08/2009, 16h38
  4. PGCD: quelle est la méthode la plus rapide
    Par progfou dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 05/03/2008, 18h26
  5. Réponses: 16
    Dernier message: 19/05/2005, 16h20

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