Google App Engine上的交叉点

Der*_*mer 1 google-app-engine facebook google-cloud-datastore

当用户Facebook连接到我的网站时,我想将用户的Facebook好友列表范围缩小到那些已经注册我网站的用户.

所以我有两个清单

  • 用户的Facebook好友代码列表(约1000)
  • 已注册我网站的所有FB用户的GAE表(约1000)

最有效的方法是对所有已注册的FB用户的UID执行单个查询并在代码中执行交集吗?

如果有更多像10,000名FB用户注册的话,那么最有效的方法是在30秒内无法通过查询检索到这些用户?

Sud*_*han 5

稍微转过头来解决它的问题.当用户登录时,获取他的朋友列表并将facebook数字id存储在用户对象的list属性中.(你也可以使用一个索引对象......看看Brett Slatkin关于在GAE中做出扇出的演讲.)

就像是

class User:
  friend_ids = db.ListProperty()
Run Code Online (Sandbox Code Playgroud)

当新用户登录时,只需执行查询并过滤friend_ids = :id.这应该为您提供当前用户的朋友的现有用户列表.我相信其实就是你想要的.

如果您要查询的ID包含在列表中,则在列表属性上过滤的用户查询将返回用户,以防您不熟悉.文件在这里.

  • 使用这种方法需要注意一些事项.其中两个是:用户最多可以有5000个朋友,并且拥有包含许多项目的索引列表可能会导致数据存储问题:超时,爆炸索引等...此外,如果用户刚刚在FB上添加了一个朋友,然后登录到您的网站,他们不会是他们的朋友.您需要从FB订阅实时的朋友更新并更新所有相应的用户......并且要小心超时.(最好在任务队列中执行).有许多边缘情况......这是可行的,但并不简单. (3认同)