我有一个具有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 ..."这样的查询是否更具成本效益?

最佳答案

如果将FBID用作实体密钥ID,则可以使用密钥列表进行get_multi()。通过知道如何构造密钥,这可能会更有效。

分配密钥ID:
Google App Engine NDB custom key id

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

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

关于python - 在运行Python的Google App Engine上检查数据库是否包含1000个ID中的一个或多个,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16968572/

10-10 07:26