Question

Je lisais autour, et je sais qu'il pourrait être impossible d'accomplir que je voulais que ce serait, mais j'espère qu'il ya une certaine façon, va donc ici ..

J'ai ID de d'utilisateurs et j'ai un compte pour chacun. Je voudrais être en mesure de stocker ces valeurs dans la mémoire de la machine, et mettre à jour la base de données une seule fois dans un certain temps, mais Absolutley pas constamment. La page est accessible depuis de nombreux utilisateurs bien sûr, et je veux le tableau de rester pertinent pour chaque utilisateur, et mettre à jour si nécessaire. (C'est une autre raison pour laquelle je ne veux pas utiliser la base de données. Les mises à jour prennent du temps avec des colonnes indexées, non?)

un réseau tel que: $ My_superglobal_arr = ( '1' => 304, '2' => 763, '6' => 12, '13' => 96); aurait été parfait.

Toutes les suggestions?

Merci!

Était-ce utile?

La solution

Mises à jour prennent du temps avec des colonnes indexées, droit?

Droit

. Cependant, cela dépend. Je vous conseille vivement d'aller pour la première base de données, acquérir de l'expérience pratique avec des mises à jour et des choses, apprendre ce montant particulier d'utilisateurs que vous pouvez appeler « beaucoup ». Et seulement alors décider, si vous avez vraiment besoin de votre configuration inhabituelle, est-il vraiment nécessaire fantasmes ou tout simplement imaginaires.

Lecture de vos autres questions que je ne peux dire que pour apprendre premier SQL est un must.

Autres conseils

Vous devez deux ArrayAccess avec APC capacités de mise en cache et un emploi Singleton motif.

class UserCounter implements ArrayAccess {
    public static function getInstance()
    {
        static $instance;
        if (!$instance) {
            $instance = new self;
        }
        return $instance;
    }

    public function offsetSet($offset, $value)
    {
        apc_store(__CLASS__.$offset, $value);
    }

    public function offsetExists($offset)
    {
        return !!apc_fetch(__CLASS__.$offset);
    }

    public function offsetUnset($offset)
    {
        apc_delete(__CLASS__.$offset);
    }

    public function offsetGet($offset) 
    {
        return apc_fetch(__CLASS__.$offset);
    }

    private function __construct() {}
    private function __clone() {}
    private function __wakeup() {}
}

Utilisation:

$user_counter = UserCounter::getInstance();
$user_counter[1] = $user_counter[1] + 1;
var_dump($user_counter[1]);

Sortie sur la première demande:

int(1)

Sur la seconde:

int(2)

Lorsque vous devez enregistrer ces compteurs dans une base de données:

$user_counter = UserCounter::getInstance();
foreach ($users as $user_id) {
   store_counter_in_db($user_id, $user_counter[$user_id]);
}

Note: il y a un bug qui peut vous empêcher de incrémenter un guichet unique lors de la demande unique dans certaines versions de APC. Incrémentation dans les demandes ultérieures ne sont pas un problème, en ce qui a je peux dire.

Ce n'est pas quelque chose PHP offre nativement. Vous êtes le meilleur pari est de stocker les données dans un magasin clé / valeur basée sur la mémoire. PHP supporte nativement memcached que la plupart des hôtes offrent. Vous pouvez également jeter un oeil à MongoDB et Redis

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top