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

Spring Java Discussion :

Performance entre spring et jdbc [Data]


Sujet :

Spring Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné
    Inscrit en
    Juillet 2006
    Messages
    534
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 534
    Par défaut Performance entre spring et jdbc
    Bonjour,

    Je ne sais pas si c'est le bon forum pour ce post, veuillez le deplacer si ceci n'a pas sa place dans ce forum.

    On a une/des fonctions font des extractions de BD dont une est ci-dessous
    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
     
    public Object execute(final Connection connection, String storedProcedureName, String city, String country, String postCode) {
    	List<Object> result = new LinkedList<Object>();
     
    	CallableStatement cst = null;
    	ResultSet rs = null;
    	try {
    		cst = connection.prepareCall(storedProcedure);
    		cst.setString(1, city);
    		cst.setString(2, country);
    		cst.setString(3, postCode);
     
    		rs = cst.executeQuery();
    		while (rs.next()) {
    			StringBuffer sb = new StringBuffer();
    			sb
    				.append(rs.getString("Name")).append("\n")
    				.append(rs.getString("Adress")).append("\n")
    				.append(rs.getString("PostCode")).append("\n")
    				.append(rs.getString("Phone")).append("\n")
    				.append(rs.getString("Email")).append("\n");
    			result.add(sb.toString());
    		}
     
    	} catch (Exception e) {
    		System.err.println("Erreur " + e.getMessage());
    	} finally {
    		try {
    			cst.close();
    		} catch (Exception e) {
    		try {
    			rs.close();
    		} catch (Exception e) {
    	}
     	return result;
    }
    Je souhaite les migrer en utilisant Spring jdbc, au lieu d'appeler la fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    execute(connection, storedProcedureName, city, country, postCode)
    J'utilise celle-ci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    execute(city, country, postCode)

    Par contre, au point de vue de performance auriez-vous une idee laquelle est
    meuilleure

    Merci d'avance




    Classes Spring pour jdbc
    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
     
    public class MyStoredProcedure extends StoredProcedure {
    	public MyStoredProcedure(DataSource dataSource, String storedProcedureName) {
    		super(dataSource, storedProcedureName);
            declareParameter(new SqlReturnResultSet("rs", new MyMapper()));
            declareParameter(new SqlParameter("City", Types.VARCHAR));
            declareParameter(new SqlParameter("Country", Types.VARCHAR));
            declareParameter(new SqlParameter("PostCode", Types.VARCHAR));
     
    		compile();
    	}
     
    	public Map execute(String city, String country, String postCode) }
    		Map inputs = new HashMap();
            inputs.put("City", city);
            inputs.put("Country", country);
            inputs.put("PostCode", postCode);
    		return super.execute(inputs);
    	}
    }
    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
     
    public class MyMapper  implements RowMapper {
     
      public Object mapRow(ResultSet rs, int rowNum) throws SQLException {
     
    	StringBuffer sb = new StringBuffer();
    	sb
    		.append(rs.getString("Name")).append("\n")
    		.append(rs.getString("Adress")).append("\n")
    		.append(rs.getString("PostCode")).append("\n")
    		.append(rs.getString("Phone")).append("\n")
    		.append(rs.getString("Email")).append("\n");
     
        return sb.toString();
      }
    }

  2. #2
    Membre émérite Avatar de Heimdal
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    549
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 549
    Par défaut
    Pourquoi ne pas ajouter simplement une log avec le temps d'éxécution à la fin du traitement?

  3. #3
    Rédacteur
    Avatar de Hikage
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    1 177
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 177
    Par défaut
    Bon, que cela soit clair.
    Spring n'implémente pas une 'alternative' à JDBC, mais juste une couche au dessus pour simplifier les developpements et éviter certaines erreurs.

    Au final, c'est de toute manière des connection.prepareCall, CallableStatement.setParameter, etc qui seront appelé.

    Donc j'aurais tendance à dire que la solution 1 est juste légèrement plus rapide car elle n'utilise pas la surcouche Spring.

    Mais le gain est extrêmement 'minime'.
    La solution Spring étant plus élégante, et simple a comprendre et maintenir.
    Hikage
    SCJP / SCWCD & SCWSJD Certified / Spring Framework Certified
    [Personal Web] [CV]

    F.A.Q Spring Framework - Participez !

  4. #4
    ego
    ego est déconnecté
    Rédacteur

    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2004
    Messages
    1 883
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2004
    Messages : 1 883
    Billets dans le blog
    2
    Par défaut
    Il est clair qu'ici la "perf" n'est pas un critère. Il s'agit de conception et il faut donc retenir la solution la plus "claire" pour toi.
    Les "perfs", elles dépendront essentiellement de ta base, des indexes, et de la volumétrie. Et plus la volumétrie sera grande plus la surcouche Spring pourra être considérée comme négligeable dans le calcul du temps mis pour réaliser ton extraction.

  5. #5
    Membre chevronné
    Inscrit en
    Juillet 2006
    Messages
    534
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 534
    Par défaut
    Merci d'avoir repondu:
    - J'ai deux applicationss: l'extraction des donnees, une fonctionne (temps reel) avec jdbc (1ere solution), l'autre avec spring jdbc (batch)

    Comme vous avez mentionne la solution spring est plus elegante et facile a maintenir tant dis que jdbc est tres lourde au niveau de code en java.

    Je vais essayer de faire une test de perf avec ma premiere application pour voir si ca vaut le coup (contraint des utilisateurs 300 requettes en moins de 10s)

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

Discussions similaires

  1. Performance entre JVM 1.4 et JVM 1.5
    Par boutss dans le forum Langage
    Réponses: 3
    Dernier message: 20/09/2007, 10h37
  2. Performance entre LIKE ou =
    Par superdaok84 dans le forum PostgreSQL
    Réponses: 6
    Dernier message: 24/07/2007, 21h09
  3. Différence de performance entre JOIN et Subselect ?
    Par guidav dans le forum Requêtes
    Réponses: 1
    Dernier message: 20/07/2007, 10h01
  4. Réponses: 10
    Dernier message: 14/12/2006, 12h53
  5. performance entre 3DS, ase, asc ...
    Par amaury pouly dans le forum OpenGL
    Réponses: 3
    Dernier message: 24/03/2003, 11h41

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