2009-07-29 7 views
22

J'ai un réseau socialSession VS Fichier VS Memcache pour un cache en PHP?

  • La table des utilisateurs est d'environ 60.000 lignes

  • Le tableau d'amis est d'environ 1 million lignes (utilisées pour déterminer qui est votre
    ami)

Je veux faire un fil d'ami, mur, quoi que vous l'appeliez, il affichera des choses comme le statut de l'utilisateur (messages de type Twitter), il montrera quelques articles différents mais pour le début ce sera juste un statut d'ami et peut-être un article de blog. Fondamentalement, vous ne verrez que le contenu publié avec un ID utilisateur figurant dans votre liste d'amis.

J'ai essayé de trouver le meilleur moyen et je ne suis pas allé très loin mais voici ma dernière idée.

Actuellement construire ce flux, je dois

  1. Obtenez la liste des amis ID de sur la grande table d'amis

  2. Obtenir les données de flux de l'ami ids du résultat ci-dessus

  3. JOIN le tableau de l'utilisateur pour obtenir le éditeurs image URL et nom d'utilisateur

  4. Alors REJOIGNEZ la table des commentaires pour obtenir commentaires postés sur les éléments d'alimentation

C'est une grande tâche pour construire cette alimentation

J'ai 3 idées à ce jour, c'est là votre aide peut venir

Memcache Option:.

  1. Utilisez memcache et mettre en cache un utilisateur friendlist comme un tableau lorsque l'utilisateur ouvre une session sur le site, également lorsque l'utilisateur approuve une nouvelle demande d'ami pour un ami à ajouter là liste, il rebâtirait il cache.
  2. En plus d'y avoir juste des amis, je pourrais y enregistrer l'URL et le nom d'utilisateur de l'ami, cela accélérerait encore les choses en éliminant cette requête lors de la création du flux d'amis.

cache de fichiers Option:

  1. Faites la même chose que l'option memcache ne sauve mais ces données comme un tableau dans un fichier de cache au lieu de la mémoire, comprennent alors ce fichier de cache en la page.

  2. Je ne sais pas quelle est la meilleure méthode pour la performance que je comprends tout stocke memcache en mémoire si des amis qui ont comme 20.000 amis qui pourraient utiliser beaucoup de mémoire et un cache de fichiers ne ferait que mettre il en mémoire lorsque les utilisateurs en a besoin si je suis correct. Aussi, si je fait la méthode de fichier, lorsqu'un utilisateur journaux sur le site, je voudrais supprimer il fichier cache de sorte que le dossier cache ne serait jamais trop grand nombre de fichiers

session cache Option:

  1. Identique au cache de fichiers ci-dessus, je viens de réaliser que les données enregistrées dans la session est un fichier pour ne serait-ce rendre capable d'être un cache?

S'il vous plaît me donner votre avis ou des conseils ou des informations que vous avez sur ce que je n'ai pas beaucoup de connaissances de la mise en cache, j'ai lu beaucoup, mais parfois d'autres idées peuples aident beaucoup

+0

« données de session est enregistrée dans un fichier ». Votre déclaration ci-dessus est erronée. La session peut être configurée pour stocker dans la base de données. Le gestionnaire de session par défaut est un fichier. – sudip

Répondre

28

Memcache est votre meilleur pari pour beaucoup de raisons:

  1. il est vraiment rapide - Tout est en mémoire, et il est fortement optimisé pour des situations comme la vôtre (et la mise en cache en général :)
  2. il est distribué - Cela signifie tha Si vous avez plusieurs serveurs Web/App en cours d'exécution, ils peuvent tous accéder au même cache
  3. Vous pouvez regrouper plusieurs serveurs pour memcache - Si vous avez quelques serveurs relativement sous-utilisés (ou plusieurs serveurs de cache dédiés), vous pouvez peut les regrouper tous ensemble dans un grand cache
  4. Il est super-évolutive (pour les raisons mentionnées avant)
  5. Il a obtenu un grand soutien PHP - Le package PECL memcache a été récemment mis à jour avec beaucoup de nouvelle bonté
  6. Vous peut même stocker vos sessions utilisateur dans memcache - il suffit de le configurer dans votre fichier php.ini. Ceci est beaucoup plus rapide que le stockage des sessions dans les bases de données, et permet à vos sessions de persister sur plusieurs hôtes web (si vous êtes dans une situation de charge équilibrée) ... cela donnera également un peu de performance à votre site car il n'y a pas besoin frapper le système de fichiers/base de données pour l'information de session sur chaque demande.

... et bien d'autres;)

Quant à certaines de vos préoccupations au sujet de l'empreinte mémoire des différents éléments mis en cache que vous avez quelques options.Ma première pensée est juste de lui donner un tourbillon, de voir à quel point ces éléments de cache obtiennent vraiment (vous pouvez trouver plusieurs choses open-source pour surveiller l'utilisation réelle du cache, comme les cactus). Je pense qu'ils seront plus petits que vous ne le pensez. Si ce n'est pas le cas, je suggérerais de repenser votre stratégie de cache en fonction de ce que vous mettez en cache, pendant combien de temps, etc. Vous pourriez peut-être construire le flux à partir de plusieurs éléments déjà dans le cache (c.-à-d. données utilisateur individuelles, puis créez le flux pour une personne à partir de tous ces éléments individuels dans le cache). Il ya beaucoup de bons articles sur ce front, il suffit de les rechercher :)

+0

Merci pour le poste très instructif, aussi quand vous mentionnez des cactus pour mesurer l'utilisation de RAM, voulez-vous dire le mesurer en général ou le mesurer en utilisant memcache? Merci – JasonDavis

+1

Il y a en fait un plugin cacti pour surveiller memcache lui-même ... vous donnera des hits/misses, num items, etc –

+0

merci je suis impatient d'essayer memcache, aussi je viens de découvrir facebook limite les gens à 5000 amis Je pense que je vais le faire aussi et cela aidera plus que n'importe quoi! – JasonDavis

1

La taille d'objet maximale par défaut autorisée dans Memcache est de 1 Mo.

@jsaondavis: "Les données de session sont sauvegardées dans un fichier".

Votre déclaration ci-dessus est erronée. La session peut être configurée pour stocker dans la base de données. La session par défaut hadndler est un fichier.

1

Redis serait une bonne solution:

Voici un fil sur le Redis Vs. Memcached. Sonne comme Redis a le stockage de 512Mo au lieu de la limite de 1 Mo ... Un peu différent :)

Memcached vs. Redis?