1

我有一个集成了 Facebook 的应用程序。我正在获取用户 facebook 好友 (ID) 的列表,并想查询我的后端以了解哪些用户已注册我的服务

玩家在使用他们独特的 FBID 注册时被插入

player = Player.get_or_insert(FBID)

如果我的后端接收到数千个 FBID 数组,那么查询数据库以查找数据库中存在哪些 ID 的最佳方法是什么?

我可以遍历数组并从 ID=FBID 的玩家中选择,

for FBID in FBIDs:
    player = Player.get_by_id(FBID)
    if player is not None:
         responseArray.append(player)

但这将导致 N 次查询,这不是非常理想的,考虑到如果向数据库发出请求,可能会有成千上万的玩家在做这种事情。

做这样的查询是否更具成本效益"select from Players where ID == FBID#1 or ID == FBID#2 or FBID#3 ..."

4

1 回答 1

1

如果您使用 FBID 作为实体密钥 ID,您将能够使用密钥列表获取 get_multi()。通过知道如何构造 Key,这可能会更有效。

分配密钥 ID: Google App Engine NDB 自定义密钥 ID

https://developers.google.com/appengine/docs/python/ndb/functions ndb.get_multi(keys, **ctx_options) 获取由传递的键序列标识的实体。返回一个列表。每个列表项要么是 Model 实例,要么是 None(如果未找到键)。

您可以使用 appstats 评估不同的方法: https ://developers.google.com/appengine/docs/python/tools/appstats

于 2013-06-06T17:55:59.523 回答