Bonjour !
Je vais prendre un exemple simple.
Des (lignes de) factures.
On prend une facture, qui contient 10 lignes, chacune avec un numéro de
ligne, un code article, une quantité.
L'utilisateur veut modifier cette facture. Il va donc rapatrier les 10
lignes, faire ses modifications, renvoyer le tout.
Mais, cela pose d'énormes problèmes. Ainsi, si vous êtes en verrouillage
pessimiste, comment éviter les verrous résiduels ?
Si vous êtes en verrouillage optimiste, comment gérer une simple
suppression d'une ligne, dans l'ensemble des 10 lignes ? Et comment
gérer les conflits d'accès ?
Bonjour !
Je vais prendre un exemple simple.
Des (lignes de) factures.
On prend une facture, qui contient 10 lignes, chacune avec un numéro de
ligne, un code article, une quantité.
L'utilisateur veut modifier cette facture. Il va donc rapatrier les 10
lignes, faire ses modifications, renvoyer le tout.
Mais, cela pose d'énormes problèmes. Ainsi, si vous êtes en verrouillage
pessimiste, comment éviter les verrous résiduels ?
Si vous êtes en verrouillage optimiste, comment gérer une simple
suppression d'une ligne, dans l'ensemble des 10 lignes ? Et comment
gérer les conflits d'accès ?
Bonjour !
Je vais prendre un exemple simple.
Des (lignes de) factures.
On prend une facture, qui contient 10 lignes, chacune avec un numéro de
ligne, un code article, une quantité.
L'utilisateur veut modifier cette facture. Il va donc rapatrier les 10
lignes, faire ses modifications, renvoyer le tout.
Mais, cela pose d'énormes problèmes. Ainsi, si vous êtes en verrouillage
pessimiste, comment éviter les verrous résiduels ?
Si vous êtes en verrouillage optimiste, comment gérer une simple
suppression d'une ligne, dans l'ensemble des 10 lignes ? Et comment
gérer les conflits d'accès ?
Quels verrous résiduels ?
je met un verrou sur l'entête dès qu'il y a la moindre modification à
venir sur une des lignes
Quels verrous résiduels ?
je met un verrou sur l'entête dès qu'il y a la moindre modification à
venir sur une des lignes
Quels verrous résiduels ?
je met un verrou sur l'entête dès qu'il y a la moindre modification à
venir sur une des lignes
Re !
D'abord, merci d'avoir répondu.Quels verrous résiduels ?
En verrouillage pessimiste, on pose les verrous (sur le serveur de base
de données) avant toute opération, et on les enlève, une fois la
transaction terminée.
Mais, si le poste qui verrouille est brutalement éteint (coupure de
courant, ou déconnexion intempestive, par exemple), les verrous restent.
C'est cela, que j'appelle verrou résiduel.
A noter que, si le serveur gère lui-même les verrous, il ne peut pas
savoir si le poste est vraiment coupé (verrous à supprimer), ou s'il est
simplement en veille (verrous à conserver). De plus, quels sont les
serveurs de base de données qui gèrent bien les verrous ?
je met un verrou sur l'entête dès qu'il y a la moindre modification à
venir sur une des lignes
Donc, verrouillage pessimiste. Le problème du verrouillage pessimiste
par en-têtes, c'est la cascade inverse. Si on va modifier une ligne de
facture, il faut, bien sûr, poser un verrou sur l'en-tête ; mais aussi
sur l'article, le client, l'établissement, etc. (pour cause d'intégrité
référentielle).
Si, par exemple lorsqu'un utilisateur veut faire une modification sur un
article très utilisé, dès que l'on aura plus de 5 ou 6 postes qui
facturent, la modif sera impossible, car toujours verrouillé par
quelqu'un d'autre.
Ou alors, il faut spécialiser les verrous, jusqu'au niveau des champs...
(bonjour l'usine à gaz).
En fait, j'ai un problème, pour un logiciel que j'avais développé en
Paradox, et que je voudrais ré-écrire en Python. C'est un logiciel
spécifique, dans le domaine de la santé. Ce logiciel est utilisé
24h./24h., par un nombre de postes variant de 6 à 50 (simultanément).
Avec Paradox, le verrouillage (pessimiste) est réalisé automatiquement
au niveau de chaque ligne, ce qui réduit les interactions, car dès qu'un
utilisateur change de ligne, les verrous sont relâchés. Mais, cela veut
dire que l'on n'a qu'une seule ligne à la fois (quoique, si Paradox n'a
qu'une ligne en modif, il a les autres en visu seule, avec, en plus, un
rafraîchissement automatique, toutes les 6 secondes).
J'ai bien quelques idées tordues, mais elles ne passent pas tous les
cas.
Re !
D'abord, merci d'avoir répondu.
Quels verrous résiduels ?
En verrouillage pessimiste, on pose les verrous (sur le serveur de base
de données) avant toute opération, et on les enlève, une fois la
transaction terminée.
Mais, si le poste qui verrouille est brutalement éteint (coupure de
courant, ou déconnexion intempestive, par exemple), les verrous restent.
C'est cela, que j'appelle verrou résiduel.
A noter que, si le serveur gère lui-même les verrous, il ne peut pas
savoir si le poste est vraiment coupé (verrous à supprimer), ou s'il est
simplement en veille (verrous à conserver). De plus, quels sont les
serveurs de base de données qui gèrent bien les verrous ?
je met un verrou sur l'entête dès qu'il y a la moindre modification à
venir sur une des lignes
Donc, verrouillage pessimiste. Le problème du verrouillage pessimiste
par en-têtes, c'est la cascade inverse. Si on va modifier une ligne de
facture, il faut, bien sûr, poser un verrou sur l'en-tête ; mais aussi
sur l'article, le client, l'établissement, etc. (pour cause d'intégrité
référentielle).
Si, par exemple lorsqu'un utilisateur veut faire une modification sur un
article très utilisé, dès que l'on aura plus de 5 ou 6 postes qui
facturent, la modif sera impossible, car toujours verrouillé par
quelqu'un d'autre.
Ou alors, il faut spécialiser les verrous, jusqu'au niveau des champs...
(bonjour l'usine à gaz).
En fait, j'ai un problème, pour un logiciel que j'avais développé en
Paradox, et que je voudrais ré-écrire en Python. C'est un logiciel
spécifique, dans le domaine de la santé. Ce logiciel est utilisé
24h./24h., par un nombre de postes variant de 6 à 50 (simultanément).
Avec Paradox, le verrouillage (pessimiste) est réalisé automatiquement
au niveau de chaque ligne, ce qui réduit les interactions, car dès qu'un
utilisateur change de ligne, les verrous sont relâchés. Mais, cela veut
dire que l'on n'a qu'une seule ligne à la fois (quoique, si Paradox n'a
qu'une ligne en modif, il a les autres en visu seule, avec, en plus, un
rafraîchissement automatique, toutes les 6 secondes).
J'ai bien quelques idées tordues, mais elles ne passent pas tous les
cas.
Re !
D'abord, merci d'avoir répondu.Quels verrous résiduels ?
En verrouillage pessimiste, on pose les verrous (sur le serveur de base
de données) avant toute opération, et on les enlève, une fois la
transaction terminée.
Mais, si le poste qui verrouille est brutalement éteint (coupure de
courant, ou déconnexion intempestive, par exemple), les verrous restent.
C'est cela, que j'appelle verrou résiduel.
A noter que, si le serveur gère lui-même les verrous, il ne peut pas
savoir si le poste est vraiment coupé (verrous à supprimer), ou s'il est
simplement en veille (verrous à conserver). De plus, quels sont les
serveurs de base de données qui gèrent bien les verrous ?
je met un verrou sur l'entête dès qu'il y a la moindre modification à
venir sur une des lignes
Donc, verrouillage pessimiste. Le problème du verrouillage pessimiste
par en-têtes, c'est la cascade inverse. Si on va modifier une ligne de
facture, il faut, bien sûr, poser un verrou sur l'en-tête ; mais aussi
sur l'article, le client, l'établissement, etc. (pour cause d'intégrité
référentielle).
Si, par exemple lorsqu'un utilisateur veut faire une modification sur un
article très utilisé, dès que l'on aura plus de 5 ou 6 postes qui
facturent, la modif sera impossible, car toujours verrouillé par
quelqu'un d'autre.
Ou alors, il faut spécialiser les verrous, jusqu'au niveau des champs...
(bonjour l'usine à gaz).
En fait, j'ai un problème, pour un logiciel que j'avais développé en
Paradox, et que je voudrais ré-écrire en Python. C'est un logiciel
spécifique, dans le domaine de la santé. Ce logiciel est utilisé
24h./24h., par un nombre de postes variant de 6 à 50 (simultanément).
Avec Paradox, le verrouillage (pessimiste) est réalisé automatiquement
au niveau de chaque ligne, ce qui réduit les interactions, car dès qu'un
utilisateur change de ligne, les verrous sont relâchés. Mais, cela veut
dire que l'on n'a qu'une seule ligne à la fois (quoique, si Paradox n'a
qu'une ligne en modif, il a les autres en visu seule, avec, en plus, un
rafraîchissement automatique, toutes les 6 secondes).
J'ai bien quelques idées tordues, mais elles ne passent pas tous les
cas.
Postgresql surement.
Pour les factures par ex, pas forcément besoin d'un verrou utilisateur
vu qu'on est obligé de copier toutes les données articles et clients,
peu importe s'ils changent pendant qu'on fait la saisie. C'est du cas
par cas quoi.
Sur le wikipython par ex, quand un utilisateur modifie une page le
verrou tien un certain temps, faut faire des aperçus pour le conserver
plus longtemps.
Postgresql surement.
Pour les factures par ex, pas forcément besoin d'un verrou utilisateur
vu qu'on est obligé de copier toutes les données articles et clients,
peu importe s'ils changent pendant qu'on fait la saisie. C'est du cas
par cas quoi.
Sur le wikipython par ex, quand un utilisateur modifie une page le
verrou tien un certain temps, faut faire des aperçus pour le conserver
plus longtemps.
Postgresql surement.
Pour les factures par ex, pas forcément besoin d'un verrou utilisateur
vu qu'on est obligé de copier toutes les données articles et clients,
peu importe s'ils changent pendant qu'on fait la saisie. C'est du cas
par cas quoi.
Sur le wikipython par ex, quand un utilisateur modifie une page le
verrou tien un certain temps, faut faire des aperçus pour le conserver
plus longtemps.
Re !Postgresql surement.
PostGresql, comme la quasi totalité des SGBD SQL, ne gère pas le
verrouillage pessimiste.
Et si je prend un cas simple : une facture, avec une seule ligne (un
article, commandé 90 fois). Deux postes lisent simultanément cette ligne
(temps 0), pour y apporter une modification :
- le premier supprime la ligne, parce que le client n'est pas
solvable, et valide (temps 1)
- le second remplace le code article, pour une question de stock
(temps 2)
S'il n'y a pas de verrou, le travail effectué par le premier poste sera
annulé, sans aucun avertissement ni message.
A noter qu'un verrouillage pessimiste aura prévenu le second poste au
moment où il voudra modifier, qu'il y a un problème.
Et, avec un verrouillage optimiste, le second poste verra sa validation
rejetée. Avec un problème délicat : l'identification de l'enregistrement
à pister.
Et encore, on ne parle que des cas simples. Avec les SGBD distribués,
déconnectés, etc. ça vire vite à une effroyable complexité.
D'ailleurs j'ai vu souvent des grosses applis, utilisant des SGBD connus
(SQl-server, Oracle, DB2, Firebird, etc.) QUI NE GÈRENT PAS CORRECTEMENT
LES VERROUS. Vu les niveaux de prix de ces logiciels (en millions
d'euros), je suis outré de tel manques. Mais, ça existe.
Re !
Postgresql surement.
PostGresql, comme la quasi totalité des SGBD SQL, ne gère pas le
verrouillage pessimiste.
Et si je prend un cas simple : une facture, avec une seule ligne (un
article, commandé 90 fois). Deux postes lisent simultanément cette ligne
(temps 0), pour y apporter une modification :
- le premier supprime la ligne, parce que le client n'est pas
solvable, et valide (temps 1)
- le second remplace le code article, pour une question de stock
(temps 2)
S'il n'y a pas de verrou, le travail effectué par le premier poste sera
annulé, sans aucun avertissement ni message.
A noter qu'un verrouillage pessimiste aura prévenu le second poste au
moment où il voudra modifier, qu'il y a un problème.
Et, avec un verrouillage optimiste, le second poste verra sa validation
rejetée. Avec un problème délicat : l'identification de l'enregistrement
à pister.
Et encore, on ne parle que des cas simples. Avec les SGBD distribués,
déconnectés, etc. ça vire vite à une effroyable complexité.
D'ailleurs j'ai vu souvent des grosses applis, utilisant des SGBD connus
(SQl-server, Oracle, DB2, Firebird, etc.) QUI NE GÈRENT PAS CORRECTEMENT
LES VERROUS. Vu les niveaux de prix de ces logiciels (en millions
d'euros), je suis outré de tel manques. Mais, ça existe.
Re !Postgresql surement.
PostGresql, comme la quasi totalité des SGBD SQL, ne gère pas le
verrouillage pessimiste.
Et si je prend un cas simple : une facture, avec une seule ligne (un
article, commandé 90 fois). Deux postes lisent simultanément cette ligne
(temps 0), pour y apporter une modification :
- le premier supprime la ligne, parce que le client n'est pas
solvable, et valide (temps 1)
- le second remplace le code article, pour une question de stock
(temps 2)
S'il n'y a pas de verrou, le travail effectué par le premier poste sera
annulé, sans aucun avertissement ni message.
A noter qu'un verrouillage pessimiste aura prévenu le second poste au
moment où il voudra modifier, qu'il y a un problème.
Et, avec un verrouillage optimiste, le second poste verra sa validation
rejetée. Avec un problème délicat : l'identification de l'enregistrement
à pister.
Et encore, on ne parle que des cas simples. Avec les SGBD distribués,
déconnectés, etc. ça vire vite à une effroyable complexité.
D'ailleurs j'ai vu souvent des grosses applis, utilisant des SGBD connus
(SQl-server, Oracle, DB2, Firebird, etc.) QUI NE GÈRENT PAS CORRECTEMENT
LES VERROUS. Vu les niveaux de prix de ces logiciels (en millions
d'euros), je suis outré de tel manques. Mais, ça existe.
Re !
Et encore, on ne parle que des cas simples. Avec les SGBD distribués,
déconnectés, etc. ça vire vite à une effroyable complexité.
D'ailleurs j'ai vu souvent des grosses applis, utilisant des SGBD connus
(SQl-server, Oracle, DB2, Firebird, etc.) QUI NE GÈRENT PAS CORRECTEMENT
LES VERROUS. Vu les niveaux de prix de ces logiciels (en millions
d'euros), je suis outré de tel manques. Mais, ça existe.
Re !
Et encore, on ne parle que des cas simples. Avec les SGBD distribués,
déconnectés, etc. ça vire vite à une effroyable complexité.
D'ailleurs j'ai vu souvent des grosses applis, utilisant des SGBD connus
(SQl-server, Oracle, DB2, Firebird, etc.) QUI NE GÈRENT PAS CORRECTEMENT
LES VERROUS. Vu les niveaux de prix de ces logiciels (en millions
d'euros), je suis outré de tel manques. Mais, ça existe.
Re !
Et encore, on ne parle que des cas simples. Avec les SGBD distribués,
déconnectés, etc. ça vire vite à une effroyable complexité.
D'ailleurs j'ai vu souvent des grosses applis, utilisant des SGBD connus
(SQl-server, Oracle, DB2, Firebird, etc.) QUI NE GÈRENT PAS CORRECTEMENT
LES VERROUS. Vu les niveaux de prix de ces logiciels (en millions
d'euros), je suis outré de tel manques. Mais, ça existe.
Michel Claveau - NoSpam SVP ; merci a écrit :Re !
Et encore, on ne parle que des cas simples. Avec les SGBD distribués,
déconnectés, etc. ça vire vite à une effroyable complexité.
D'ailleurs j'ai vu souvent des grosses applis, utilisant des SGBD connus
(SQl-server, Oracle, DB2, Firebird, etc.) QUI NE GÈRENT PAS CORRECTEMENT
LES VERROUS. Vu les niveaux de prix de ces logiciels (en millions
d'euros), je suis outré de tel manques. Mais, ça existe.
Connaissant bien le problème vu qu'il s'agit de ma partie (ERP/PGI) , le
problème est très complexe quelque que soit le système ou la base de
données
et c'est pour cette raison que le problème doit être géré au niveau
logiciel ET base de données sinon on perd l'ouverture de la base ce qui
est classique même chez les grands ERP/PGI
Il est nécessaire de respecter 2 choses :
* Une modification effectue la pose d'un verrou BDD ET LOGICIEL ainsi
si 2 personnes veulent modifier le même client une seule doit pouvoir le
faire mais la 2eme doit etre au courant
Michel Claveau - NoSpam SVP ; merci a écrit :
Re !
Et encore, on ne parle que des cas simples. Avec les SGBD distribués,
déconnectés, etc. ça vire vite à une effroyable complexité.
D'ailleurs j'ai vu souvent des grosses applis, utilisant des SGBD connus
(SQl-server, Oracle, DB2, Firebird, etc.) QUI NE GÈRENT PAS CORRECTEMENT
LES VERROUS. Vu les niveaux de prix de ces logiciels (en millions
d'euros), je suis outré de tel manques. Mais, ça existe.
Connaissant bien le problème vu qu'il s'agit de ma partie (ERP/PGI) , le
problème est très complexe quelque que soit le système ou la base de
données
et c'est pour cette raison que le problème doit être géré au niveau
logiciel ET base de données sinon on perd l'ouverture de la base ce qui
est classique même chez les grands ERP/PGI
Il est nécessaire de respecter 2 choses :
* Une modification effectue la pose d'un verrou BDD ET LOGICIEL ainsi
si 2 personnes veulent modifier le même client une seule doit pouvoir le
faire mais la 2eme doit etre au courant
Michel Claveau - NoSpam SVP ; merci a écrit :Re !
Et encore, on ne parle que des cas simples. Avec les SGBD distribués,
déconnectés, etc. ça vire vite à une effroyable complexité.
D'ailleurs j'ai vu souvent des grosses applis, utilisant des SGBD connus
(SQl-server, Oracle, DB2, Firebird, etc.) QUI NE GÈRENT PAS CORRECTEMENT
LES VERROUS. Vu les niveaux de prix de ces logiciels (en millions
d'euros), je suis outré de tel manques. Mais, ça existe.
Connaissant bien le problème vu qu'il s'agit de ma partie (ERP/PGI) , le
problème est très complexe quelque que soit le système ou la base de
données
et c'est pour cette raison que le problème doit être géré au niveau
logiciel ET base de données sinon on perd l'ouverture de la base ce qui
est classique même chez les grands ERP/PGI
Il est nécessaire de respecter 2 choses :
* Une modification effectue la pose d'un verrou BDD ET LOGICIEL ainsi
si 2 personnes veulent modifier le même client une seule doit pouvoir le
faire mais la 2eme doit etre au courant
il s'agit de ma partie (ERP/PGI)
il s'agit de ma partie (ERP/PGI)
il s'agit de ma partie (ERP/PGI)
Bonsoir !
Finalement, pas de solution miracle.
En pratique, on (je) constate que c'est rarement bien géré. Car, la
plupart du temps, soit les développeurs ne font rien, soit ils n'ont
même pas conscience qu'il peut y avoir un problème.
Parce que, gérer les verrous au niveau du SGBD, ça pose plein de
problèmes, selon les SGBD ; et, les travailler au niveau des applis,
c'est encore pire (genre : comment traiter les verrous posés par un
(autre) poste qui est en veille ?)
Bonsoir !
Finalement, pas de solution miracle.
En pratique, on (je) constate que c'est rarement bien géré. Car, la
plupart du temps, soit les développeurs ne font rien, soit ils n'ont
même pas conscience qu'il peut y avoir un problème.
Parce que, gérer les verrous au niveau du SGBD, ça pose plein de
problèmes, selon les SGBD ; et, les travailler au niveau des applis,
c'est encore pire (genre : comment traiter les verrous posés par un
(autre) poste qui est en veille ?)
Bonsoir !
Finalement, pas de solution miracle.
En pratique, on (je) constate que c'est rarement bien géré. Car, la
plupart du temps, soit les développeurs ne font rien, soit ils n'ont
même pas conscience qu'il peut y avoir un problème.
Parce que, gérer les verrous au niveau du SGBD, ça pose plein de
problèmes, selon les SGBD ; et, les travailler au niveau des applis,
c'est encore pire (genre : comment traiter les verrous posés par un
(autre) poste qui est en veille ?)