【问题标题】:Modeling a Friend relationship in GAE在 GAE 中建模朋友关系
【发布时间】:2010-11-17 16:53:06
【问题描述】:

我正在使用 GAE 并且有一个用户表。现在我想模拟用户之间的朋友关系。我正在考虑拥有 3 个属性 user1user2request_status,但问题在于查询以查找特定用户的朋友。由于 GAE 不允许OR 过滤,我必须合并两个查询。显然这是非常低效的。这只是我的方法的一个问题。 如果有人可以提出一个解决方案,让我跟踪所有朋友请求以及友谊,那将非常有帮助。

【问题讨论】:

    标签: google-app-engine google-cloud-datastore social-networking


    【解决方案1】:

    非规范化可以让您通过单个查询更有效地找到用户的朋友。尝试在您的模型中存储另一个属性 usersdb.ListProperty),其中包含 both user1user2。然后你可以简单地执行这样的查询来查找用户的朋友:

    friendships = Friendship.all().filter('users =', user).fetch(...)
    

    优点是您只需要一个查询(更快)。缺点是您将有一点额外的空间开销来存储users 属性和(自动)索引。

    【讨论】:

    • 是的,但是 user1 和 user2 的顺序是不确定的,如果用户 A 是发起者,那么它将是 user1,否则它将是 user2,
    • users 属性的顺序无关紧要。当您测试 ListProperty 的相等性时,它会测试其元素中的 any 是否等于您提供的值。因此,如果您存储执行上述查询,它将返回所有user1user2 等于userFriendship 实体(假设您正确填充users)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-11-27
    • 2013-08-21
    • 1970-01-01
    • 1970-01-01
    • 2011-09-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多