2011-05-20 3 views
0

J'ai un site Web où les gens publient des commentaires, des photos et d'autres contenus. Je veux ajouter une fonctionnalité que les utilisateurs peuvent aimer/contrairement à ces éléments. J'utilise une base de données pour stocker tout le contenu.Quelle serait une bonne stratégie pour implémenter des fonctionnalités similaires à celles de Facebook?

Il y a quelques approches que je suis à la recherche:

Méthode 1:

  1. Ajouter une colonne 'like_count' à la table, et incrémenter chaque fois que quelqu'un aime un article
  2. Ajouter une table 'user_likes' pour garder une trace que tout ce que l'utilisateur a aimé.

Avantages: Simple à mettre en œuvre, requêtes minimales requises. Inconvénients: L'élément doit être actualisé avec chaque changement de nombre similaire. J'ai toute une liste d'éléments mis en cache, ce qui va casser.

Méthode 2:

  1. Créer une nouvelle table « like_summary » et stocker les goûts total de chaque élément dans ce tableau
  2. Ajouter une table « user_likes » pour garder une trace que tout l'utilisateur a aimé.
  3. Cache les données like_summary dans memcache et Actionnez seulement si la valeur change

Plus: Moins charge sur le tableau principal des éléments, il peut être mis en cache sans se soucier. Les inconvénients: Trop de hits sur memcache (une page montre 20 éléments, qui doit être chargé à partir de memcache), peut être lent

Des suggestions?

+0

La question n'a pas beaucoup de sens sans plus d'informations sur la charge prévue, les numéros d'accès et l'architecture générale et la configuration. –

+0

Que voulez-vous dire par «implémenter facebook aime»? Voulez-vous que votre site Web duplique cette fonctionnalité (sans lien réel avec Facebook) ou souhaitez-vous une sorte d'intégration de mashup-kludge sur les sites Web? Très peu clair sans plus d'infos ... – phooji

+0

désolé d'être peu clair .. voici quelques détails supplémentaires: 1. Il va être interne seulement (donc ne pas être intégré sur des sites externes). 2. Vous pouvez le considérer comme un peu analogue au vote-up/vote-down sur le débordement de pile. 3. Je veux m'assurer qu'il est mis à l'échelle de 500 pages vues simultanées, chaque page contenant 25 éléments avec un nombre "like" affiché à côté.Le système global est basé sur Python/Mysql/Memcache, – Toofan

Répondre

3

Juste un fou idée: Pourquoi ne pas simplement utiliser le bouton like de Facebook? Ensuite, non seulement vous obtenez cette fonctionnalité gratuitement, mais vous pouvez augmenter considérablement le trafic vers votre site Web grâce aux messages muraux de Facebook: «Cette personne aime ce site».

+0

Ceci est pour un usage interne sur un site Web, la fonctionnalité est similaire à Facebook comme le bouton, mais pas exactement la même chose. – Toofan

1

Une table de relations qui effectue un mappage plusieurs-à-plusieurs entre l'utilisateur et l'élément devrait faire l'affaire.

1

Vous n'aurez besoin que de la table user_likes. Le nombre like_count est calculé à partir de cette table. Vous n'aurez besoin de stocker que si vous avez besoin de performances, mais comme vous utilisez memcached, il peut être judicieux de ne pas stocker la valeur agrégée dans la base de données, mais de la stocker uniquement dans memcached.

+0

Bon point. Je pensais à stocker le nombre de likes dans memcache, mais je me demande combien de performance aura-t-il par rapport au chargement de tout dans une seule instruction SQL. Pour une page avec 25 entités 'sympathiques', les options seront d'avoir 25 requêtes memcache une seule instruction sql. – Toofan

+0

Bien sûr, vous aurez le cache de requête dans MySQL, mais son utilisation est limitée. Memcache id très rapide, et vous serez capable de récupérer n'importe où de quelques dizaines à des centaines d'éléments dans le temps pour exécuter une seule petite requête. – GolezTrol

+0

Merci! ça a du sens. Si je réchauffe le memcache avec quelques-uns des «comtes» populaires, alors il devrait pouvoir s'en sortir plutôt bien. Une autre raison pour laquelle je voulais stocker les goûts dans la base de données était que je puisse faire des choses comme "le plus aimé". Je peux toujours stocker le nombre de likes dans la base de données mais l'utiliser pour le traitement par lots. – Toofan

Questions connexes