View topic - FLOCK - Creusage de tête :-) :: FREDSOFTWARES
 
Navigation
RegisterRegister    Log inLog in    FAQFAQ    SearchSearch   
FLOCK - Creusage de tête :-)

 
Post new topic   Reply to topic    FREDSOFTWARES Forum Index -> Questions PHP/MySQL
View previous topic :: View next topic  
Author Message
populassite



Joined: 27 May 2004
Posts: 62
Location: France

PostPosted: Sun May 22, 2005 1:38 am    Post subject: FLOCK - Creusage de tête :-) Reply with quote

Voilà...

J'ai rebâti ma fonction de comptabilisation de bouton...

J'ai mis un lock_sh (share = partager), un lock_ex (écriture exlusive) et 2 lock_un (pour libérer)

Et voilà le code source que ça me donne.

J'aimerais votre avis sur les commentaires que j'ai écrits...

Pensez-vous, comme moi, que l'information de comptabilisation est PERDUE ou non ? Flock attend-t-il réellement son tour, ou bien est-il soit à true, soit à false... ce qui implique que le système fonctionne ou ne fonctionne pas, selon le verrouillage du fichier... bref, voici le code :

Code:

function compter_bouton($id) {

   if ($id) {

      global $root;

      $fichier          = $root."cache/nboutons/$id";

      if (file_exists($fichier)) {
      
         $fpo          = @fopen($fichier, "r");
         
         if ($fpo && flock($fpo, LOCK_SH)) { // pose un verrou en lecture      

            $read_ok   = 1;
   
            $nb      = fread($fpo, filesize($fpo));            
                        
            flock($fpo, LOCK_UN); // libère le verrou en lecture
         
         } else { $read_ok   = 0; }

         fclose($fpo);
      
      } else {

         $nb         = 0;
         
         $read_ok      = 1;
      }

      $nb++;

      if ($read_ok) {
   
         $fpw         = @fopen($fichier, "w");
   
         if ($fpw && flock($fpw, LOCK_EX)) { // pose un verrou en écriture
      
            fwrite($fpw, $nb);
         
            flock($fpw, LOCK_UN); // libère le verrou en écriture

            fclose($fpw);
         
         } else {
            
            // Ici, il serait bénéfique de rappeler la fonction compter_bouton($id)
         
            // car le système n'a pas pu enregistrer l'incrémentation du nombre d'affichages du bouton
            // puisque le fichier était protégé en écriture à cause d'un processus en parallèle
         }

      } else {
         
         // Ici, il serait bénéfique de rappeler la fonction compter_bouton($id)
         
         // car le système n'a pas pu accéder au nombre d'affichages du bouton dans le fichier de
         // comptabilisation à cause de la PROTECTION EN LECTURE dûe à des processus en parallèle
      }
   }

   return 1;   
}


Merci de vos éclaircissages !

Car, je n'ai trouvé strictement aucune explication "PROFESSIONNELLE" sur le web, parlant vraiment de la façon dont fonctionne ces VERROUILLAGES... Du coup, cela sème le doute en moi !!!!

Salutations
Back to top
View user's profile Send private message Send e-mail Visit poster's website
admin
Site Admin


Joined: 01 Aug 2002
Posts: 305
Location: 182

PostPosted: Mon Jun 06, 2005 7:56 pm    Post subject: Reply with quote

Flock attend-t-il réellement son tour, ou bien est-il soit à true, soit à false...

-> bonne question, je n'en sais rien...a tester en simulant
_________________
Fred

Fredsoftwares Forum Admin
Back to top
View user's profile Send private message Send e-mail AIM Address Yahoo Messenger MSN Messenger
populassite



Joined: 27 May 2004
Posts: 62
Location: France

PostPosted: Sat Jun 11, 2005 12:46 am    Post subject: ah là là Reply with quote

bon, du coup, je suis resté à mon ancienne méthode (test de taille de fichier <> 0) car c'est le seul qui ne BUGGUE PAS...

mais il me reste un autre problème de la même trempe...

en fait, chaque minute, via le mode CRON, je créé un fichier nommé "cache.php", contenant des structures de données php de la forme suivante :

Code:

