Accès et écriture simultanée d'un fichier texte

Discussion dans 'Développement d'un site Web ou d'une appli mobile' créé par erestrebian, 2 Novembre 2007.

  1. erestrebian
    erestrebian WRInaute occasionnel
    Inscrit:
    15 Juin 2007
    Messages:
    411
    J'aime reçus:
    0
    Bonjour,

    J'ai une question concernant l'écriture sur un fichier texte. Imaginons que je stocke des informations dans un fichier texte pour ne pas avoir à faire un nombre impressionnant d'appels à la base de données. Le fichier peut-être modifier par un script php suite à une action de l'utilisateur. Si deux utilisateurs effectuent une action qui modifie le fichier au même moment T, que va-t-il se passer?

    D'après vous, est-ce une solution viable pour un site avec beaucoup d'utilisateurs? Quelles peuvent être les solutions alternatives si ce n'est pas viable?

    Merci pour vos réponses.
     
  2. julienr
    julienr WRInaute impliqué
    Inscrit:
    5 Août 2003
    Messages:
    939
    J'aime reçus:
    2
    si tu veux autoriser des accès concurents c'est possible mais il faudra que tu gères toi même la concurence en utilisant par exemple flock. Ensuite qui dit vérouillage dit process en attente donc faut voir par rapport à une base de données qui gère cela forcément mieux
     
  3. FloBaoti
    FloBaoti WRInaute impliqué
    Inscrit:
    30 Avril 2006
    Messages:
    640
    J'aime reçus:
    0
    Théoriquement c'est le système d'exploitation qui gère celà. Quand un fichier est ouvert en écriture, il est bloqué et personne d'autre ne peut l'ouvrir en écriture (mise en file d'attente).
     
  4. jcaron
    jcaron WRInaute accro
    Inscrit:
    13 Février 2004
    Messages:
    2 579
    J'aime reçus:
    0
    Ah bon? Ben tiens. Va falloir nous dire quel OS, et quelle doc dit ça... Sur la plupart des OS que je connais, rien n'empêche plusieurs process d'ouvrir le même fichier en lecture ou en écriture en même temps et faire tout plein de trucs dedans en même temps.

    D'ailleurs dans certains cas, ça ne pose aucun problème: si tous les processus sont en "append" sur un fichier, et qu'ils écrivent tous de façon "atomique" les éléments qui ne doivent pas être "mélangés", ça marche très bien (ce qui est quand même très pratique pour les logs et autres choses du genre).

    Mais à partir du moment où tu fais des accès aléatoires, il te faut mettre en place du locking toi même, que ce soit avec flock, les appels fcntl qui vont bien, les options O_SHLOCK/O_EXLOCK de open, ou d'autres méthodes.

    Ceci étant dit, pour répondre au posteur original, c'est justement tout là l'intérêt d'utiliser une base de données (décente) qui va gérer le locking à ta place aussi finement que possible (locker l'ensemble du fichier à chaque accès ça limite beaucoup les accès concurrents, sur un serveur web ça peut vite devenir assez embêtant), en plus de te permettre de faire des requêtes plus ou moins complexes, de tirer parti d'index, etc.

    La question serait donc plutôt: pourquoi vouloir se passer de la base de données pour ça?

    Jacques.
     
  5. supernini
    supernini Nouveau WRInaute
    Inscrit:
    25 Octobre 2005
    Messages:
    31
    J'aime reçus:
    0
    je géré un systeme d'environ 700 000 pages par jours avec plusieurs serveur en load balancing.

    Les logs sont enregistré sur chaque machine de cette facon, et cela fonctionne beaucoup plus vite que par un DB (serveur dual core 4 Gb...). C'est le systeme d'exploitation (fedora) qui gere les écritures.

    Par contre a chaque fois je n'ajoute qu'une seule ligne au fichier (avec des infos genre date;referrer;...)
     
  6. julienr
    julienr WRInaute impliqué
    Inscrit:
    5 Août 2003
    Messages:
    939
    J'aime reçus:
    2
    j'ai déjà vu dans un php_error.log deux notices s'imbriquées..., le système gère la concurence matérielle pour pas que deux process écrivent simultanément au même endroit, mais pour la cohérence logiciel c'est bien au développeur de locker comme il le faudrait
     
  7. jcaron
    jcaron WRInaute accro
    Inscrit:
    13 Février 2004
    Messages:
    2 579
    J'aime reçus:
    0
    Comme je le disais, ça marche très bien sans locks pour les logs à condition d'écrire de façon atomique (i.e. avec un seul appel système "write").

    Suivant le language utilisé et les empilements divers de librairies c'est plus ou moins évident, mais en général si on s'assure qu'une notice soit écrite en un seul appel ça marche très bien (i.e. on concatène tous les bouts en mémoire, et on écrit tout d'un coup, plutôt que de faire une série de "print" ou autre choses du genre).

    Par exemple:

    Code:
    print STDERR localtime();
    print STDERR " $$ ";
    print STDERR $erreur;
    print STDERR "\n";
    
    Ca ne marchera pas comme il faut. Par contre:

    Code:
    print STDERR localtime()." $$ $erreur\n";
    
    Ca marche très bien.

    Evidemment je parle de FS locaux, quand on commence à faire du NFS et autres joyeusetés du genre tout ça devient nettement moins certain...

    Jacques.
     
  8. supernini
    supernini Nouveau WRInaute
    Inscrit:
    25 Octobre 2005
    Messages:
    31
    J'aime reçus:
    0
    oui comme le dit jcaron, des écriture atomique sont indispensable pour que cela fonctionne
     
Chargement...
Similar Threads - Accès écriture simultanée Forum Date
Récriture .htaccess (sous-domaine + répertoire) URL Rewriting et .htaccess 11 Août 2020
Faire une redirection 301 et une réécriture en même temps (.htaccess) URL Rewriting et .htaccess 16 Décembre 2018
Réécriture url et htaccess URL Rewriting et .htaccess 3 Octobre 2018
Conseil sur l'écriture d'un htaccess pour un changement de site avec le même nom de domain URL Rewriting et .htaccess 20 Juin 2014
Re-écriture des lien en htaccess URL Rewriting et .htaccess 13 Novembre 2012
Aide réécriture d'url hataccess URL Rewriting et .htaccess 17 Août 2012
Problème de réecriture d'URL .htaccess URL Rewriting et .htaccess 8 Août 2012
(débutant) Réecriture via htaccess URL Rewriting et .htaccess 24 Mai 2012
écriture htaccess très simple ! URL Rewriting et .htaccess 12 Octobre 2011
Assistance htaccess ré-écriture URL - Help Débuter en référencement 27 Mai 2011
Réécriture htaccess Débuter en référencement 27 Avril 2011
Htaccess et réécriture d'urls Débuter en référencement 22 Août 2010
Prob ré-écriture par htaccess Développement d'un site Web ou d'une appli mobile 26 Mai 2010
2 réécritures accessibles par Google URL Rewriting et .htaccess 28 Avril 2010
Probleme réécriture lien ou.htaccess URL Rewriting et .htaccess 7 Mars 2010
Aide à l'écriture d'une redirection par htaccess URL Rewriting et .htaccess 14 Janvier 2010
Est t'il possible de faire de la réécriture d'url autrement qu'avec un htaccess ? URL Rewriting et .htaccess 14 Novembre 2009
Aide htaccess redirection et ré-écriture Débuter en référencement 24 Juillet 2009
Rééecriture d'url sans fichier .htaccess URL Rewriting et .htaccess 15 Janvier 2008
Problème d'écriture htaccess URL Rewriting et .htaccess 27 Février 2007