2010-01-20 4 views
15

Sur PHP.net je regarde la fonction Memcache::set et il a ce drapeau en option pour utiliser la compression ...Qu'est-ce que la compression dans le Memcache de PHP?

Utilisez MEMCACHE_COMPRESSED pour stocker l'élément comprimé (utilise zlib).

$memcache_obj->set('var_key', 
        'some really big variable', 
        MEMCACHE_COMPRESSED, 
        50); 

Je suis curieux, quel serait l'avantage de cela, tout en utilisant moins d'espace? Il semble que cela ralentirait le processus?

+1

Il utilise moins d'espace dans memcache et prend moins de temps à transmettre sur le réseau. Mais vous ajoutez des frais généraux de compression et de décompression. De plus, vous courez un risque d'incompatibilité avec d'autres clients memcache, et des choses comme la commande memcache increment. –

Répondre

24

et Compresser sur les serveurs de décompression qui sont en cours d'exécution PHP peut être rapide - en fonction de votre réseau et la charge sur vos serveurs, il peut être plus rapide que le transfert plus (non compressé) données vers et depuis la serveurs memcached via le réseau.

La compression de vos données signifie également utiliser moins de mémoire sur les serveurs memcached. Comme souvent, vous devez choisir entre CPU, réseau et RAM - et vous devez prendre en considération vos serveurs et votre réseau, leur charge et les ressources disponibles, pour pouvoir décider.

Quelle sera la solution la plus "rapide" dans votre situation particulière? Vous seul pouvez le dire ... Et la seule façon de savoir est probablement de tester les deux solutions dans des "conditions réelles". En outre, les entrées memcached ne peuvent pas dépasser 1 Mo; Je suppose, à certains égards, que la compression peut aider à mettre des entrées un peu plus grandes que 1 Mo (quand pas encore compressé) dans memcached.

+1

Upvote pour mentionner max. taille de l'article. –

+0

Martin, merci beaucoup pour une autre bonne réponse! – Industrial

4

Vous avez raison, il y a un compromis entre prenant moins de place ou manger jusqu'à plus de cycles CPU.

Vous avez également choisi la ressource la plus précieuse pour vous, RAM ou CPU. Memcached peut être utilisé pour conserver une antémémoire distribuée entre les machines.

+1

Indice: RAM. Les processeurs modernes peuvent exécuter de vieux algorithmes comme zlib très rapidement. –

+1

Un autre indice. La RAM moderne est grande. Toujours profil ... –

4
  1. Dans ce cas, les mises à jour du cache devront être envoyées via le réseau ou une autre connexion entre les machines. La compression réduit la quantité de données à envoyer, ce qui réduit le temps nécessaire au transfert et peut donc améliorer les performances du système.
  2. Même avec un hôte, la compression est plus rapide que l'échange de pages de mémoire vers/depuis des disques, donc si vous écourtez une mémoire insuffisante, la compression réduira la quantité à échanger et améliorera ainsi les performances. Dans les conditions de coin correctes, la compression peut réduire la taille des données de sorte que vous n'avez pas besoin d'échanger du tout - une grande victoire dans les performances.
+1

Si votre hôte memcache (ou ses hôtes) est/sont en train de changer, vous faites quelque chose de très mal. – dland

Questions connexes