我正在使用Java / GAE上的“跟随”功能实现一个iPhone应用程序。 此功能类似于Instagram,因为用户可以关注其他用户的活动。活动可以是张贴的新照片,喜欢照片,跟随其他用户等等。
假设我们有两个实体:Follow和Event,它们都引用了用户ID。
所以我正在考虑使用OR查询来列出目标用户的事件。但GAE不支持OR查询,并且发出单独的查询也会效率低,因为查询的数量可能非常大(例如,100+跟随是一种常态)。
这样做的常见做法是什么?
答案 0 :(得分:2)
我会为订阅和订阅者使用 ListProperty 。每次订阅用户发布时,您都会使用任务为每个订阅者添加条目以供查看。就像Rick Mangi所指出的那样,关系模型无法帮助您处理数据存储。如果您使用的是新的NDB API,则可以使用重复的属性。由于您要为每个观察者创建实体,因此异步API可能很方便。
答案 1 :(得分:1)
你必须停止思考关系模型;-)我们在应用程序上做类似的事情。保留“订阅”给在被跟踪用户的实体中被关注的用户的UID列表。当用户执行需要通知的操作时,为跟随用户的每个用户创建一个事件实体(是的,一个受欢迎的用户可以创建一大堆条目,这可以被卸载到任务队列)。
当用户检查通知时,您可以通过他的UID获取通知。由于这是索引,它将很快返回。当您获取事件时,删除它们或将它们标记为已读。
请记住,连接和其他过滤的查询非常慢,但是获取大量索引记录却不是。如果要创建大量记录,请将其卸载到任务队列。
答案 2 :(得分:1)