2010-07-09 5 views
1

J'utilise Google Appengine pour stocker une liste de favoris, reliant un identifiant d'utilisateur Facebook à un ou plusieurs ID de Bing. J'ai besoin d'appels de fonction retournant le nombre d'utilisateurs qui ont favorisé un article, et le nombre de fois qu'un article a été favorisé (et par qui).Relations plusieurs-à-plusieurs dans Google App Engine - efficace?

Ma question est, devrais-je résoudre cette relation dans deux tables pour l'efficacité? Si j'ai une table avec des colonnes pour Facebook ID et Bing ID, je peux facilement utiliser les requêtes select pour les deux fonctions ci-dessus, mais cela nécessitera que chaque ligne soit recherchée dans chaque requête. L'alternative est d'avoir deux tables, une pour les favoris de chaque utilisateur Facebook et l'autre pour les utilisateurs favoris de chaque élément Bing, et d'utiliser des transactions pour les synchroniser. L'option de deux tables a l'avantage de pouvoir utiliser JSON ou CSV dans la base de données de sorte qu'une seule ligne doit être récupérée, et une petite manipulation doit être effectuée pour une API.

Quelle option est la meilleure, en termes d'efficacité et de réduction des coûts?

Merci, Matt

Répondre

0

Je ne pense pas qu'il y ait une réponse dure et rapide à des questions comme celle-ci. "Est-ce que cette optimisation en vaut la peine" dépend toujours de nombreuses variables telles que, est-ce que le manque d'optimisation est en fait un problème pour commencer? À quel point est-ce un problème? Quel est le coût en termes de temps et d'efforts supplémentaires et le risque de bugs d'une implémentation optimisée plus complexe, par rapport aux avantages? Quels pourraient être les coûts supplémentaires de la mise en œuvre de l'optimisation plus tard, comme la migration des données vers un nouveau schéma?

+0

Oui j'ai réfléchi à ça. Bien qu'il soit peut-être plus efficace de le faire dans deux tables, il est certainement plus simple de ne conserver qu'une table, et des choses comme le débogage et la migration sont plus faciles. Après tout, je peux facilement générer les deux tables plus tard si l'efficacité est un problème. Merci :) – Matt