<?
$nb_bouton = 10;
$BOUTON[1]['id'] = 1;
$BOUTON[1]['url'] = "http://www.populassite.com";
$BOUTON[2]['id'] = 1;
$BOUTON[2]['url'] = "http://www.populassite.com";
// [...]
?>


C'est une technique que j'ai inventée pour éviter d'avoir à se connecter à une base de données, ce qui prende la mémoire... et ainsi éviter les max_connexion... enfin, j'ai fait ça dans le but de GAGNER des ressources au niveau du processeur et de la ram du serveur... (je ne pense pas m'être trompé ?)

Mais le seul PROBLEME, et même très GRAVE....

C'est que PENDANT LA CREATION de ce fichier php... tous les scripts faisant appel à ce même fichier sont "en PARSE ERROR" car ils ne détectent pas un code PHP FINI, donc, il s'arrête avant un point virgule, avant les balises ?>, etc...

Seriez-vous comment EXPLOITER ce même fichier même s'il est en cours d'écriture ?

Seriez-vous comment faire pour ne pas le ZAPPER ??? car zapper serait équivalent pour mes membres à ne PLUS VOIR la palette flottante sur leur site...

en plus, cet espèce de bug fait planter mon cron de PURGE de minuit la plupart du temps...

car au delà du fait que ça plante en OUVERTURE (pour le <include>), ça plante aussi si on écrit par dessus un fichier qui n'est pas encore totalement écrit... !!!!!!!!

donc, si vous avez une idée à me proposer pour "limiter la casse" avec toutes ces écritures de fichiers... (je sais bien que lock... machin peut marcher, mais je n'ai strictemnt RIEN COMPRIS à son fonctionnement)

merci à vous

salutations cordiales
Back to top
View user's profile Send private message Send e-mail Visit poster's website
populassite



Joined: 27 May 2004
Posts: 62
Location: France

PostPosted: Sat Jun 11, 2005 12:49 am    Post subject: Reply with quote

http://www.fredsoftwares.com/forum/viewtopic.php?p=545#545

auriez-vous un CONSEIL, un INDICE.. pour me permettre de réussir LA où j'échoue actuellement ???

c'est à dire dans l'écriture de fichiers, l'ouverture de ces derniesr, l'accès aux fichiesr qui sont en cours d'écriture...

comment FAIRE ??

faut quand même pas utiliser une base de données qui consomme plein de puissance et de RAM ?

si ?

d'après vous, avec une moyenne journalière de 20.000 visiteurs distincts sur hit-parade et un serveur dédié, des requêtes SQL et des connexions sql à n'en plus finir serait souhaitables pour un serveur ? ou c'est bien mieux d'utiliser des fichiers de petites tailles et de faire des "caches" toutes les minutes pour optimiser le nombre de requêtes MYSQL ? (j'opterai intuitivement pour la seconde question)

MERCI DE VOTRE AIDE !
Back to top
View user's profile Send private message Send e-mail Visit poster's website
admin
Site Admin


Joined: 01 Aug 2002
Posts: 305
Location: 182

PostPosted: Sat Jun 11, 2005 6:16 am    Post subject: Reply with quote

créez vote fichier en cache2.php une fois fini unlunk cache.php et rename cache2.php en cache.php
_________________
Fred

Fredsoftwares Forum Admin
Back to top
View user's profile Send private message Send e-mail AIM Address Yahoo Messenger MSN Messenger
populassite



Joined: 27 May 2004
Posts: 62
Location: France

PostPosted: Sat Jun 11, 2005 11:48 am    Post subject: Reply with quote

BONJOUR Wink

j'ai eu EXACTEMENT cette idée qui m'est passé par la tête hier soir Wink

mais pensez-vous que ce soit RAPIDE ?

plus rapide que des octets qui s'écrivent en temps réel ?

pensez-vous que le LAPS DE TEMPS entre le UNLINK et RENAME soit suffisamment court à votre AVIS pour que les appels des palettes sur les sites de mes membres n'aient pas le temps de voir cette ERREUR de fichier non défini ? car pendant le LAPS de temps où le fichier est SUPPRIME... un processus pourrait demander à ACCEDER au fichier, non ?

merci pour cette indication... j'y avais pensé, mais j'ai cru que c'était équivalent...
Back to top
View user's profile Send private message Send e-mail Visit poster's website
admin
Site Admin


Joined: 01 Aug 2002
Posts: 305
Location: 182

PostPosted: Thu Jun 16, 2005 2:54 pm    Post subject: Reply with quote

populassite wrote:
BONJOUR Wink

j'ai eu EXACTEMENT cette idée qui m'est passé par la tête hier soir Wink

mais pensez-vous que ce soit RAPIDE ?

plus rapide que des octets qui s'écrivent en temps réel ?

pensez-vous que le LAPS DE TEMPS entre le UNLINK et RENAME soit suffisamment court à votre AVIS pour que les appels des palettes sur les sites de mes membres n'aient pas le temps de voir cette ERREUR de fichier non défini ? car pendant le LAPS de temps où le fichier est SUPPRIME... un processus pourrait demander à ACCEDER au fichier, non ?

merci pour cette indication... j'y avais pensé, mais j'ai cru que c'était équivalent...


il faut bien récrire le fichier donc statistiquement parlant cela peux planter de temps en temps le client qui surfe
_________________
Fred

Fredsoftwares Forum Admin
Back to top
View user's profile Send private message Send e-mail AIM Address Yahoo Messenger MSN Messenger
populassite



Joined: 27 May 2004
Posts: 62
Location: France

PostPosted: Thu Jun 16, 2005 3:37 pm    Post subject: Reply with quote

sauf qu'il s'agit de ré-écriture du "début du fichier" (puisque c'est le "lien" qui change et non pas son contenu Smile)

donc, CA NE PLANTE PLUS MAINTENANT Wink

SUPER cette astuce de rennommage, car ça évite de s'embrouiller avec les flocks... lol

ps : savez-vous si sur les serveurs linux d'aujourd'hui, la structure des fichiers est auto-défragmentée en permanence ? ou faut-il effectuer des défragmentations de son serveur ? (je dis ça à cause de tous ces compteurs de BOUTONS sous forme de fichiers quotidiens de petites tailles, que j'ai installés ainsi que les fichiers de petites tailles pour identifier les adresses IP, etc.)

ET comme il y a beaucoup de suppressions à minuit et d'insertion durant la journée, j'imagine que sans système d'auto défragmentation intégré à mon serveur dédié, il faudrait le faire périodiquement pour en OPTIMISER ses accès DISQUE ultérieurs... ?


salutations
Back to top
View user's profile Send private message Send e-mail Visit poster's website
admin
Site Admin


Joined: 01 Aug 2002
Posts: 305
Location: 182

PostPosted: Tue Jun 21, 2005 9:43 am    Post subject: Reply with quote

populassite wrote:
sauf qu'il s'agit de ré-écriture du "début du fichier" (puisque c'est le "lien" qui change et non pas son contenu Smile)

donc, CA NE PLANTE PLUS MAINTENANT Wink

SUPER cette astuce de rennommage, car ça évite de s'embrouiller avec les flocks... lol

ps : savez-vous si sur les serveurs linux d'aujourd'hui, la structure des fichiers est auto-défragmentée en permanence ? ou faut-il effectuer des défragmentations de son serveur ? (je dis ça à cause de tous ces compteurs de BOUTONS sous forme de fichiers quotidiens de petites tailles, que j'ai installés ainsi que les fichiers de petites tailles pour identifier les adresses IP, etc.)

ET comme il y a beaucoup de suppressions à minuit et d'insertion durant la journée, j'imagine que sans système d'auto défragmentation intégré à mon serveur dédié, il faudrait le faire périodiquement pour en OPTIMISER ses accès DISQUE ultérieurs... ?


salutations

je crois que la fragmentation n'existe pas sous linux
_________________
Fred

Fredsoftwares Forum Admin
Back to top
View user's profile Send private message Send e-mail AIM Address Yahoo Messenger MSN Messenger
populassite



Joined: 27 May 2004
Posts: 62
Location: France

PostPosted: Tue Jun 21, 2005 1:44 pm    Post subject: Reply with quote

bonjour

comment peut-on en être certain ?
Back to top
View user's profile Send private message Send e-mail Visit poster's website
Display posts from previous:   
Post new topic   Reply to topic    FREDSOFTWARES Forum Index -> Questions PHP/MySQL All times are GMT + 1 Hour
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2002 phpBB Group