【问题标题】:Mark a post as read on appengine在 appengine 上将帖子标记为已读
【发布时间】:2014-02-26 22:11:57
【问题描述】:

我目前正在设计一个结构类似于 twitter/jaiku/reddit 的应用程序。基本上都有点赞和反对的小帖子,它们像reddit一样按分数和时间排序。

我已经完成了所有这些工作,但现在我们的要求发生了一些变化,我们需要用户能够将帖子标记为“已读”。这将使帖子不再显示在该用户的提要中。我可以为 (User, Post) 的每个元组使用 Read 实体对此进行建模,但这需要大量工作才能找到该表中“不”存在的帖子。或者,我可以反转该关系,以便每个未读帖子都有一个实体,并且更容易找到表中“确实”存在哪些帖子......但是我需要在这个表中创建一个条目每次发布帖子时的每个用户。这不会很好地扩展。

我的问题是:我将如何在 appengine 的数据存储区中为此类负面信息建模?如果这很重要,我正在使用 go 运行时,但任何运行时的答案都很好。

【问题讨论】:

    标签: google-app-engine go google-cloud-datastore


    【解决方案1】:

    这将是多对多的关系。 This article 描述了如何建模不同类型的关系,包括多对多。唯一的问题是我不确定您是否应该在帖子上存储用户的已读帖子列表,或已阅读该帖子的用户列表,因为在不同情况下,poth 列表可能会变大。如果帖子相对私密,并且没有被很多人看到,您可以在帖子模型上存储用户密钥列表。但是,如果一个帖子可以被数千人看到,那么最好在用户上存储一个帖子列表,因为可能不会有很多用户拥有数千个阅读帖子。另一种选择可能是丢弃旧帖子,或者只是丢弃它们的阅读状态。

    【讨论】:

    • 哦,好的。我在某处读到,由于索引属性限制,它们被限制为 5000 个元素。我将如何在查询中使用它?我认为 IN 运算符一次限制为 30 个元素。
    • 现在更新我的答案
    • 我实际上不确定我的答案是否有效,在阅读了 Guido Vanrossum 对这个问题的回答之后:stackoverflow.com/questions/15377119/…,即使他在谈论 ndb,python 数据存储 api,我认为这是关于在后台处理重复属性的方式。
    • 是的,它们似乎不适合这样的大型列表。问题仍然是我试图捕获的信息是负面的。无论选择何种表示,我都看不到任何方法可以找到列表中不在中的实体。
    • 从数据存储中取出所有帖子,甚至是已读帖子,然后在将它们放入模板之前检查它们的读取状态,或者将它们传递给以另一种方式客户端。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-15
    • 1970-01-01
    • 1970-01-01
    • 2015-10-08
    • 1970-01-01
    相关资源
    最近更新 更多