【发布时间】:2013-12-24 05:30:13
【问题描述】:
我已阅读有关扇出和大数据建模的不同文档,但我仍在努力弄清楚如何正确建模与登录用户相关的信息。以 reddit 为例,我正在尝试对帖子的 Upvote/Downvote 进行建模。所以这是我的两个实体:
class Score(ndb.Model):
post = schema.KeyProperty(required=True)
user = schema.KeyProperty(required=True)
score_value = schema.IntegerProperty(default=0)
class Post(ndb.Model):
# ... Other Properties ... #
def fetch_score_async(self, user):
self._score_query = Score.qry().filter(Score.post==self.key,
Score.user==user.key).get_async()
@property
def user_score(self):
ret = self._score_query.get_result()
return ret.score_value if ret else 0
然后我遍历结果中的帖子列表并调用fetch_score_async。
posts = Post.qry().filter(...).fetch_page(50)
for post in posts:
post.fetch_score_async()
最后,我再次迭代帖子列表并构建 JSON。这里的理论是分数将被并行获取,我的端点将与 post 查询加上最慢的分数一样快,而不是分数的总和。
但是正确的方法是什么?这感觉非常规和错误。我看到有人建议使用 tasklet 和/或 map/reduce 方法,但在这些情况下,他们有键和一对一或一对多的层次结构 (google dev guide)。
【问题讨论】:
标签: python google-app-engine google-cloud-datastore