1

我正在用 Java/GAE 上的“跟随”功能实现一个 iPhone 应用程序。此功能与 Instagram 的相似之处在于用户可以关注其他用户的活动。事件可以是发布的新照片、喜欢照片、关注其他用户等。

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

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

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

4

3 回答 3

2

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

于 2012-02-16T23:59:29.213 回答
1

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

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

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

于 2012-02-16T23:14:06.040 回答
1

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

这是架构图。

Etsy的模型

强烈建议完整阅读他们的演示文稿。

Etsy 活动饲料拱门

于 2014-01-12T07:39:01.760 回答