Persistance des données

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Persistance des données

par Hubert Roksor » 23 août 2006, 13:12

À priori, fky n'a pas envie d'utiliser SHM (et on le comprend ;)) mais pour la sérialisation je ne vois pas comment l'éviter. Au mieux, tu peux utiliser APC pour sauvegarder tes objets en mémoire (la sérialisation est automatique, mais si tu as des ressources sauvegardées dans l'objet tu auras besoin d'une fonction __sleep() et __wakeup().

Dans tous les cas, ne perds pas de vue que ton objectif n'est pas de créer des objets partagés, c'est d'accélérer ton application. Mon conseil serait de ne pas essayer du tout (parce que tu vas beaucoup t'embêter et à la fin la solution ne sera même pas stable) et chercher un moyen similaire d'optimiser la vitesse de ton application. Par exemple, plutôt que de créer des machins globaux (qui seraient lents à manipuler, btw) tu pourrais créer une classe qui te renvoit une copie de l'objet, elle-même tirée du cache ou régénérée dynamiquement.

par naholyr » 23 août 2006, 08:54

ce n'est même pas vraiment expérimental mais plutôt stable ;) mais ça nécessite d'avoir la main complète sur le serveur (recompilation de php).
http://us3.php.net/memcache

Je n'ai pas testé, mais de ce que j'ai compris ça nécessite un serveur faisant tourner le démon memcached (le serveur local), et l'extension MemCache ne permet que de créer un script client de ce démon, elle ne dispense pas de l'installation du démon.

Edit: il y a aussi en standard la gestion de la mémoire partagée

par fab » 23 août 2006, 04:18

j'avais entendu parlé d'un mod de php expérimental et non-officiel qui permettait de transmettre un objet dans une super globale et ainsi de le garder constant cherche un peu sur le web ça doit etre trouvable enfin si cela correspond a tes besoins

par fky » 22 août 2006, 14:32

Merci pour cette réponse précise qui confirme mes soupçons.

par rami » 21 août 2006, 22:37

Le fait de travailler en PHP ne permet pas de garder en mémoire des objets (à ma connaissance) car on travaille en mode non connecté. Le seul moyen de simuler cela serait d'utiliser une session partagée par tous les utilisateurs mais attention au risque d'incohérence de l'état des objets puisqu'il n'existe pas la notion "synchronized" comme en Java. Par exemple, si tu utilises un singleton ainsi :
class Singleton
{
  private static $_instance;
  private function __construct(){}

  public function getInstance()
  {
    if(self::$_instance === null)
    {
      self::$_instance = new self();
    }
    return self::$_instance;
  }
}
}
Rien n'interdit que 2 utilisateurs appellent la méthode getInstance() au même moment, ce qui signifie que 2 instances de Singleton existerait.

Bref, je ne pense pas qu'il faille essayer de coder en PHP comme en Java.
De plus, si tu souhaites rendre persistants tes objets, tu devra obligatoirement passer par une sérialisation / désérialisation (qui est transparente lorsque les objets sont stockés en session).

Persistance des données

par fky » 19 août 2006, 15:40

Comment gérer des données persistantes en php avec les contraintes suivantes : globalement (pas de session), au niveau serveur (pas de cookies), à peu près transparent à coder (pas de gestion de threads à coder genre shm+sérialisation) et en mémoire (pas de bdd ou de fichier).
Bref, un fonctionnement à la jsp/asp.
L'idée est d'initialiser au lancement d'Apache/php un script global qui monte en mémoire une série de structures de données (à la manière d'un cache) qui permettent d'accélérer des recherches faites suite à des requetes xhr.

Merci d'avance