Précédent   Forum des professionnels en informatique > Bases de données > MySQL > SQL Procédural
SQL Procédural Forum d'entraide sur les triggers, les procédures stockées et les fonctions en MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 06/01/2007, 11h54   #1
Membre du Club
 
Avatar de Nillak
 
Inscription : octobre 2006
Messages : 138
Détails du profil
Informations personnelles :
Localisation : France, Hérault (Languedoc Roussillon)

Informations forums :
Inscription : octobre 2006
Messages : 138
Points : 45
Points : 45
Par défaut gérer les accès concurrents

Bonjour à vous tous et puis meilleurs voeux ,
une question que je me pose depuis quelques jours maintenant et à laquelle je n’arrive pas à répondre correctement.

Tout d’abord mon problème :
J’ai une base de donnée MySQL que plusieurs utilisateurs peuvent consulter et modifier.
Or, dans mon programme une modification requiert plusieurs requêtes SQL …
d’où: comment éviter qu’un deuxième utilisateur (ou plus) ait accès aux champs en cours de modification par le groupe de requêtes ?
En d’autres termes j’aimerais que les groupes de requêtes se succèdent et qu’elles ne se chevauchent pas
J’espère que je suis assez clair . Il me semble que cela concerne les accès concurrents à des champs.

Voici les quelques solutions que j’ai trouvées et qu’il va falloir que je creuse, mais je voudrais savoir si je prend la bonne voie :
- L’utilisation des transactions (SET TRANSACTION …) en verrouillant les tables concernées (LOCK TABLE …) avec le niveau ACCESS EXCLUSIVE.
Mais (sauf erreur de ma part) cette approche implique l’utilisation des tables innoDB qui sont moins performantes en termes d’accès que les myISAM, ainsi qu’un verrou sur la totalité de la table ce qui peut être gênant si les modifications ne concernent qu’une très petite partie de la table et que donc les autres utilisateurs ne peuvent pas intervenir sur le reste de celle-ci
- L’utilisation d’un SELECT … FOR UPDATE ; cette requête bloque bien que les lignes sollicitées mais ne concerne pas un groupe de requêtes.
Bref, je suis pour l’instant dans la recherche des meilleurs compromis pour ce type de problème. Il me semble que l'utilisation des LOCK TABLE (sans l'utilisation des TRANSACTIONS) et sur des tables utilisant le moteur myISAM est une voie intéressante ... mais j'en suis pas sûr.
Pourriez-vous svp me dire si je prend le bon train et me donner quelques informations bien distillées

Merci d’avance !
Nillak est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/01/2007, 12h03   #2
Membre Expert
 
Avatar de Alexandre T
 
Inscription : mai 2002
Messages : 1 022
Détails du profil
Informations personnelles :
Âge : 35
Localisation : France, Meurthe et Moselle (Lorraine)

Informations forums :
Inscription : mai 2002
Messages : 1 022
Points : 1 123
Points : 1 123
Set transaction est bien utilisé par les tables InnoDB. Les tables InnoDB, gérant les transactions sont moins rapides en effet que les tables myIsam qui ne gèrent pas tous ces aspects. (Logique )

Mais les fonctions LOCK TABLE peuvent être utilisés avec les tables MyIsam.

A mon avis , le LOCK est une bonne solution.
Vous lockez
Vous lancez vos requêtes
Vous délockez

Mais attention Pendant le verrou, les utilisateurs concurrents auront un message d'erreur de type "Table verrouillée" Il faut donc le gérer
__________________
Alexandre T.

PHP5/MySQL5 Codes prêts à l'emploi
30 projets avec codes sources complets pour créer diaporamas photos, chat, arbre généalogique, statistiques de visites, création de graphiques, moteur de recherche, Sudoku etc...

Mes articles
Alexandre T est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/01/2007, 13h05   #3
Membre du Club
 
Avatar de Nillak
 
Inscription : octobre 2006
Messages : 138
Détails du profil
Informations personnelles :
Localisation : France, Hérault (Languedoc Roussillon)

Informations forums :
Inscription : octobre 2006
Messages : 138
Points : 45
Points : 45
Ok, toutefois il me semblait que les utilisateurs étaient en attente le temps que le verrou soit levé. De toute façon je vais tester ça ... merci pour avoir répondu aussi rapidement

Je marquerais ce post comme résolu plus tard dans la semaine ... on sait jamais si je trouve des infos complémentaires

Merci pour votre réponse
et bon week end !
Nillak est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 00h24.


 
 
 
 
Partenaires

Hébergement Web