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

Connexion aux bases de données Firebird Discussion :

[JDBC][connexion persistante] performances avec JDBC


Sujet :

Connexion aux bases de données Firebird

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    avril 2003
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : avril 2003
    Messages : 33
    Points : 21
    Points
    21
    Par défaut [resolu][JDBC][connexion persistante] performances avec JDBC
    Bonjour à tous,

    J'ai remplacé il y a peu ma base de données MySQL par une base Interbase, pour une appli JAVA (accès JDBC pr les deux). Le problème, c'est que là ou mysql 'mangeais' 10 pages de sql en 10secondes, avec Interbase, c'est plutôt 10 pages pour 10 jours...

    Ce qu'il se passe, c'est que j'envoyer des instructions SQL par gros paquets (1 'create' et 300 000 'insert' derrière, en l'occurence)

    Y-a-t-il des moyens de connexion qui me permettraient d'améliorer ses perfs (plutôt minables vis-à-vis de mysql) ???

    J'imagine que ça ne sera jamais plus rapide qu'avec mysql, vu que ça passe par une appli intermédiaire (interserver), mais bon, je m'en remet à vous...
    I can change the world, with my own two hands...

  2. #2
    Membre expert
    Avatar de Barbibulle
    Profil pro
    Inscrit en
    octobre 2002
    Messages
    2 028
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France

    Informations forums :
    Inscription : octobre 2002
    Messages : 2 028
    Points : 3 304
    Points
    3 304
    Par défaut
    Bon je me lance mais je ne te promet rien.......

    MySQL est une base assez lite : quand je dit lite ca veux dire qu'il lui manque plein de truc pour être un vrai SGBD. Mais cet incovéniant est heureusement (et c'était le but à la base...) comblé par une simplicité d'utilisation et des performances en terme de vitesse tres interressantes...
    Bon notamment MySQL n'a par exemple pas du tout la notion de transaction.
    ....
    ne t'impatiente pas voilà ou je veux en venir.... Interbase est un SGBD transactionnel donc quoi que tu fasses est forcément dans une transaction...
    Pour rappel une transaction sous Interbase c'est comme si tu prennais à un instant T (le debut de la transaction) une photo de ta base...tu peux lire, ecrire, insérer dans cette photo et tout ca ne prendra effet que lorsque tu validera ta transaction (Commit ou CommitRetaining) mais tu peux annuler également toutes les modifications que tu a faites depuis le début de ta transaction (RollBack, ou RollBackRetaining).

    Bon comment fait il ??? en simplifiant ... Interbase va se gérer une log dans lequel il va mettre toutes les modifs que tu lui as demandé. Si tu fait un commit il Ecrit réellement ces modif...

    Donc voilà ce qui explique peut être pourquoi 300000 insert peuvent mettre un peut de temps à s'exécuter lors du commit....

    Si ca vient bien de là
    il y a deux solutions :
    1-Modifier le paramètrage d'Interbase pour qu'il utilise un maximum la RAM à la place du disque..

    2-Sinon je te suggère dans ta boucle des 300000 insert de faire des CommitRetaining (tous les 100 ou 1000 par exemple).

    Voilà c'est ce que j'essayerai de faire mais je ne te garantie rien....

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    avril 2003
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : avril 2003
    Messages : 33
    Points : 21
    Points
    21
    Par défaut
    Merci, ça me donne de l'inspiration pour continuer, mais ça me fait aussi penser que je ne donne jamais de commit, par JDBC, et ma base se génère qd même ! !
    PS : Ca fait quoi exactement 'CommitRetaining', par rapport à un simple 'commit' ???
    I can change the world, with my own two hands...

  4. #4
    Membre expert
    Avatar de Barbibulle
    Profil pro
    Inscrit en
    octobre 2002
    Messages
    2 028
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France

    Informations forums :
    Inscription : octobre 2002
    Messages : 2 028
    Points : 3 304
    Points
    3 304
    Par défaut
    En fait par defaut (sur fermeture) tu as un Commit. Ce qui explique pourquoi tu n'as jamais eut besoin d'en faire.

    Commit; Valide la transaction et la ferme (donc ca ferme ton accés... tu es obligé de la réouvrir (ce qui provoque un BeginTransaction)).

    CommintRetaining va valider les modifications mais ne vas pas fermer la transaction (donc tu peux continuer à travailler dedans)....

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    avril 2003
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : avril 2003
    Messages : 33
    Points : 21
    Points
    21
    Par défaut
    GENIAL ! !
    Maintenant, j'ouvre ma connexion au lancement de mon appli, et je ferme quand je quitte : c'est ultra rapide !
    Merci beaucoup Barbibulle, vraiment.

    Par contre, j'ai une question, plus à titre préventif qu'autre chose : ma connexion distante n'a pas de durée de vie limitée ?? Si je ne fais pas de connexion pendant un certain laps de temp, elle ne risque pas de se fermer toute seule (j'ai cherché, impossible de trouver de la doc là-dessu...) ???
    I can change the world, with my own two hands...

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    avril 2003
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : avril 2003
    Messages : 33
    Points : 21
    Points
    21
    Par défaut
    GENIAL ! !
    Maintenant, j'ouvre ma connexion au lancement de mon appli, et je ferme quand je quitte : c'est ultra rapide !
    Merci beaucoup Barbibulle, vraiment.

    Par contre, j'ai une question, plus à titre préventif qu'autre chose : ma connexion distante n'a pas de durée de vie limitée ?? Si je ne fais pas de connexion pendant un certain laps de temp, elle ne risque pas de se fermer toute seule (j'ai cherché, impossible de trouver de la doc là-dessus...) ???
    I can change the world, with my own two hands...

  7. #7
    Membre expert
    Avatar de Barbibulle
    Profil pro
    Inscrit en
    octobre 2002
    Messages
    2 028
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France

    Informations forums :
    Inscription : octobre 2002
    Messages : 2 028
    Points : 3 304
    Points
    3 304
    Par défaut
    Contant que tu ais réussi à t en sortir.

    Pour le temps de connexion :
    C'est une bonne question, mais il ne me semble pas qu'il y ait de limite dans le temps de ta connexion...

    Peux tu mettre le tag [Résolu] dans le titre merci.

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

Discussions similaires

  1. Connexion à MySQL Workbench avec JDBC
    Par nisssou dans le forum JDBC
    Réponses: 2
    Dernier message: 13/09/2013, 20h56
  2. Problème connexion BDD MySql avec jdbc
    Par libery dans le forum JDBC
    Réponses: 6
    Dernier message: 27/05/2009, 13h25
  3. [JDBC] connexion a 4D avec Jdbc
    Par hy00ga dans le forum 4D
    Réponses: 14
    Dernier message: 28/09/2006, 17h32
  4. [JDBC]connexion avec sql server
    Par ridondo dans le forum JDBC
    Réponses: 1
    Dernier message: 26/09/2005, 23h37
  5. Réponses: 1
    Dernier message: 25/09/2005, 17h18

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