OVH Cloud OVH Cloud

wiki sans mysql

5 réponses
Avatar
Bruno.L
Bonjour,

Je me pose la question suivante:

Dans les wiki sans mysql (avec des petits .txt), comment sont gérés les
droits d'accès aux différents articles: que se passe-t-il si quelqu'un
ouvre un article en edition, pendant que quelqu'un d'autre travaille
dessus ? Le deuxième va travailler sur une version antérieure à celle
uploadée par le premier; les modifs du premier seront alors détruites,,,
non ?

Une solution consisterait à changer les droits (chmod 444) des .txt lors
de l'ouverture pour édition, et chmoder en 666 lors du upload, mais que
se passe-t-il si quelqu'un abandone son édition sans uploader ?

ou alors faut-il passer par mysql ?

Merci pour vos avis éclairés

Bruno

5 réponses

Avatar
dmetzler
Ca ne change rien que ce soit sous MySQL ou dans des fichiers textes.

Ca s'appelle la concurrence et c'est un problème avec de multiples
solutions.

Quand quelqu'un édite un enregistrements/page tu peux faire plusieurs
choses :
- ne rien faire
- bloquer l'enregistrement en édition

Le deuxième cas garantit que le fichier ne sera pas modifié par
quelqu'un d'autre et garantit l'intégrité.

Dans le premier cas, un personne peut à son tour éditer le fichier en
même temps. Dans ce cas, le premier qui appuie sur "Envoyer"
sauvegarde ses modifications.
Lorsque le deuxième valide, il y a encore plusieurs possibilités :
- soit ses modifications sont sauvegardées et cela écrase les
modifications du précédent
- soit on l'empêche de faire la modification
- soit on détecte que ses modifications ne rentrent pas en conflit
avec les modifications précédentes (pas les même lignes par exemple)
et ajoute ses modification à celle précédentes.
- soit il y a conflit et on lui propose de gérer le conflit en
renvoyant une version annotée.

C'est tout le problème des travaux en groupe, notamment pour la
gestion de configuration avec CVS par exemple.

Dans un wiki, il faudra choisir la manière dont tu vas gérer tout ça
en fonction de tes besoins.
Avatar
Bruno.L
Ca ne change rien que ce soit sous MySQL ou dans des fichiers textes.



mysql ne gère pas ces problème de concurence ?
j'imaginais qu'une base de donnée le faisait,,,
où est l'avantage de mysql alors ?

Ca s'appelle la concurrence et c'est un problème avec de multiples
solutions.

Quand quelqu'un édite un enregistrements/page tu peux faire plusieurs
choses :
- ne rien faire
- bloquer l'enregistrement en édition



imaginons que je choisisse de bloquer l'edition d'un enregistrement qui
est déjà en édition (en mettant un chmod 444 sur le .txt):
- comment gérer que c'est bien la personne qui l'a ouvert en premier qui
aurra droit à l'enregistrer (session? adresse IP?)
- si cette personne abandonne son édition, comment 'réouvrir' le petit
.txt (chmod 666)?

merci pour vos avis
Bruno

Avatar
dmetzler
MySQL gère la concurrence au moment où tu fais un INSERT, c'est à
dire une fois que la personne a appuyé sur "Valider". Mais le mode
Web, c'est un fonctionnement asynchrone. Tu envois le formulaire et tu
attends qu'il te revienne... Il peut ne jamais te revenir par exemple.
Il n'y a plus de connexion SQL au moment même de l'édition.

Il existe des moyen pour faire des locks, mais je crois que MySQL est
pas super fort pour ça. Le lock doit être au niveau de la table et
pas de l'enregistrement (corrigez moi si je me trompe surtout !). Ce
qui fait que si tu fais un lock, personne ne peut modifier d'autre
enregistrement de la même table en même temps.

Ensuite pour bloquer l'édition, tu soulève effectivement un
problème, toujours du au fait que l'édition web est asynchrone : un
fois que le fichier est en édition, il peut ne jamais être validé.
Il faudrait dans ce cas utiliser un autre fichier qui recense les
différents utilisateurs qui éditent les fichiers. Tu n'aurais alors
plus besoin de passer par les appels systèmes chmod car tu gère toi
même les droits.

Pour moi, la meilleure solution reste quand même celle proche de CVS.
Effectivement, il arrive rarement que deux utilisateurs modifient la
même section de page en même temps (ça arrive, mais la plupart du
temps ça n'arrive pas). Donc c'est le cas "rare" qu'il faut gérer en
gérant les conflits qu'il pourrait y avoir.

Exemple : tu édites une page et au moment de valider, le système te
dit : Attention, le fichier a été modifié par qqn et est en conflit
avec tes modifications ! Tiens revoilà le fichier et j'ai surligné
les parties en conflit : à toi de te débrouiller maintenant, moi je
sais pas faire.
Avatar
Bruno.L

Exemple : tu édites une page et au moment de valider, le système te
dit : Attention, le fichier a été modifié par qqn et est en conflit
avec tes modifications ! Tiens revoilà le fichier et j'ai surligné
les parties en conflit : à toi de te débrouiller maintenant, moi je
sais pas faire.


dans ce cas, le plus simple serait de diviser la page en petits
articles, chacun éditables séparéments (comme wikidepia d'ailleurs ;-).
Ce qui m'évite de devoir utiliser une gestion 'à la CVS', technique que
je ne connais pas.

imaginons alors, au momment où un visiteur prends un article pour
l'éditer, le PHP crée un petit fichier de lock (du même nom que
l'article avec un ~). On pourait imaginer que l'heure de création de ce
petit fichier déterminerait effectivement le lock: Ceci pour éviter le
problèmes de lock intempestifs liés à aux abandons d'édition.

ok! ca avance ;-) et on peut même se dire qu'à priori si quelqu'un prend
un article en édition c'est pour le modifier, et qu'il n'y aura que de
rares abandons (sauf accidents)

en tous cas merci pour ta réponse qui m'a bien guidée :-)

Bruno

Avatar
ph-m


Exemple : tu édites une page et au moment de valider, le système te
dit : Attention, le fichier a été modifié par qqn et est en conflit
avec tes modifications ! Tiens revoilà le fichier et j'ai surligné
les parties en conflit : à toi de te débrouiller maintenant, moi je
sais pas faire.



dans ce cas, le plus simple serait de diviser la page en petits
articles, chacun éditables séparéments (comme wikidepia d'ailleurs ;-).
Ce qui m'évite de devoir utiliser une gestion 'à la CVS', technique que
je ne connais pas.

imaginons alors, au momment où un visiteur prends un article pour
l'éditer, le PHP crée un petit fichier de lock (du même nom que
l'article avec un ~). On pourait imaginer que l'heure de création de ce
petit fichier déterminerait effectivement le lock: Ceci pour éviter le
problèmes de lock intempestifs liés à aux abandons d'édition.

ok! ca avance ;-) et on peut même se dire qu'à priori si quelqu'un prend
un article en édition c'est pour le modifier, et qu'il n'y aura que de
rares abandons (sauf accidents)

en tous cas merci pour ta réponse qui m'a bien guidée :-)



sinon je te conseille ce wiki sans base de données : dokuwiki
http://wiki.splitbrain.org/wiki:dokuwiki

a+
ph-m