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

Persistance des données Java Discussion :

Utilité d'une transaction en lecture


Sujet :

Persistance des données Java

  1. #1
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 311
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 311
    Points : 9 524
    Points
    9 524
    Billets dans le blog
    1
    Par défaut Utilité d'une transaction en lecture
    Suite d'une discussion démarrée par Bardack (petites questions sur le sujet...)

    En résumé, certains conseillent d'utiliser une transaction tout le temps, même pour faire une lecture seule, d'autres pensent que ça n'est pas utile...

    Mon avis :

    Dans un développement d'application web (client léger), je ne vois pas l'intéret d'utiliser une transaction qui à mon sens, sert avant tout à garantir l'intégrité des données pour des mises à jour (sens large) multiples sur une ou plusieurs tables.

    On en était là, vos commentaires sont les bienvenus...
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  2. #2
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 274
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 274
    Points : 4 141
    Points
    4 141
    Par défaut
    Je fais partie de ceux qui pensent qu'ils faut utiliser des transactions même pour de la lecture de données.
    De toute façon, tout accès vers une base de données se fait dans une transaction. Si on ne la voit pas explicitement, c'est à cause du mode autocommit.

    L'intérêt est de protéger ses données contre les modifications extérieures.
    Voir :
    http://www.developpez.net/forums/sho...=290661&page=6

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 53
    Points : 48
    Points
    48
    Par défaut
    Bonsoir,

    A mon avis, il est même déconseillé d'ouvrir une transaction pour faire uniquement un SELECT...
    Un bon SGBDR se doit d'implémenter les propriétés ACID (http://sqlpro.developpez.com/cours/s...dements/#L4.5). J'en déduis qu'une transaction assure la cohérence et la pertinence des données d'une suite d'instructions SQL.

    Il y a aussi une histoire de verrous partagé et exclusif... Je ne sais pas si c'est le cas de tous les serveurs, mais en général lors d'un SELECT en dehors d'une transaction, le moteur SGBDR pose un verrou partagé alors que pour un UPDATE, un INSERT ou un DELETE, il pose un verou exclusif sur l'enregistrement. Du coup, s'il y a un SELECT alors qu'un verrou exculif est posé sur l'enregistrement, il devra attendre que le verrou se termine.

    A l'inverse, si l'on utilise une transaction juste pour faire un SELECT, ce qui à mon avis est inutile, on pénalise les instructions de type UPDATE, INSERT ou DELETE qui sont en général importantes. Sur un site transactionnel (marchand ^^) qui enregistre plusieurs centaines ou milliers d'utilisateurs, ça ne serait pas permis. Je parle en connaissance de cause...

    ++
    Laurent

  4. #4
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 274
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 274
    Points : 4 141
    Points
    4 141
    Par défaut
    http://forum.hibernate.org/viewtopic...098&highlight=

    Va voir ce lien, où il y a une petite explication d'un des membres de l'équipe d'Hibernate, qui je pense (et même j'en suis certain) sait très bien de quoi il parle.

  5. #5
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 311
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 311
    Points : 9 524
    Points
    9 524
    Billets dans le blog
    1
    Par défaut
    Ca dépend quand même du type d'application qu'on écrit.

    J'arrive à comprendre l'utilisation d'une transaction pour une lecture en vue de modification, dans le cas où on veut empêcher un autre utilisateur de faire une modification concurrente.
    Mais, ça suppose quand même qu'on maintient la transaction active jusqu'au commit/rollback final.

    C'est là que le type d'application intervient : pour une appli web, en mode déconnecté (http), je ne pense pas qu'on s'amuse à sauvegarder une transaction (par exemple dans la session) pour la récupérer au prochain request et continuer... (bien sûr, on pourrait...)
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 274
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 274
    Points : 4 141
    Points
    4 141
    Par défaut
    L'idée n'est pas de garder une transaction active longtemps.
    L'idée est simplement d'avoir des données cohérentes au sein d'une transaction, qui regrouperait plusieurs lectures.

  7. #7
    Membre habitué Avatar de xv-mnt
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    142
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2005
    Messages : 142
    Points : 178
    Points
    178
    Par défaut
    fr1man +1 !!

    C'est même un anti-pattern de conserver une transaction au-delà d'une requête HTTP. Si on veut monter en charge, il faut conserver un minimum de ressources externes, en particulier les connexions...
    Tout le monde savait que c'était impossible à faire. Puis un jour quelqu'un est arrivé qui ne le savait pas, et il le fit (Winston Churchill)

  8. #8
    Membre confirmé
    Avatar de grishka
    Inscrit en
    Janvier 2003
    Messages
    285
    Détails du profil
    Informations forums :
    Inscription : Janvier 2003
    Messages : 285
    Points : 499
    Points
    499
    Par défaut
    Salut,

    Concernant la nature des lock, ils dépendent du niveau d'isolation de la transaction. Cf http://en.wikipedia.org/wiki/Isolati...puter_science). Le plus exigeant étant serializable, qui supporte le moins la montée en charge.

    Bref les transactions sont utiles même en lecture afin de ne pas travailler avec des données non commitées.
    Autre cas : les non-repeatable reads, cas ou le résultat est différent entre deux selects faisant intervenir les même tables.
    "Les gens normaux croient que si ca marche, c'est qu'il n'y a rien à reparer. Les ingénieurs croient que si ca marche, c'est que ca ne fait pas encore assez de choses."
    --Scott Adams

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

Discussions similaires

  1. Empêcher la lecture d'une table pendant une transaction ?
    Par pouli dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 03/11/2008, 19h06
  2. Fonctionnement simplifié d'une transaction Oracle
    Par jack554 dans le forum Oracle
    Réponses: 7
    Dernier message: 21/04/2005, 10h25
  3. comment identifier une transaction http?
    Par didier.cabale dans le forum Développement
    Réponses: 5
    Dernier message: 13/04/2005, 16h42
  4. [SGBD]Evaluation du temps d'une transaction
    Par vsavoir dans le forum Décisions SGBD
    Réponses: 4
    Dernier message: 26/10/2004, 17h53
  5. Utilisation d'une transaction
    Par Bernard M dans le forum Bases de données
    Réponses: 6
    Dernier message: 21/04/2004, 23h31

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