Mes antécédents sont dans les bases de données relationnelles et je fais des expériences avec Google AppEngine principalement pour l'apprentissage. Je veux construire une application "élection" où un utilisateur appartient à un état (CA, NY, TX, etc), ils choisissent une partie (républicaine, démocratique, etc) et votent pour une année donnée (2012 pour l'instant mais l'application pourrait être réutilisée en 2016).Google AppEngine Sharding Question
Je veux qu'un utilisateur puisse voir son historique de vote et le changer une fois pour l'élection en cours. En outre, je vais exiger que les utilisateurs spécifient leur code postal et pensent qu'il serait bon d'exécuter des rapports par état et/ou code postal.
L'utilisation d'un DB relationnelle, il semble que vous voulez créer des tables comme ceci:
Users(userid, username, city, state, zip)
UserVote(userid, year, vote)
Et puis utilisez SQL pour exécuter des rapports. Avec le magasin de données AppEngine, il semble que l'exécution de rapports agrégés constitue un véritable défi.
Ma première prise serait de partitionner par User
où chaque utilisateur peut contenir une liste de Votes
et peut-être en double-enregistrer les agrégats ailleurs.
Des suggestions?
P.S. J'ai vu le projet AppEngine-MapReduce, mais je ne suis pas sûr si ce serait exagéré.
Qu'entendez-vous par «partition par utilisateur»? Pourquoi Mapreduce est-il exagéré? –
En ce qui concerne la «partition par utilisateur» - à partir de ma connaissance limitée du magasin de données, il n'y a aucun moyen de se joindre à travers les entités, sauf s'il s'agit d'une relation hiérarchique. La sélection minutieuse des entités "racine" (c'est-à-dire des utilisateurs) vous permet d'interroger par entité associée. En ce qui concerne mapreduce étant surpuissant - il semble que ce soit un moyen de calculer des agrégats, mais ajoute une couche supplémentaire de complexité en plus de beaucoup d'autres choses que j'essaie d'apprendre. – dana