在GAE上有效实施“跟随”功能

时间:2012-02-16 17:19:49

标签: java google-app-engine scalability instagram

我正在使用Java / GAE上的“跟随”功能实现一个iPhone应用程序。 此功能类似于Instagram,因为用户可以关注其他用户的活动。活动可以是张贴的新照片,喜欢照片,跟随其他用户等等。

假设我们有两个实体:Follow和Event,它们都引用了用户ID。

所以我正在考虑使用OR查询来列出目标用户的事件。但GAE不支持OR查询,并且发出单独的查询也会效率低,因为查询的数量可能非常大(例如,100+跟随是一种常态)。

这样做的常见做法是什么?

3 个答案:

答案 0 :(得分:2)

我会为订阅和订阅者使用 ListProperty 。每次订阅用户发布时,您都会使用任务为每个订阅者添加条目以供查看。就像Rick Mangi所指出的那样,关系模型无法帮助您处理数据存储。如果您使用的是新的NDB API,则可以使用重复的属性。由于您要为每个观察者创建实体,因此异步API可能很方便。

答案 1 :(得分:1)

你必须停止思考关系模型;-)我们在应用程序上做类似的事情。保留“订阅”给在被跟踪用户的实体中被关注的用户的UID列表。当用户执行需要通知的操作时,为跟随用户的每个用户创建一个事件实体(是的,一个受欢迎的用户可以创建一大堆条目,这可以被卸载到任务队列)。

当用户检查通知时,您可以通过他的UID获取通知。由于这是索引,它将很快返回。当您获取事件时,删除它们或将它们标记为已读。

请记住,连接和其他过滤的查询非常慢,但是获取大量索引记录却不是。如果要创建大量记录,请将其卸载到任务队列。

答案 2 :(得分:1)

我们正在实施Etsy在其公共幻灯片分享中描述的模型。

这是架构图。

Etsy's Model

强烈建议您完整阅读其演示文稿。

Etsy Activity Feed Arch