在GAE的基于python的facebook应用程序中,我想检查当前用户的哪些朋友已经“标记”了网页。
为此,我必须运行与朋友数量一样多的数据库查询(比如100) 我担心这可能会因为大量的查询而进入“超时”。
Google DOCs建议“列表”查询并行运行,这会节省时间吗? 此列表的限制为30,因此我必须进行2或3个列表类型的查询。
如果可能的话,请建议更好的方法,使用任务问题或其他......
答案 0 :(得分:1)
我建议如下:
答案 1 :(得分:1)
如果您已经知道其密钥或密钥名称,则可以并行获取最多1000个实体。
有几种方法可以解决您的具体问题。这是一个。
假设当用户“标记”网页时,您创建一个具有key_name的实体,该实体派生自用户的facebook id和页面密钥。
class PageMarker(db.Model):
user = db.ReferenceProperty(AppUser)
....
@classmethod
def mark_page(cls, user, page_key):
marker = cls.get_or_insert("%s_%s" % (user.facebook_id,
page_key, user=user)
这允许您获取并行标记页面的所有用户:
key_names = ["%s_%s" % (friend.facebook_id, page_key) for friend in friends]
markers = db.get(key_names)
# Use get_value_for_datastore to get the entity key without making a trip to the
# datastore
friends_who_bookmarked_keys = [marker.__class__.user.get_value_for_datastore(marker)\
for marker in markers]
friends = db.get(friends_who_bookmarked_keys)